netapi: fix NetGroupSetUsers.
authorGünther Deschner <gd@samba.org>
Fri, 12 Sep 2008 09:13:20 +0000 (11:13 +0200)
committerGünther Deschner <gd@samba.org>
Fri, 12 Sep 2008 12:12:14 +0000 (14:12 +0200)
Guenther
(This used to be commit 735bc2e425ce629745495190cd1c721ccb583d24)

source3/lib/netapi/group.c

index 2e0c4dc48efce311c24e0bda03d6aad15bf6ac1e..e2a4913824eb1d0c186c21e49738b097d25b2ce1 100644 (file)
@@ -1454,6 +1454,7 @@ WERROR NetGroupSetUsers_r(struct libnetapi_ctx *ctx,
        struct samr_Ids user_rids, name_types;
        struct samr_Ids group_rids, group_types;
        struct samr_RidTypeArray *rid_array = NULL;
+       struct lsa_String *lsa_names = NULL;
 
        uint32_t *add_rids = NULL;
        uint32_t *del_rids = NULL;
@@ -1549,39 +1550,40 @@ WERROR NetGroupSetUsers_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,
-                                                &user_rids,
-                                                &name_types);
-               if (!NT_STATUS_IS_OK(status)) {
-                       werr = ntstatus_to_werror(status);
-                       goto done;
-               }
-
-               if (!add_rid_to_array_unique(ctx,
-                                            user_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,
+                                        &user_rids,
+                                        &name_types);
+       if (!NT_STATUS_IS_OK(status)) {
+               werr = ntstatus_to_werror(status);
+               goto done;
        }
 
+       member_rids = user_rids.ids;
+       num_member_rids = user_rids.count;
+
        status = rpccli_samr_QueryGroupMember(pipe_cli, ctx,
                                              &group_handle,
                                              &rid_array);