s3:smbldap: add smbldap_talloc_first_attribute()
authorStefan Metzmacher <metze@samba.org>
Tue, 5 Jan 2010 12:30:19 +0000 (13:30 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 14 Jan 2010 01:26:29 +0000 (02:26 +0100)
metze

Signed-off-by: Stefan Metzmacher <metze@samba.org>
(cherry picked from commit c992127f8a96c37940a6d298c7c6859c47f83d9b)

source3/include/smbldap.h
source3/lib/smbldap.c

index 8710e77f3d667b5bca883d71bab059d613c00605..e3b03d4948d1fbdff20fe8aeee7f6dc94a1a7b0c 100644 (file)
@@ -211,6 +211,9 @@ const char** get_userattr_list( TALLOC_CTX *mem_ctx, int schema_ver );
 char * smbldap_talloc_single_attribute(LDAP *ldap_struct, LDAPMessage *entry,
                                       const char *attribute,
                                       TALLOC_CTX *mem_ctx);
+char * smbldap_talloc_first_attribute(LDAP *ldap_struct, LDAPMessage *entry,
+                                     const char *attribute,
+                                     TALLOC_CTX *mem_ctx);
 char * smbldap_talloc_smallest_attribute(LDAP *ldap_struct, LDAPMessage *entry,
                                         const char *attribute,
                                         TALLOC_CTX *mem_ctx);
index 4727c1593e57f84e79bdf8ab845ee977ba4ecb7c..7aa36bac0b23bbc506414ea8dc81875c2ba7d3ec 100644 (file)
@@ -333,6 +333,40 @@ ATTRIB_MAP_ENTRY sidmap_attr_list[] = {
        return result;
 }
 
+ char * smbldap_talloc_first_attribute(LDAP *ldap_struct, LDAPMessage *entry,
+                                      const char *attribute,
+                                      TALLOC_CTX *mem_ctx)
+{
+       char **values;
+       char *result;
+       size_t converted_size;
+
+       if (attribute == NULL) {
+               return NULL;
+       }
+
+       values = ldap_get_values(ldap_struct, entry, attribute);
+
+       if (values == NULL) {
+               DEBUG(10, ("attribute %s does not exist\n", attribute));
+               return NULL;
+       }
+
+       if (!pull_utf8_talloc(mem_ctx, &result, values[0], &converted_size)) {
+               DEBUG(10, ("pull_utf8_talloc failed\n"));
+               ldap_value_free(values);
+               return NULL;
+       }
+
+       ldap_value_free(values);
+
+#ifdef DEBUG_PASSWORDS
+       DEBUG (100, ("smbldap_get_first_attribute: [%s] = [%s]\n",
+                    attribute, result));
+#endif
+       return result;
+}
+
  char * smbldap_talloc_smallest_attribute(LDAP *ldap_struct, LDAPMessage *entry,
                                          const char *attribute,
                                          TALLOC_CTX *mem_ctx)