getdcinfo: Check that the server object has a serverreference objects pointing to...
authorMatthieu Patou <mat@matws.net>
Tue, 25 Sep 2012 06:12:25 +0000 (23:12 -0700)
committerMatthieu Patou <mat@matws.net>
Mon, 8 Oct 2012 04:51:01 +0000 (21:51 -0700)
The problem was found by the DRSR testsuite where server objects were
created in the Site container without serverrefrence attribute
triggering error in the testsuite.

source4/rpc_server/drsuapi/dcesrv_drsuapi.c

index 4c78738af853ee1e66aa95ab158929dcacbea847..b294e4644efd10370e4366bb78d3d013f1b8d3c7 100644 (file)
@@ -599,7 +599,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
        }
 
        ret = ldb_search(b_state->sam_ctx, mem_ctx, &res, sites_dn, LDB_SCOPE_SUBTREE, attrs,
-                                "objectClass=server");
+                                "(&(objectClass=server)(serverReference=*))");
        
        if (ret) {
                DEBUG(1, ("searching for servers in sites DN %s failed: %s\n", 
@@ -630,7 +630,9 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                        }
 
                        ret = ldb_search(b_state->sam_ctx, mem_ctx, &res_account, ref_dn,
-                                                LDB_SCOPE_BASE, attrs_account_1, "objectClass=computer");
+                                                LDB_SCOPE_BASE, attrs_account_1,
+                                               "(&(objectClass=computer)(userAccountControl:1.2.840.113556.1.4.803:=%u)",
+                                               UF_SERVER_TRUST_ACCOUNT);
                        if (ret == LDB_SUCCESS && res_account->count == 1) {
                                const char *errstr;
                                ctr1->array[i].dns_name