diff options
author | Günther Deschner <gd@samba.org> | 2007-07-11 10:26:02 +0000 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2007-07-11 10:26:02 +0000 |
commit | 61fd556f81365b69a89a15a28e65bd7a3f17d036 (patch) | |
tree | fca942d98e2735158adc5bbbd31219d53fe22f95 /source/libads/ldap_schema.c | |
parent | 085d92e00dcc1108442be0f9081eadf18f240778 (diff) | |
download | samba-61fd556f81365b69a89a15a28e65bd7a3f17d036.tar.gz samba-61fd556f81365b69a89a15a28e65bd7a3f17d036.tar.xz samba-61fd556f81365b69a89a15a28e65bd7a3f17d036.zip |
r23829: Add ads_get_attrname_by_guid().
Guenther
Diffstat (limited to 'source/libads/ldap_schema.c')
-rw-r--r-- | source/libads/ldap_schema.c | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/source/libads/ldap_schema.c b/source/libads/ldap_schema.c index f71f53adb67..2672d883066 100644 --- a/source/libads/ldap_schema.c +++ b/source/libads/ldap_schema.c @@ -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; } - /********************************************************************* *********************************************************************/ |