]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:rpc_server/lsa: simplify [ref] pointer handling in dcesrv_lsa_LookupNames()
authorStefan Metzmacher <metze@samba.org>
Mon, 20 Mar 2017 11:56:00 +0000 (12:56 +0100)
committerRalph Boehme <slow@samba.org>
Wed, 21 Feb 2018 13:19:18 +0000 (14:19 +0100)
Bug: https://bugzilla.samba.org/show_bug.cgi?id=13286

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source4/rpc_server/lsa/lsa_lookup.c

index 400b5214a1ab6541c7e1ccf12c2ec09c84900b24..defcef5089a7ee9152b4f2978bfe09eef512debf 100644 (file)
@@ -1120,6 +1120,13 @@ NTSTATUS dcesrv_lsa_LookupNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *
        r->out.sids->sids = NULL;
        *r->out.count = 0;
 
+       r->out.sids->sids = talloc_zero_array(r->out.sids,
+                                             struct lsa_TranslatedSid,
+                                             r->in.num_names);
+       if (r->out.sids->sids == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
        ZERO_STRUCT(r2);
 
        r2.in.handle    = r->in.handle;
@@ -1141,25 +1148,14 @@ NTSTATUS dcesrv_lsa_LookupNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *
        r2.out.domains  = r->out.domains;
 
        status = dcesrv_lsa_LookupNames2(dce_call, mem_ctx, &r2);
-       if (r2.out.sids == NULL) {
-               return status;
-       }
 
-       r->out.sids = talloc(mem_ctx, struct lsa_TransSidArray);
-       if (r->out.sids == NULL) {
-               return NT_STATUS_NO_MEMORY;
-       }
-       r->out.sids->count = r2.out.sids->count;
-       r->out.sids->sids = talloc_array(r->out.sids, struct lsa_TranslatedSid, 
-                                          r->out.sids->count);
-       if (r->out.sids->sids == NULL) {
-               return NT_STATUS_NO_MEMORY;
-       }
-       for (i=0;i<r->out.sids->count;i++) {
+       SMB_ASSERT(r2.out.sids->count <= r->in.num_names);
+       for (i=0;i<r2.out.sids->count;i++) {
                r->out.sids->sids[i].sid_type    = r2.out.sids->sids[i].sid_type;
                r->out.sids->sids[i].rid         = r2.out.sids->sids[i].rid;
                r->out.sids->sids[i].sid_index   = r2.out.sids->sids[i].sid_index;
        }
+       r->out.sids->count = r2.out.sids->count;
 
        return status;
 }