r25223: Fix behaviour of rpccli_lsa_lookupsids_all() when
authorMichael Adam <obnox@samba.org>
Wed, 19 Sep 2007 11:01:44 +0000 (11:01 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:30:51 +0000 (12:30 -0500)
rpccli_lsa_lookupsids_noalloc() returns an error for one hunk
of SIDs: free all allocated arrays and return the error code
returned by the hunk lookup.

Michael
(This used to be commit 2c68ebd6934206186dc6e635401f66c2fd1e1234)

source3/rpc_client/cli_lsarpc.c

index 281fe855762caa6b8e28cd6f1db7c40977f8c5d8..1f0677ee03137de59a1f03b0581c4d52821e2dc2 100644 (file)
@@ -259,19 +259,19 @@ NTSTATUS rpccli_lsa_lookup_sids_all(struct rpc_pipe_client *cli,
                if (!((*domains) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
                        DEBUG(0, ("rpccli_lsa_lookup_sids_all(): out of memory\n"));
                        result = NT_STATUS_NO_MEMORY;
-                       goto done;
+                       goto fail;
                }
 
                if (!((*names) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
                        DEBUG(0, ("rpccli_lsa_lookup_sids_all(): out of memory\n"));
                        result = NT_STATUS_NO_MEMORY;
-                       goto done;
+                       goto fail;
                }
 
                if (!((*types) = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_sids))) {
                        DEBUG(0, ("rpccli_lsa_lookup_sids_all(): out of memory\n"));
                        result = NT_STATUS_NO_MEMORY;
-                       goto done;
+                       goto fail;
                }
        } else {
                (*domains) = NULL;
@@ -312,7 +312,8 @@ NTSTATUS rpccli_lsa_lookup_sids_all(struct rpc_pipe_client *cli,
                    !NT_STATUS_EQUAL(hunk_result, NT_STATUS_NONE_MAPPED)) 
                {
                        /* An actual error occured */
-                       goto done;
+                       result = hunk_result;
+                       goto fail;
                }
 
                /* adapt overall result */
@@ -333,7 +334,12 @@ NTSTATUS rpccli_lsa_lookup_sids_all(struct rpc_pipe_client *cli,
                hunk_types += hunk_num_sids;
        }
 
-done:
+       return result;
+
+fail:
+       TALLOC_FREE(*domains);
+       TALLOC_FREE(*names);
+       TALLOC_FREE(*types);
        return result;
 }