diff options
author | Matthias Dieter Wallnöfer <mdw@samba.org> | 2010-11-10 16:05:16 +0100 |
---|---|---|
committer | Matthias Dieter Wallnöfer <mdw@samba.org> | 2010-11-11 10:03:40 +0100 |
commit | feb00fe7cc238a78b3832c116cb4634936597735 (patch) | |
tree | fc4a62bfa07e55d15a7e18f9de960e31b47ed9a4 /source4/dsdb/samdb/ldb_modules/samldb.c | |
parent | 4fe63d927e5e684d3e2bec9642a1e77b056ab2ed (diff) | |
download | samba-feb00fe7cc238a78b3832c116cb4634936597735.tar.gz samba-feb00fe7cc238a78b3832c116cb4634936597735.tar.bz2 samba-feb00fe7cc238a78b3832c116cb4634936597735.zip |
s4:dsdb - proof against empty RDN values where expected
This should prevent crashes as pointed out on the mailing list.
Diffstat (limited to 'source4/dsdb/samdb/ldb_modules/samldb.c')
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/samldb.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c b/source4/dsdb/samdb/ldb_modules/samldb.c index 04b8dff0e0..1ac86148e6 100644 --- a/source4/dsdb/samdb/ldb_modules/samldb.c +++ b/source4/dsdb/samdb/ldb_modules/samldb.c @@ -575,6 +575,9 @@ static int samldb_fill_object(struct samldb_ctx *ac) } rdn_value = ldb_dn_get_rdn_val(ac->msg->dn); + if (rdn_value == NULL) { + return ldb_operr(ldb); + } if (!ldb_msg_find_element(ac->msg, "lDAPDisplayName")) { /* the RDN has prefix "CN" */ ret = ldb_msg_add_string(ac->msg, "lDAPDisplayName", @@ -638,6 +641,9 @@ static int samldb_fill_object(struct samldb_ctx *ac) } else if (strcmp(ac->type, "attributeSchema") == 0) { const struct ldb_val *rdn_value; rdn_value = ldb_dn_get_rdn_val(ac->msg->dn); + if (rdn_value == NULL) { + return ldb_operr(ldb); + } if (!ldb_msg_find_element(ac->msg, "lDAPDisplayName")) { /* the RDN has prefix "CN" */ ret = ldb_msg_add_string(ac->msg, "lDAPDisplayName", @@ -692,6 +698,7 @@ static int samldb_fill_object(struct samldb_ctx *ac) static int samldb_fill_foreignSecurityPrincipal_object(struct samldb_ctx *ac) { struct ldb_context *ldb; + const struct ldb_val *rdn_value; struct dom_sid *sid; int ret; @@ -699,8 +706,12 @@ static int samldb_fill_foreignSecurityPrincipal_object(struct samldb_ctx *ac) sid = samdb_result_dom_sid(ac->msg, ac->msg, "objectSid"); if (sid == NULL) { + rdn_value = ldb_dn_get_rdn_val(ac->msg->dn); + if (rdn_value == NULL) { + return ldb_operr(ldb); + } sid = dom_sid_parse_talloc(ac->msg, - (const char *)ldb_dn_get_rdn_val(ac->msg->dn)->data); + (const char *)rdn_value->data); if (sid == NULL) { ldb_set_errstring(ldb, "samldb: No valid SID found in ForeignSecurityPrincipal CN!"); |