diff options
author | Günther Deschner <gd@samba.org> | 2008-09-12 11:28:03 +0200 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2008-09-15 13:00:42 +0200 |
commit | 3012fdb67bcb26faa5f5c1093937cf4a7da1ca0d (patch) | |
tree | c8811597a199f95c3040ae2c7f31c5b504afb775 /source | |
parent | 9584daf8b1e04428023cd4b26bcc360aa53f03cd (diff) | |
download | samba-3012fdb67bcb26faa5f5c1093937cf4a7da1ca0d.tar.gz |
netapi: fix NetUserSetGroups.
Guenther
(cherry picked from commit e8b27b69f33fb33c670026b3a24ed95a2f0099fe)
(cherry picked from commit 45199a07ddd615f7ef44d299100b3009291ac883)
Diffstat (limited to 'source')
-rw-r--r-- | source/lib/netapi/user.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/source/lib/netapi/user.c b/source/lib/netapi/user.c index 62df2f9da58..986c32ad930 100644 --- a/source/lib/netapi/user.c +++ b/source/lib/netapi/user.c @@ -2938,6 +2938,7 @@ WERROR NetUserSetGroups_r(struct libnetapi_ctx *ctx, struct samr_Ids user_rids, name_types; struct samr_Ids group_rids; struct samr_RidWithAttributeArray *rid_array = NULL; + struct lsa_String *lsa_names = NULL; uint32_t *add_rids = NULL; uint32_t *del_rids = NULL; @@ -3021,39 +3022,40 @@ WERROR NetUserSetGroups_r(struct libnetapi_ctx *ctx, break; } + lsa_names = talloc_array(ctx, struct lsa_String, r->in.num_entries); + if (!lsa_names) { + werr = WERR_NOMEM; + goto done; + } + for (i=0; i < r->in.num_entries; i++) { switch (r->in.level) { case 0: - init_lsa_String(&lsa_account_name, i0->grui0_name); + init_lsa_String(&lsa_names[i], i0->grui0_name); i0++; break; case 1: - init_lsa_String(&lsa_account_name, i1->grui1_name); + init_lsa_String(&lsa_names[i], i1->grui1_name); i1++; break; } + } - status = rpccli_samr_LookupNames(pipe_cli, ctx, - &domain_handle, - 1, - &lsa_account_name, - &group_rids, - &name_types); - if (!NT_STATUS_IS_OK(status)) { - werr = ntstatus_to_werror(status); - goto done; - } - - if (!add_rid_to_array_unique(ctx, - group_rids.ids[0], - &member_rids, - &num_member_rids)) { - werr = WERR_GENERAL_FAILURE; - goto done; - } + status = rpccli_samr_LookupNames(pipe_cli, ctx, + &domain_handle, + r->in.num_entries, + lsa_names, + &group_rids, + &name_types); + if (!NT_STATUS_IS_OK(status)) { + werr = ntstatus_to_werror(status); + goto done; } + member_rids = group_rids.ids; + num_member_rids = group_rids.count; + status = rpccli_samr_GetGroupsForUser(pipe_cli, ctx, &user_handle, &rid_array); |