pidl/python: Allow passing in UTF8 string objects as well as unicode
[sfrench/samba-autobuild/.git] / source3 / libads / ldap_schema.c
index ff41ccc8614a7319d237219baf95aa3244e42df8..66c9bf4b57ef95bbb23fc6ba18c3d8ef0687b18b 100644 (file)
@@ -19,6 +19,9 @@
 */
 
 #include "includes.h"
+#include "ads.h"
+#include "libads/ldap_schema.h"
+#include "../libcli/ldap/ldap_ndr.h"
 
 #ifdef HAVE_LDAP
 
@@ -122,7 +125,7 @@ const char *ads_get_attrname_by_guid(ADS_STRUCT *ads,
                goto done;
        }
 
-       guid_bin = guid_binstring(schema_guid);
+       guid_bin = ldap_encode_ndr_GUID(mem_ctx, schema_guid);
        if (!guid_bin) {
                goto done;
        }
@@ -145,7 +148,7 @@ const char *ads_get_attrname_by_guid(ADS_STRUCT *ads,
        result = ads_pull_string(ads, mem_ctx, res, "lDAPDisplayName");
 
  done:
-       SAFE_FREE(guid_bin);
+       TALLOC_FREE(guid_bin);
        ads_msgfree(ads, res);
        return result;
        
@@ -246,19 +249,22 @@ ADS_STATUS ads_check_posix_schema_mapping(TALLOC_CTX *mem_ctx,
                                        ADS_ATTR_SFU_GIDNUMBER_OID,
                                        ADS_ATTR_SFU_HOMEDIR_OID,
                                        ADS_ATTR_SFU_SHELL_OID,
-                                       ADS_ATTR_SFU_GECOS_OID};
+                                       ADS_ATTR_SFU_GECOS_OID,
+                                       ADS_ATTR_SFU_UID_OID };
 
        const char *oids_sfu20[] = {    ADS_ATTR_SFU20_UIDNUMBER_OID,
                                        ADS_ATTR_SFU20_GIDNUMBER_OID,
                                        ADS_ATTR_SFU20_HOMEDIR_OID,
                                        ADS_ATTR_SFU20_SHELL_OID,
-                                       ADS_ATTR_SFU20_GECOS_OID};
+                                       ADS_ATTR_SFU20_GECOS_OID,
+                                       ADS_ATTR_SFU20_UID_OID };
 
        const char *oids_rfc2307[] = {  ADS_ATTR_RFC2307_UIDNUMBER_OID,
                                        ADS_ATTR_RFC2307_GIDNUMBER_OID,
                                        ADS_ATTR_RFC2307_HOMEDIR_OID,
                                        ADS_ATTR_RFC2307_SHELL_OID,
-                                       ADS_ATTR_RFC2307_GECOS_OID };
+                                       ADS_ATTR_RFC2307_GECOS_OID,
+                                       ADS_ATTR_RFC2307_UID_OID };
 
        DEBUG(10,("ads_check_posix_schema_mapping for schema mode: %d\n", map_type));
 
@@ -359,6 +365,12 @@ ADS_STATUS ads_check_posix_schema_mapping(TALLOC_CTX *mem_ctx,
                    strequal(ADS_ATTR_SFU20_GECOS_OID, oids_out[i])) {
                        schema->posix_gecos_attr = talloc_strdup(schema, names_out[i]);
                }
+
+               if (strequal(ADS_ATTR_RFC2307_UID_OID, oids_out[i]) ||
+                   strequal(ADS_ATTR_SFU_UID_OID, oids_out[i]) ||
+                   strequal(ADS_ATTR_SFU20_UID_OID, oids_out[i])) {
+                       schema->posix_uid_attr = talloc_strdup(schema, names_out[i]);
+               }
        }
 
        if (!schema->posix_uidnumber_attr ||