diff options
author | Christian Ambach <ambi@samba.org> | 2012-03-13 10:07:11 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2012-03-13 12:17:31 -0700 |
commit | 7936fb0ab8c3413768e83975c9d8544d653ee13c (patch) | |
tree | b9ca7e813846d786e298e966f5e209f3350ddb06 /source3/rpc_client | |
parent | 84580434570616782308ec6aa1cbba135c937d70 (diff) | |
download | samba-7936fb0ab8c3413768e83975c9d8544d653ee13c.tar.gz samba-7936fb0ab8c3413768e83975c9d8544d653ee13c.tar.bz2 samba-7936fb0ab8c3413768e83975c9d8544d653ee13c.zip |
Fix bug #8807 - dcerpc_lsa_lookup_sids_noalloc() crashes when groups has more than 1000 groups
Use correct talloc heirarchy.
Signed-off-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/rpc_client')
-rw-r--r-- | source3/rpc_client/cli_lsarpc.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/source3/rpc_client/cli_lsarpc.c b/source3/rpc_client/cli_lsarpc.c index 59ca3b0e17..c6e402d6ed 100644 --- a/source3/rpc_client/cli_lsarpc.c +++ b/source3/rpc_client/cli_lsarpc.c @@ -166,6 +166,8 @@ NTSTATUS rpccli_lsa_open_policy2(struct rpc_pipe_client *cli, static NTSTATUS dcerpc_lsa_lookup_sids_noalloc(struct dcerpc_binding_handle *h, TALLOC_CTX *mem_ctx, + TALLOC_CTX *domains_ctx, + TALLOC_CTX *names_ctx, struct policy_handle *pol, int num_sids, const struct dom_sid *sids, @@ -287,7 +289,7 @@ static NTSTATUS dcerpc_lsa_lookup_sids_noalloc(struct dcerpc_binding_handle *h, name = lsa_names.names[i].name.string; if (name) { - (names)[i] = talloc_strdup(names, name); + (names)[i] = talloc_strdup(names_ctx, name); if ((names)[i] == NULL) { DEBUG(0, ("cli_lsa_lookup_sids_noalloc(): out of memory\n")); *presult = NT_STATUS_UNSUCCESSFUL; @@ -296,7 +298,7 @@ static NTSTATUS dcerpc_lsa_lookup_sids_noalloc(struct dcerpc_binding_handle *h, } else { (names)[i] = NULL; } - domains[i] = talloc_strdup(domains, + domains[i] = talloc_strdup(domains_ctx, dom_name ? dom_name : ""); (types)[i] = lsa_names.names[i].sid_type; if ((domains)[i] == NULL) { @@ -394,6 +396,8 @@ static NTSTATUS dcerpc_lsa_lookup_sids_generic(struct dcerpc_binding_handle *h, status = dcerpc_lsa_lookup_sids_noalloc(h, mem_ctx, + (TALLOC_CTX *)domains, + (TALLOC_CTX *)names, pol, hunk_num_sids, hunk_sids, @@ -433,7 +437,7 @@ static NTSTATUS dcerpc_lsa_lookup_sids_generic(struct dcerpc_binding_handle *h, } sids_left -= hunk_num_sids; - sids_processed += hunk_num_sids; /* only used in DEBUG */ + sids_processed += hunk_num_sids; hunk_sids += hunk_num_sids; hunk_domains += hunk_num_sids; hunk_names += hunk_num_sids; |