xref: /netbsd-src/external/bsd/openldap/dist/contrib/ldapc++/src/LDAPAttribute.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1 /*	$NetBSD: LDAPAttribute.h,v 1.3 2021/08/14 16:14:49 christos Exp $	*/
2 
3 // $OpenLDAP$
4 /*
5  * Copyright 2000-2021 The OpenLDAP Foundation, All Rights Reserved.
6  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
7  */
8 
9 
10 #ifndef LDAP_ATTRIBUTE_H
11 #define LDAP_ATTRIBUTE_H
12 
13 #include<iostream>
14 #include<string>
15 #include<ldap.h>
16 #include<lber.h>
17 
18 #include <StringList.h>
19 
20 /**
21  * Represents the name an value(s) of an Attribute
22  */
23 class LDAPAttribute{
24     public :
25         /**
26          * Default constructor.
27          * initializes an empty object.
28          */
29         LDAPAttribute();
30 
31         /**
32          * Copy constructor.
33          * Copies all values of an Attribute to a new one
34          * @param attr   The Attribute that should be copied
35          */
36         LDAPAttribute(const LDAPAttribute& attr);
37 
38         /**
39          * Construct an Attribute with a single string value
40          * @param name      The attribute's name (type)
41          * @param value     The string value of the attribute, if "" the
42          *                  attribute will have no values, for LDAPv3
43          *                  this values must be UTF-8 encoded
44          */
45         LDAPAttribute(const std::string& name, const std::string& value="");
46 
47         /**
48          * Construct an attribute with multiple string values
49          * @param name      The attribute's name (type)
50          * @param values    A 0-terminated array of char*. Each char* specifies
51          *                  one value of the attribute (UTF-8 encoded)
52          */
53         LDAPAttribute(const char* name, char **values);
54 
55         /**
56          * Construct an attribute with multiple string values
57          * @param name      The attribute's name (type)
58          * @param values    A list of strings. Each element specifies
59          *                  one value of the attribute (UTF-8 or binary
60          *                  encoded)
61          */
62         LDAPAttribute(const std::string& name, const StringList& values);
63 
64         /**
65          * Construct an attribute with multiple binary coded values
66          * @param name      The attribute's name (type)
67          * @param values    0-terminated array of binary attribute values
68          *                  The BerValue struct is declared as:<BR>
69          *                  struct berval{
70          *                      unsigned long bv_len;
71          *                      char *bv_val;
72          *                  } BerValue;
73          */
74         LDAPAttribute(const char* name, BerValue **values);
75 
76         /**
77          * Destructor
78          */
79         ~LDAPAttribute();
80 
81         /**
82          * Add a single string value(bin/char) to the Attribute
83          * @param value Value that should be added, it is copied inside the
84          *              object
85          */
86         void addValue(const std::string& value);
87 
88         /**
89          * Add a single binary value to the Attribute
90          * @param value The binary coded value that should be added to the
91          *              Attribute.
92          * @return  0  no problem <BR>
93          *          -1 failure (mem. allocation problem)
94          */
95         int addValue(const BerValue *value);
96 
97         /**
98          * Set the values of the attribute. If the object contains some values
99          * already, they are deleted
100          * @param values    0-terminated array of char*, each char*
101          *                  representing a string value to add to the entry
102          *
103          * @return  0  no problem <BR>
104          *          -1 failure (mem. allocation problem)
105          */
106         int setValues(char** values);
107 
108         /**
109          * Set the values of the attribute. If the object does already contain
110          * some values, they will be deleted
111          * @param values    0-terminated array of BerValue*, each BerValue
112          *                  representing a binary value to add to the entry
113          *
114          * @return  0  no problem <BR>
115          *          -1 failure (mem. allocation problem)
116          */
117         int setValues(BerValue** values);
118 
119         /**
120          * Set the values of the attribute. If the object does already contain
121          * some values, they will be deleted
122          * @param values    A list of string-Objects. Each string is
123          *                  representing a string or binary value to add to
124          *                  the entry
125          */
126         void setValues(const StringList& values);
127 
128         /**
129          * For internal use only.
130          * This method is used to translate the values of the Attribute to
131          * 0-terminated Array of BerValue-structs as used by the C-API
132          * @return  The Values of the Attribute as an 0-terminated Array of
133          *          BerValue* (is dynamically allocated, delete it after usage)
134          *          <BR>
135          *          0-pointer in case of error
136          */
137         BerValue** getBerValues() const;
138 
139         /**
140          * @return The values of the array as a list of strings
141          */
142         const StringList& getValues() const;
143 
144         /**
145          * @return The number of values of the attribute
146          */
147         int getNumValues() const;
148 
149         /**
150          * @return The name(type) of the attribute
151          */
152         const std::string& getName() const ;
153 
154         /**
155          * Sets the Attribute's name (type)
156          * @param the new name of the object
157          */
158         void setName(const std::string& name);
159 
160         /**
161          * For internal use only.
162          *
163          * This method translate the attribute of the object into a
164          * LDAPMod-Structure as used by the C-API
165          */
166         LDAPMod* toLDAPMod() const ;
167 
168         /**
169          * @return true If the attribute contains non-printable attributes
170          */
171         bool isNotPrintable() const ;
172 
173     private :
174         std::string m_name;
175         StringList m_values;
176 
177     /**
178      * This method can be used to dump the data of a LDAPResult-Object.
179      * It is only useful for debugging purposes at the moment
180      */
181     friend std::ostream& operator << (std::ostream& s, const LDAPAttribute& attr);
182 };
183 #endif //#ifndef LDAP_ATTRIBUTE_H
184