diff options
author | Simo Sorce <idra@samba.org> | 2010-03-01 14:50:50 -0500 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2010-03-02 19:03:17 +0100 |
commit | 8492f92843aa17eaf4a3ea9d5a9c6319afc97854 (patch) | |
tree | 9203dba2bcd85e4d71ebafea89406beb7bba7990 /source3/libads | |
parent | 74703e4897028db72242d9187d726c6f0ebd1540 (diff) | |
download | samba-8492f92843aa17eaf4a3ea9d5a9c6319afc97854.tar.gz samba-8492f92843aa17eaf4a3ea9d5a9c6319afc97854.tar.bz2 samba-8492f92843aa17eaf4a3ea9d5a9c6319afc97854.zip |
s3:ads fix dn parsing name was always null
While there also use ldap_exploded_dn instead of ldb_dn_validate()
so we can remove a huge dependency that is hanging there only for one very
minor marginal use.
Signed-off-by: Günther Deschner <gd@samba.org>
Diffstat (limited to 'source3/libads')
-rw-r--r-- | source3/libads/ldap.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index df45be5f8a..19a37c71a3 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -3856,39 +3856,36 @@ ADS_STATUS ads_check_ou_dn(TALLOC_CTX *mem_ctx, ADS_STRUCT *ads, const char **account_ou) { - struct ldb_dn *name_dn = NULL; - const char *name = NULL; - char *ou_string = NULL; - struct ldb_context *ldb = ldb_init(mem_ctx, NULL); - - name_dn = ldb_dn_new(mem_ctx, ldb, *account_ou); - if (name_dn && ldb_dn_validate(name_dn)) { - talloc_free(ldb); + char **exploded_dn; + const char *name; + char *ou_string; + + exploded_dn = ldap_explode_dn(*account_ou, 0); + if (exploded_dn) { + ldap_value_free(exploded_dn); return ADS_SUCCESS; } ou_string = ads_ou_string(ads, *account_ou); if (!ou_string) { - talloc_free(ldb); return ADS_ERROR_LDAP(LDAP_INVALID_DN_SYNTAX); } - name_dn = ldb_dn_new_fmt(mem_ctx, ldb, "%s,%s", ou_string, - ads->config.bind_path); + name = talloc_asprintf(mem_ctx, "%s,%s", ou_string, + ads->config.bind_path); SAFE_FREE(ou_string); - if (!name_dn || !ldb_dn_validate(name_dn)) { - talloc_free(ldb); - return ADS_ERROR_LDAP(LDAP_INVALID_DN_SYNTAX); + if (!name) { + return ADS_ERROR_LDAP(LDAP_NO_MEMORY); } - *account_ou = talloc_strdup(mem_ctx, name); - if (!*account_ou) { - talloc_free(ldb); - return ADS_ERROR_LDAP(LDAP_NO_MEMORY); + exploded_dn = ldap_explode_dn(name, 0); + if (!exploded_dn) { + return ADS_ERROR_LDAP(LDAP_INVALID_DN_SYNTAX); } + ldap_value_free(exploded_dn); - talloc_free(ldb); + *account_ou = name; return ADS_SUCCESS; } |