dsdb-cracknames: Return DRSUAPI_DS_NAME_STATUS_NO_MAPPING when there is no SID
authorAndrew Bartlett <abartlet@samba.org>
Wed, 24 Oct 2012 05:41:52 +0000 (16:41 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 25 Oct 2012 02:43:25 +0000 (04:43 +0200)
If there is no SID for an object being mapped, then there is no NT4 name.

We need to return DRSUAPI_DS_NAME_STATUS_NO_MAPPING rather than
error out with anything other than WERR_OK as the return value.

Andrew Bartlett

Autobuild-User(master): Andrew Bartlett <abartlet@samba.org>
Autobuild-Date(master): Thu Oct 25 04:43:25 CEST 2012 on sn-devel-104

source4/dsdb/samdb/cracknames.c

index 6ad802687eeb7db918e425f5418204093632809a..8b52aa3199923dd78360a9d0cb8c2dab4619c361 100644 (file)
@@ -1067,9 +1067,13 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
 
                const struct dom_sid *sid = samdb_result_dom_sid(mem_ctx, result, "objectSid");
                const char *_acc = "", *_dom = "";
-
-               if (samdb_find_attribute(sam_ctx, result, "objectClass", "domain")) {
-
+               if (sid == NULL) {
+                       info1->status = DRSUAPI_DS_NAME_STATUS_NO_MAPPING;
+                       return WERR_OK;
+               } else if (samdb_find_attribute(sam_ctx, result, "objectClass", "domain")) {
+                       /* This can also find a DomainDNSZones entry,
+                        * but it won't have the SID we just
+                        * checked.  */
                        ldb_ret = ldb_search(sam_ctx, mem_ctx, &domain_res,
                                                     partitions_basedn,
                                                     LDB_SCOPE_ONELEVEL,