s4:rpc_server/drsuapi: fix a crash in dcesrv_drsuapi_DsGetDomainControllerInfo_1()
authorStefan Metzmacher <metze@samba.org>
Mon, 24 Sep 2012 23:09:55 +0000 (01:09 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 24 Sep 2012 23:14:15 +0000 (01:14 +0200)
metze

source4/rpc_server/drsuapi/dcesrv_drsuapi.c

index 1d51ce879a1e298cd90d4138100140100d0150ef..3512de60f5a584d2636cf8f93257d69cfcb19525 100644 (file)
@@ -576,14 +576,9 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
        unsigned int i;
 
        *r->out.level_out = r->in.req->req1.level;
-       r->out.ctr = talloc(mem_ctx, union drsuapi_DsGetDCInfoCtr);
+       r->out.ctr = talloc_zero(mem_ctx, union drsuapi_DsGetDCInfoCtr);
        W_ERROR_HAVE_NO_MEMORY(r->out.ctr);
 
-       sites_dn = samdb_sites_dn(b_state->sam_ctx, mem_ctx);
-       if (!sites_dn) {
-               return WERR_DS_OBJ_NOT_FOUND;
-       }
-
        switch (*r->out.level_out) {
        case -1:
                /* this level is not like the others */
@@ -598,6 +593,11 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                return WERR_UNKNOWN_LEVEL;
        }
 
+       sites_dn = samdb_sites_dn(b_state->sam_ctx, mem_ctx);
+       if (!sites_dn) {
+               return WERR_DS_OBJ_NOT_FOUND;
+       }
+
        ret = ldb_search(b_state->sam_ctx, mem_ctx, &res, sites_dn, LDB_SCOPE_SUBTREE, attrs,
                                 "objectClass=server");