From fc575a109f20bdc8502987bf6e16dd1b3b944635 Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Mon, 11 Feb 2008 20:45:59 +0000
Subject: [PATCH] add wrapper methods to add/replace Attributes

---
 contrib/ldapc++/src/LDAPAttributeList.cpp | 18 +++++++++
 contrib/ldapc++/src/LDAPAttributeList.h   |  7 +++-
 contrib/ldapc++/src/LDAPEntry.cpp         | 15 +++++++
 contrib/ldapc++/src/LDAPEntry.h           | 48 +++++++++++++++++------
 4 files changed, 74 insertions(+), 14 deletions(-)

diff --git a/contrib/ldapc++/src/LDAPAttributeList.cpp b/contrib/ldapc++/src/LDAPAttributeList.cpp
index 1fc11efb3d..ce712dbd12 100644
--- a/contrib/ldapc++/src/LDAPAttributeList.cpp
+++ b/contrib/ldapc++/src/LDAPAttributeList.cpp
@@ -139,6 +139,24 @@ void LDAPAttributeList::addAttribute(const LDAPAttribute& attr){
     }
 }
 
+void LDAPAttributeList::replaceAttribute(const LDAPAttribute& attr)
+{
+    DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::replaceAttribute()" << endl);
+    DEBUG(LDAP_DEBUG_TRACE | LDAP_DEBUG_PARAMETER,
+            "   attr:" << attr << endl);
+    
+    LDAPAttributeList::iterator i;
+    for( i = m_attrs.begin(); i != m_attrs.end(); i++){
+	if(attr.getName().size() == i->getName().size()){
+	    if(equal(attr.getName().begin(), attr.getName().end(), i->getName().begin(),
+		    nocase_compare)){
+                m_attrs.erase(i);
+                break;
+            }
+        }
+    }
+    m_attrs.push_back(attr);
+}
 
 LDAPMod** LDAPAttributeList::toLDAPModArray() const{
     DEBUG(LDAP_DEBUG_TRACE,"LDAPAttribute::toLDAPModArray()" << endl);
diff --git a/contrib/ldapc++/src/LDAPAttributeList.h b/contrib/ldapc++/src/LDAPAttributeList.h
index 283ad60c68..30ec6691f4 100644
--- a/contrib/ldapc++/src/LDAPAttributeList.h
+++ b/contrib/ldapc++/src/LDAPAttributeList.h
@@ -84,13 +84,18 @@ class LDAPAttributeList{
 	 */
 	const LDAPAttribute* getAttributeByName(const std::string& name) const;
 
-
         /**
          * Adds one element to the end of the list.
          * @param attr The attribute to add to the list.
          */
         void addAttribute(const LDAPAttribute& attr);
 
+        /**
+         * Replace an Attribute in the List
+         * @param attr The attribute to add to the list.
+         */
+        void replaceAttribute(const LDAPAttribute& attr);
+
         /**
          * Translates the list of Attributes to a 0-terminated array of
          * LDAPMod-structures as needed by the C-API
diff --git a/contrib/ldapc++/src/LDAPEntry.cpp b/contrib/ldapc++/src/LDAPEntry.cpp
index a4dbb79a3b..6084b10088 100644
--- a/contrib/ldapc++/src/LDAPEntry.cpp
+++ b/contrib/ldapc++/src/LDAPEntry.cpp
@@ -67,6 +67,21 @@ const LDAPAttributeList* LDAPEntry::getAttributes() const{
     return m_attrs;
 }
 
+const LDAPAttribute* LDAPEntry::getAttributeByName(const std::string& name) const 
+{
+    return m_attrs->getAttributeByName(name);
+}
+
+void LDAPEntry::addAttribute(const LDAPAttribute& attr)
+{
+    m_attrs->addAttribute(attr);
+}
+
+void LDAPEntry::replaceAttribute(const LDAPAttribute& attr)
+{
+    m_attrs->replaceAttribute(attr); 
+}
+
 ostream& operator << (ostream& s, const LDAPEntry& le){
     s << "DN: " << le.m_dn << ": " << *(le.m_attrs); 
     return s;
diff --git a/contrib/ldapc++/src/LDAPEntry.h b/contrib/ldapc++/src/LDAPEntry.h
index 03c35138e4..a385b17718 100644
--- a/contrib/ldapc++/src/LDAPEntry.h
+++ b/contrib/ldapc++/src/LDAPEntry.h
@@ -17,11 +17,11 @@ class LDAPAsynConnection;
  */
 class LDAPEntry{
 
-	public :
+    public :
         /**
          * Copy-constructor
          */
-		LDAPEntry(const LDAPEntry& entry);
+        LDAPEntry(const LDAPEntry& entry);
 
         /**
          * Constructs a new entry (also used as standard constructor).
@@ -29,7 +29,7 @@ class LDAPEntry{
          * @param dn    The Distinguished Name for the new entry.
          * @param attrs The attributes for the new entry.
          */
-		LDAPEntry(const std::string& dn=std::string(), 
+        LDAPEntry(const std::string& dn=std::string(), 
                 const LDAPAttributeList *attrs=new LDAPAttributeList());
 
         /**
@@ -38,44 +38,66 @@ class LDAPEntry{
          * The constructor is used internally to create a LDAPEntry from
          * the C-API's data structurs.
          */ 
-		LDAPEntry(const LDAPAsynConnection *ld, LDAPMessage *msg);
+        LDAPEntry(const LDAPAsynConnection *ld, LDAPMessage *msg);
 
         /**
          * Destructor
          */
-		~LDAPEntry();
+        ~LDAPEntry();
         
         /**
          * Sets the DN-attribute.
          * @param dn: The new DN for the entry.
          */
-		void setDN(const std::string& dn);
+        void setDN(const std::string& dn);
 
         /**
          * Sets the attributes of the entry.
          * @param attr: A pointer to a std::list of the new attributes.
          */
-		void setAttributes(LDAPAttributeList *attrs);
+        void setAttributes(LDAPAttributeList *attrs);
+
+	/**
+	 * Get an Attribute by its AttributeType (simple wrapper around
+         * LDAPAttributeList::getAttributeByName() )
+	 * @param name The name of the Attribute to look for
+	 * @return a pointer to the LDAPAttribute with the AttributeType 
+	 *	"name" or 0, if there is no Attribute of that Type
+	 */
+	const LDAPAttribute* getAttributeByName(const std::string& name) const;
+
+        /**
+         * Adds one Attribute to the List of Attributes (simple wrapper around
+         * LDAPAttributeList::addAttribute() ).
+         * @param attr The attribute to add to the list.
+         */
+        void addAttribute(const LDAPAttribute& attr);
+
+        /**
+         * Replace an Attribute in the List of Attributes (simple wrapper
+         * around LDAPAttributeList::replaceAttribute() ).
+         * @param attr The attribute to add to the list.
+         */
+        void replaceAttribute(const LDAPAttribute& attr);
 
         /**
          * @returns The current DN of the entry.
          */
-		const std::string& getDN() const ;
+        const std::string& getDN() const ;
 
         /**
          * @returns A const pointer to the attributes of the entry.  
          */
-		const LDAPAttributeList* getAttributes() const;
+        const LDAPAttributeList* getAttributes() const;
 
         /**
          * This method can be used to dump the data of a LDAPResult-Object.
          * It is only useful for debugging purposes at the moment
          */
-		friend std::ostream& operator << (std::ostream& s, const LDAPEntry& le);
+        friend std::ostream& operator << (std::ostream& s, const LDAPEntry& le);
 	
     private :
-
-		LDAPAttributeList *m_attrs;
-		std::string m_dn;
+        LDAPAttributeList *m_attrs;
+        std::string m_dn;
 };
 #endif  //LDAP_ENTRY_H
-- 
GitLab