Use rpccli_samr_QueryGroupMember() all over the place.
authorGünther Deschner <gd@samba.org>
Tue, 5 Feb 2008 09:58:37 +0000 (10:58 +0100)
committerGünther Deschner <gd@samba.org>
Tue, 5 Feb 2008 12:19:47 +0000 (13:19 +0100)
Guenther

source/rpcclient/cmd_samr.c
source/utils/net_rpc.c
source/winbindd/winbindd_rpc.c

index ccea73e5a1334f8d47cb9109ce4fe661fa52625b..4ea436dc92a751b2384447e6682a4ad6c15f8a72 100644 (file)
@@ -792,12 +792,13 @@ static NTSTATUS cmd_samr_query_groupmem(struct rpc_pipe_client *cli,
 {
        POLICY_HND connect_pol, domain_pol, group_pol;
        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       uint32 num_members, *group_rids, *group_attrs, group_rid;
+       uint32 group_rid;
        uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
        int i;
        fstring                 server;
        unsigned int old_timeout;
-       
+       struct samr_RidTypeArray *rids = NULL;
+
        if ((argc < 2) || (argc > 3)) {
                printf("Usage: %s rid [access mask]\n", argv[0]);
                return NT_STATUS_OK;
@@ -838,18 +839,18 @@ static NTSTATUS cmd_samr_query_groupmem(struct rpc_pipe_client *cli,
        /* Make sure to wait for our DC's reply */
        old_timeout = cli_set_timeout(cli->cli, MAX(cli->cli->timeout,30000)); /* 30 seconds. */
 
-       result = rpccli_samr_query_groupmem(cli, mem_ctx, &group_pol,
-                                        &num_members, &group_rids,
-                                        &group_attrs);
+       result = rpccli_samr_QueryGroupMember(cli, mem_ctx,
+                                             &group_pol,
+                                             &rids);
 
        cli_set_timeout(cli->cli, old_timeout);
 
        if (!NT_STATUS_IS_OK(result))
                goto done;
 
-       for (i = 0; i < num_members; i++) {
-               printf("\trid:[0x%x] attr:[0x%x]\n", group_rids[i],
-                      group_attrs[i]);
+       for (i = 0; i < rids->count; i++) {
+               printf("\trid:[0x%x] attr:[0x%x]\n", rids->rids[i],
+                      rids->types[i]);
        }
 
        rpccli_samr_Close(cli, mem_ctx, &group_pol);
index 7887960a60dfb4eba143cff2493fcf0f2cba66cf..3dac937f3616932cfa3d6e28d3f22fd248c8afbc 100644 (file)
@@ -1787,8 +1787,8 @@ static NTSTATUS rpc_group_delete_internals(const DOM_SID *domain_sid,
        bool group_is_primary = False;
        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 
-       uint32 *group_rids, num_rids, *name_types, num_members, 
-               *group_attrs, group_rid;
+       uint32 *group_rids, num_rids, *name_types, group_rid;
+       struct samr_RidTypeArray *rids = NULL;
        uint32 flags = 0x000003e8; /* Unknown */
        /* char **names; */
        int i;
@@ -1847,11 +1847,11 @@ static NTSTATUS rpc_group_delete_internals(const DOM_SID *domain_sid,
                }
                 
                group_rid = group_rids[0];
-                
-               result = rpccli_samr_query_groupmem(pipe_hnd, mem_ctx, &group_pol,
-                                 &num_members, &group_rids,
-                                 &group_attrs);
-               
+
+               result = rpccli_samr_QueryGroupMember(pipe_hnd, mem_ctx,
+                                                     &group_pol,
+                                                     &rids);
+
                if (!NT_STATUS_IS_OK(result)) {
                        d_fprintf(stderr, "Unable to query group members of %s",argv[0]);
                        goto done;
@@ -1859,20 +1859,21 @@ static NTSTATUS rpc_group_delete_internals(const DOM_SID *domain_sid,
                
                if (opt_verbose) {
                        d_printf("Domain Group %s (rid: %d) has %d members\n",
-                               argv[0],group_rid,num_members);
+                               argv[0],group_rid, rids->count);
                }
 
                /* Check if group is anyone's primary group */
-                for (i = 0; i < num_members; i++)
+                for (i = 0; i < rids->count; i++)
                {
                        result = rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
                                                      &domain_pol,
                                                      MAXIMUM_ALLOWED_ACCESS,
-                                                     group_rids[i],
+                                                     rids->rids[i],
                                                      &user_pol);
        
                        if (!NT_STATUS_IS_OK(result)) {
-                               d_fprintf(stderr, "Unable to open group member %d\n",group_rids[i]);
+                               d_fprintf(stderr, "Unable to open group member %d\n",
+                                       rids->rids[i]);
                                goto done;
                        }
        
@@ -1882,7 +1883,8 @@ static NTSTATUS rpc_group_delete_internals(const DOM_SID *domain_sid,
                                                         21, &user_ctr);
        
                        if (!NT_STATUS_IS_OK(result)) {
-                               d_fprintf(stderr, "Unable to lookup userinfo for group member %d\n",group_rids[i]);
+                               d_fprintf(stderr, "Unable to lookup userinfo for group member %d\n",
+                                       rids->rids[i]);
                                goto done;
                        }
        
@@ -1905,13 +1907,14 @@ static NTSTATUS rpc_group_delete_internals(const DOM_SID *domain_sid,
                }
      
                /* remove all group members */
-               for (i = 0; i < num_members; i++)
+               for (i = 0; i < rids->count; i++)
                {
                        if (opt_verbose) 
-                               d_printf("Remove group member %d...",group_rids[i]);
+                               d_printf("Remove group member %d...",
+                                       rids->rids[i]);
                        result = rpccli_samr_DeleteGroupMember(pipe_hnd, mem_ctx,
                                                               &group_pol,
-                                                              group_rids[i]);
+                                                              rids->rids[i]);
 
                        if (NT_STATUS_IS_OK(result)) {
                                if (opt_verbose)
@@ -2801,11 +2804,12 @@ static NTSTATUS rpc_list_group_members(struct rpc_pipe_client *pipe_hnd,
 {
        NTSTATUS result;
        POLICY_HND group_pol;
-       uint32 num_members, *group_rids, *group_attrs;
+       uint32 num_members, *group_rids;
        uint32 num_names;
        char **names;
        uint32 *name_types;
        int i;
+       struct samr_RidTypeArray *rids = NULL;
 
        fstring sid_str;
        sid_to_fstring(sid_str, domain_sid);
@@ -2819,13 +2823,16 @@ static NTSTATUS rpc_list_group_members(struct rpc_pipe_client *pipe_hnd,
        if (!NT_STATUS_IS_OK(result))
                return result;
 
-       result = rpccli_samr_query_groupmem(pipe_hnd, mem_ctx, &group_pol,
-                                        &num_members, &group_rids,
-                                        &group_attrs);
+       result = rpccli_samr_QueryGroupMember(pipe_hnd, mem_ctx,
+                                             &group_pol,
+                                             &rids);
 
        if (!NT_STATUS_IS_OK(result))
                return result;
 
+       num_members = rids->count;
+       group_rids = rids->rids;
+
        while (num_members > 0) {
                int this_time = 512;
 
index 7e35759348f6c93b82c5d9ae352a233b12ba6cb6..a318199b62ef130a97d62ff2c927233491876b7b 100644 (file)
@@ -691,6 +691,7 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
        unsigned int j;
        struct rpc_pipe_client *cli;
        unsigned int orig_timeout;
+       struct samr_RidTypeArray *rids = NULL;
 
        DEBUG(10,("rpc: lookup_groupmem %s sid=%s\n", domain->name,
                  sid_string_dbg(group_sid)));
@@ -727,9 +728,9 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
 
        orig_timeout = cli_set_timeout(cli->cli, 35000);
 
-        result = rpccli_samr_query_groupmem(cli, mem_ctx,
-                                           &group_pol, num_names, &rid_mem,
-                                           name_types);
+        result = rpccli_samr_QueryGroupMember(cli, mem_ctx,
+                                             &group_pol,
+                                             &rids);
 
        /* And restore our original timeout. */
        cli_set_timeout(cli->cli, orig_timeout);
@@ -739,6 +740,9 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
         if (!NT_STATUS_IS_OK(result))
                return result;
 
+       *num_names = rids->count;
+       rid_mem = rids->rids;
+
        if (!*num_names) {
                names = NULL;
                name_types = NULL;