]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
r23829: Add ads_get_attrname_by_guid().
authorGünther Deschner <gd@samba.org>
Wed, 11 Jul 2007 10:26:02 +0000 (10:26 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:28:31 +0000 (12:28 -0500)
Guenther

source/lib/util_uuid.c
source/libads/ldap_schema.c

index a20387e8e59a5eb99e1cbf008c35f0ba3b42b522..4a9c0848d28efe3e74afea333fa7fcfb4cfe82ce 100644 (file)
@@ -133,3 +133,19 @@ BOOL smb_string_to_uuid(const char *in, struct GUID* uu)
 out:
         return ret;
 }
+
+/*****************************************************************
+ Return the binary string representation of a GUID.
+ Caller must free.
+*****************************************************************/
+
+char *guid_binstring(const struct GUID *guid)
+{
+       UUID_FLAT guid_flat;
+
+       smb_uuid_pack(*guid, &guid_flat);
+
+       return binary_string_rfc2254((char *)guid_flat.info, UUID_FLAT_SIZE);
+}
+
+
index f71f53adb6705e37a520d56bdb416370fdef21d6..2672d883066c57e135804d91b100e6f362621e89 100644 (file)
@@ -1,7 +1,7 @@
 /* 
    Unix SMB/CIFS implementation.
    ads (active directory) utility library
-   Copyright (C) Guenther Deschner 2005-2006
+   Copyright (C) Guenther Deschner 2005-2007
    Copyright (C) Gerald (Jerry) Carter 2006
    
    This program is free software; you can redistribute it and/or modify
@@ -106,6 +106,56 @@ out:
        return status;
 }
 
+const char *ads_get_attrname_by_guid(ADS_STRUCT *ads, 
+                                    const char *schema_path, 
+                                    TALLOC_CTX *mem_ctx, 
+                                    const char *schema_guid)
+{
+       ADS_STATUS rc;
+       LDAPMessage *res = NULL;
+       char *expr = NULL;
+       const char *attrs[] = { "lDAPDisplayName", NULL };
+       const char *result = NULL;
+       struct GUID guid;
+       char *guid_bin = NULL;
+
+       if (!ads || !mem_ctx || !schema_guid) {
+               goto done;
+       }
+
+       if (!NT_STATUS_IS_OK(GUID_from_string(schema_guid, &guid))) {
+               goto done;
+       }
+
+       guid_bin = guid_binstring(&guid);
+       if (!guid_bin) {
+               goto done;
+       }
+
+       expr = talloc_asprintf(mem_ctx, "(schemaIDGUID=%s)", guid_bin);
+       if (!expr) {
+               goto done;
+       }
+
+       rc = ads_do_search_retry(ads, schema_path, LDAP_SCOPE_SUBTREE, 
+                                expr, attrs, &res);
+       if (!ADS_ERR_OK(rc)) {
+               goto done;
+       }
+
+       if (ads_count_replies(ads, res) != 1) {
+               goto done;
+       }
+
+       result = ads_pull_string(ads, mem_ctx, res, "lDAPDisplayName");
+
+ done:
+       SAFE_FREE(guid_bin);
+       ads_msgfree(ads, res);
+       return result;
+       
+}
+
 const char *ads_get_attrname_by_oid(ADS_STRUCT *ads, const char *schema_path, TALLOC_CTX *mem_ctx, const char * OID)
 {
        ADS_STATUS rc;
@@ -147,7 +197,6 @@ failed:
        ads_msgfree(ads, res);
        return NULL;
 }
-
 /*********************************************************************
 *********************************************************************/