The branch, v3-2-test has been updated
       via  232a505535de04121a631b3bb24a2700df07ee1e (commit)
       via  d1c669920e88e7fecd13101c4ddfe45354c5ecdb (commit)
       via  3a3feb376116b4ebc5be7b149c187b49bc6b390d (commit)
      from  cfaf47883d7135d66d5d40c7d474b8dbf60eb64d (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 232a505535de04121a631b3bb24a2700df07ee1e
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Wed Feb 6 16:22:48 2008 +0100

    Remove unused marshalling for SAMR_QUERY_USERGROUPS.
    
    Guenther

commit d1c669920e88e7fecd13101c4ddfe45354c5ecdb
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Wed Feb 6 16:19:20 2008 +0100

    Use rpccli_samr_GetGroupsForUser() all over the place.
    
    Guenther

commit 3a3feb376116b4ebc5be7b149c187b49bc6b390d
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Wed Feb 6 16:06:04 2008 +0100

    Use pidl for _samr_GetGroupsForUser().
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/include/rpc_samr.h       |   21 ------
 source/rpc_client/cli_samr.c    |   39 -----------
 source/rpc_parse/parse_samr.c   |  138 ---------------------------------------
 source/rpc_server/srv_samr.c    |   23 +------
 source/rpc_server/srv_samr_nt.c |   61 +++++++++---------
 source/rpcclient/cmd_samr.c     |   19 +++---
 source/utils/net_rpc.c          |   11 ++-
 source/winbindd/winbindd_rpc.c  |   12 ++--
 8 files changed, 56 insertions(+), 268 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h
index 37a457e..5919bc7 100644
--- a/source/include/rpc_samr.h
+++ b/source/include/rpc_samr.h
@@ -798,27 +798,6 @@ typedef struct r_samr_get_dispenum_index
 /********************************************************/
 /********************************************************/
 
-/* SAMR_Q_QUERY_USERGROUPS - */
-typedef struct q_samr_query_usergroup_info
-{
-       POLICY_HND pol;          /* policy handle associated with unknown id */
-
-} SAMR_Q_QUERY_USERGROUPS;
-
-/* SAMR_R_QUERY_USERGROUPS - probably a get sam info */
-typedef struct r_samr_query_usergroup_info
-{
-       uint32 ptr_0;            /* pointer */
-       uint32 num_entries;      /* number of RID groups */
-       uint32 ptr_1;            /* pointer */
-       uint32 num_entries2;     /* number of RID groups */
-
-       DOM_GID *gid; /* group info */
-
-       NTSTATUS status;         /* return status */
-
-} SAMR_R_QUERY_USERGROUPS;
-
 /* SAM_USERINFO_CTR - sam user info */
 typedef struct sam_userinfo_ctr_info
 {
diff --git a/source/rpc_client/cli_samr.c b/source/rpc_client/cli_samr.c
index eb37d6e..858bfc3 100644
--- a/source/rpc_client/cli_samr.c
+++ b/source/rpc_client/cli_samr.c
@@ -64,45 +64,6 @@ NTSTATUS rpccli_samr_query_userinfo(struct rpc_pipe_client 
*cli,
        return result;
 }
 
-/* Query user groups */
-
-NTSTATUS rpccli_samr_query_usergroups(struct rpc_pipe_client *cli,
-                                     TALLOC_CTX *mem_ctx, 
-                                     POLICY_HND *user_pol,
-                                     uint32 *num_groups, 
-                                     DOM_GID **gid)
-{
-       prs_struct qbuf, rbuf;
-       SAMR_Q_QUERY_USERGROUPS q;
-       SAMR_R_QUERY_USERGROUPS r;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-
-       DEBUG(10,("cli_samr_query_usergroups\n"));
-
-       ZERO_STRUCT(q);
-       ZERO_STRUCT(r);
-
-       /* Marshall data and send request */
-
-       init_samr_q_query_usergroups(&q, user_pol);
-
-       CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_USERGROUPS,
-               q, r,
-               qbuf, rbuf,
-               samr_io_q_query_usergroups,
-               samr_io_r_query_usergroups,
-               NT_STATUS_UNSUCCESSFUL); 
-
-       /* Return output parameters */
-
-       if (NT_STATUS_IS_OK(result = r.status)) {
-               *num_groups = r.num_entries;
-               *gid = r.gid;
-       }
-
-       return result;
-}
-
 /**
  * Enumerate domain users
  *
diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c
index 329b754..3c1fb9b 100644
--- a/source/rpc_parse/parse_samr.c
+++ b/source/rpc_parse/parse_samr.c
@@ -1329,144 +1329,6 @@ void init_samr_group_info5(struct samr_GroupInfoAll *r,
 }
 
 /*******************************************************************
-inits a SAMR_Q_QUERY_USERGROUPS structure.
-********************************************************************/
-
-void init_samr_q_query_usergroups(SAMR_Q_QUERY_USERGROUPS * q_u,
-                                 POLICY_HND *hnd)
-{
-       DEBUG(5, ("init_samr_q_query_usergroups\n"));
-
-       q_u->pol = *hnd;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_q_query_usergroups(const char *desc, SAMR_Q_QUERY_USERGROUPS * 
q_u,
-                               prs_struct *ps, int depth)
-{
-       if (q_u == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "samr_io_q_query_usergroups");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
-               return False;
-
-       return True;
-}
-
-/*******************************************************************
-inits a SAMR_R_QUERY_USERGROUPS structure.
-********************************************************************/
-
-void init_samr_r_query_usergroups(SAMR_R_QUERY_USERGROUPS * r_u,
-                                 uint32 num_gids, DOM_GID * gid,
-                                 NTSTATUS status)
-{
-       DEBUG(5, ("init_samr_r_query_usergroups\n"));
-
-       if (NT_STATUS_IS_OK(status)) {
-               r_u->ptr_0 = 1;
-               r_u->num_entries = num_gids;
-               r_u->ptr_1 = (num_gids != 0) ? 1 : 0;
-               r_u->num_entries2 = num_gids;
-
-               r_u->gid = gid;
-       } else {
-               r_u->ptr_0 = 0;
-               r_u->num_entries = 0;
-               r_u->ptr_1 = 0;
-               r_u->gid = NULL;
-       }
-
-       r_u->status = status;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_gids(const char *desc, uint32 *num_gids, DOM_GID ** gid,
-                 prs_struct *ps, int depth)
-{
-       uint32 i;
-       if (gid == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "samr_io_gids");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("num_gids", ps, depth, num_gids))
-               return False;
-
-       if ((*num_gids) != 0) {
-               if (UNMARSHALLING(ps)) {
-                       (*gid) = PRS_ALLOC_MEM(ps,DOM_GID,*num_gids);
-               }
-
-               if ((*gid) == NULL) {
-                       return False;
-               }
-
-               for (i = 0; i < (*num_gids); i++) {
-                       if(!smb_io_gid("gids", &(*gid)[i], ps, depth))
-                               return False;
-               }
-       }
-
-       return True;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_r_query_usergroups(const char *desc, SAMR_R_QUERY_USERGROUPS * 
r_u,
-                               prs_struct *ps, int depth)
-{
-       if (r_u == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "samr_io_r_query_usergroups");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("ptr_0       ", ps, depth, &r_u->ptr_0))
-               return False;
-
-       if (r_u->ptr_0 != 0) {
-               if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))
-                       return False;
-               if(!prs_uint32("ptr_1       ", ps, depth, &r_u->ptr_1))
-                       return False;
-
-               if (r_u->num_entries != 0 && r_u->ptr_1 != 0) {
-                       if(!samr_io_gids("gids", &r_u->num_entries2, &r_u->gid, 
ps, depth))
-                               return False;
-               }
-       }
-
-       if(!prs_align(ps))
-               return False;
-       if(!prs_ntstatus("status", ps, depth, &r_u->status))
-         return False;
-
-       return True;
-}
-
-/*******************************************************************
 inits a SAMR_Q_ENUM_DOMAINS structure.
 ********************************************************************/
 
diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c
index d5666e7..e3ac2e4 100644
--- a/source/rpc_server/srv_samr.c
+++ b/source/rpc_server/srv_samr.c
@@ -349,28 +349,7 @@ static bool api_samr_query_userinfo(pipes_struct *p)
 
 static bool api_samr_query_usergroups(pipes_struct *p)
 {
-       SAMR_Q_QUERY_USERGROUPS q_u;
-       SAMR_R_QUERY_USERGROUPS r_u;
-       prs_struct *data = &p->in_data.data;
-       prs_struct *rdata = &p->out_data.rdata;
-
-       ZERO_STRUCT(q_u);
-       ZERO_STRUCT(r_u);
-
-       if(!samr_io_q_query_usergroups("", &q_u, data, 0)) {
-               DEBUG(0,("api_samr_query_usergroups: unable to unmarshall 
SAMR_Q_QUERY_USERGROUPS.\n"));
-               return False;
-       }
-
-       r_u.status = _samr_query_usergroups(p, &q_u, &r_u);
-
-       /* store the response in the SMB stream */
-       if(!samr_io_r_query_usergroups("", &r_u, rdata, 0)) {
-               DEBUG(0,("api_samr_query_usergroups: unable to marshall 
SAMR_R_QUERY_USERGROUPS.\n"));
-               return False;
-       }
-
-       return True;
+       return proxy_samr_call(p, NDR_SAMR_GETGROUPSFORUSER);
 }
 
 /*******************************************************************
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index 5081565..36860f9 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -2184,16 +2184,17 @@ NTSTATUS _samr_query_userinfo(pipes_struct *p, 
SAMR_Q_QUERY_USERINFO *q_u, SAMR_
 }
 
 /*******************************************************************
- samr_reply_query_usergroups
+ _samr_GetGroupsForUser
  ********************************************************************/
 
-NTSTATUS _samr_query_usergroups(pipes_struct *p, SAMR_Q_QUERY_USERGROUPS *q_u, 
SAMR_R_QUERY_USERGROUPS *r_u)
+NTSTATUS _samr_GetGroupsForUser(pipes_struct *p,
+                               struct samr_GetGroupsForUser *r)
 {
        struct samu *sam_pass=NULL;
        DOM_SID  sid;
        DOM_SID *sids;
-       DOM_GID dom_gid;
-       DOM_GID *gids = NULL;
+       struct samr_RidWithAttribute dom_gid;
+       struct samr_RidWithAttribute *gids = NULL;
        uint32 primary_group_rid;
        size_t num_groups = 0;
        gid_t *unix_gids;
@@ -2203,6 +2204,8 @@ NTSTATUS _samr_query_usergroups(pipes_struct *p, 
SAMR_Q_QUERY_USERGROUPS *q_u, S
        NTSTATUS result;
        bool success = False;
 
+       struct samr_RidWithAttributeArray *rids = NULL;
+
        /*
         * from the SID in the request:
         * we should send back the list of DOMAIN GROUPS
@@ -2215,16 +2218,22 @@ NTSTATUS _samr_query_usergroups(pipes_struct *p, 
SAMR_Q_QUERY_USERGROUPS *q_u, S
         * JFM, 12/2/2001
         */
 
-       r_u->status = NT_STATUS_OK;
+       DEBUG(5,("_samr_GetGroupsForUser: %d\n", __LINE__));
 
-       DEBUG(5,("_samr_query_usergroups: %d\n", __LINE__));
+       rids = TALLOC_ZERO_P(p->mem_ctx, struct samr_RidWithAttributeArray);
+       if (!rids) {
+               return NT_STATUS_NO_MEMORY;
+       }
 
        /* find the policy handle.  open a policy on it. */
-       if (!get_lsa_policy_samr_sid(p, &q_u->pol, &sid, &acc_granted, NULL))
+       if (!get_lsa_policy_samr_sid(p, r->in.user_handle, &sid, &acc_granted, 
NULL))
                return NT_STATUS_INVALID_HANDLE;
 
-       if (!NT_STATUS_IS_OK(r_u->status = 
access_check_samr_function(acc_granted, SA_RIGHT_USER_GET_GROUPS, 
"_samr_query_usergroups"))) {
-               return r_u->status;
+       result = access_check_samr_function(acc_granted,
+                                           SA_RIGHT_USER_GET_GROUPS,
+                                           "_samr_GetGroupsForUser");
+       if (!NT_STATUS_IS_OK(result)) {
+               return result;
        }
 
        if (!sid_check_is_in_our_domain(&sid))
@@ -2274,36 +2283,38 @@ NTSTATUS _samr_query_usergroups(pipes_struct *p, 
SAMR_Q_QUERY_USERGROUPS *q_u, S
        gids = NULL;
        num_gids = 0;
 
-       dom_gid.attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT|
-                       SE_GROUP_ENABLED);
-       dom_gid.g_rid = primary_group_rid;
-       ADD_TO_ARRAY(p->mem_ctx, DOM_GID, dom_gid, &gids, &num_gids);
+       dom_gid.attributes = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT|
+                             SE_GROUP_ENABLED);
+       dom_gid.rid = primary_group_rid;
+       ADD_TO_ARRAY(p->mem_ctx, struct samr_RidWithAttribute, dom_gid, &gids, 
&num_gids);
 
        for (i=0; i<num_groups; i++) {
 
                if (!sid_peek_check_rid(get_global_sam_sid(),
-                                       &(sids[i]), &dom_gid.g_rid)) {
+                                       &(sids[i]), &dom_gid.rid)) {
                        DEBUG(10, ("Found sid %s not in our domain\n",
                                   sid_string_dbg(&sids[i])));
                        continue;
                }
 
-               if (dom_gid.g_rid == primary_group_rid) {
+               if (dom_gid.rid == primary_group_rid) {
                        /* We added the primary group directly from the
                         * sam_account. The other SIDs are unique from
                         * enum_group_memberships */
                        continue;
                }
 
-               ADD_TO_ARRAY(p->mem_ctx, DOM_GID, dom_gid, &gids, &num_gids);
+               ADD_TO_ARRAY(p->mem_ctx, struct samr_RidWithAttribute, dom_gid, 
&gids, &num_gids);
        }
 
-       /* construct the response.  lkclXXXX: gids are not copied! */
-       init_samr_r_query_usergroups(r_u, num_gids, gids, r_u->status);
+       rids->count = num_gids;
+       rids->rids = gids;
 
-       DEBUG(5,("_samr_query_usergroups: %d\n", __LINE__));
+       *r->out.rids = rids;
 
-       return r_u->status;
+       DEBUG(5,("_samr_GetGroupsForUser: %d\n", __LINE__));
+
+       return result;
 }
 
 /*******************************************************************
@@ -5268,16 +5279,6 @@ NTSTATUS _samr_ChangePasswordUser(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_GetGroupsForUser(pipes_struct *p,
-                               struct samr_GetGroupsForUser *r)
-{
-       p->rng_fault_state = true;
-       return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
 NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p,
                                struct samr_QueryDisplayInfo *r)
 {
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c
index 43f53cb..c77d13d 100644
--- a/source/rpcclient/cmd_samr.c
+++ b/source/rpcclient/cmd_samr.c
@@ -605,13 +605,12 @@ static NTSTATUS cmd_samr_query_usergroups(struct 
rpc_pipe_client *cli,
                                domain_pol, 
                                user_pol;
        NTSTATUS                result = NT_STATUS_UNSUCCESSFUL;
-       uint32                  num_groups, 
-                               user_rid;
+       uint32                  user_rid;
        uint32                  access_mask = MAXIMUM_ALLOWED_ACCESS;
-       DOM_GID                 *user_gids;
        int                     i;
        fstring                 server;
-       
+       struct samr_RidWithAttributeArray *rid_array = NULL;
+
        if ((argc < 2) || (argc > 3)) {
                printf("Usage: %s rid [access mask]\n", argv[0]);
                return NT_STATUS_OK;
@@ -648,15 +647,17 @@ static NTSTATUS cmd_samr_query_usergroups(struct 
rpc_pipe_client *cli,
        if (!NT_STATUS_IS_OK(result))
                goto done;
 
-       result = rpccli_samr_query_usergroups(cli, mem_ctx, &user_pol,
-                                          &num_groups, &user_gids);
+       result = rpccli_samr_GetGroupsForUser(cli, mem_ctx,
+                                             &user_pol,
+                                             &rid_array);
 
        if (!NT_STATUS_IS_OK(result))
                goto done;
 
-       for (i = 0; i < num_groups; i++) {
-               printf("\tgroup rid:[0x%x] attr:[0x%x]\n", 
-                      user_gids[i].g_rid, user_gids[i].attr);
+       for (i = 0; i < rid_array->count; i++) {
+               printf("\tgroup rid:[0x%x] attr:[0x%x]\n",
+                      rid_array->rids[i].rid,
+                      rid_array->rids[i].attributes);
        }
 
        rpccli_samr_Close(cli, mem_ctx, &user_pol);
diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c
index 8530767..612ae1c 100644
--- a/source/utils/net_rpc.c
+++ b/source/utils/net_rpc.c
@@ -1164,7 +1164,7 @@ static NTSTATUS rpc_user_info_internals(const DOM_SID 
*domain_sid,
        uint32 flags = 0x000003e8; /* Unknown */
        int i;
        char **names;
-       DOM_GID *user_gids;
+       struct samr_RidWithAttributeArray *rid_array = NULL;
 
        if (argc < 1) {
                d_printf("User must be specified\n");
@@ -1203,11 +1203,14 @@ static NTSTATUS rpc_user_info_internals(const DOM_SID 
*domain_sid,
                                      &user_pol);
        if (!NT_STATUS_IS_OK(result)) goto done;
 
-       result = rpccli_samr_query_usergroups(pipe_hnd, mem_ctx, &user_pol,
-                                          &num_rids, &user_gids);
+       result = rpccli_samr_GetGroupsForUser(pipe_hnd, mem_ctx,
+                                             &user_pol,
+                                             &rid_array);
 
        if (!NT_STATUS_IS_OK(result)) goto done;
 
+       num_rids = rid_array->count;
+
        /* Look up rids */
 
        if (num_rids) {
@@ -1217,7 +1220,7 @@ static NTSTATUS rpc_user_info_internals(const DOM_SID 
*domain_sid,
                }
 
                for (i = 0; i < num_rids; i++)
-                       rids[i] = user_gids[i].g_rid;
+                       rids[i] = rid_array->rids[i].rid;
 
                result = rpccli_samr_lookup_rids(pipe_hnd, mem_ctx, &domain_pol,
                                              num_rids, rids,
diff --git a/source/winbindd/winbindd_rpc.c b/source/winbindd/winbindd_rpc.c
index 98e4077..8e196e5 100644
--- a/source/winbindd/winbindd_rpc.c
+++ b/source/winbindd/winbindd_rpc.c
@@ -510,7 +510,7 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain 
*domain,
        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
        POLICY_HND dom_pol, user_pol;
        uint32 des_access = SEC_RIGHTS_MAXIMUM_ALLOWED;
-       DOM_GID *user_groups;
+       struct samr_RidWithAttributeArray *rid_array = NULL;
        unsigned int i;
        uint32 user_rid;
        struct rpc_pipe_client *cli;
@@ -557,8 +557,10 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain 
*domain,
                return result;
 
        /* Query user rids */
-       result = rpccli_samr_query_usergroups(cli, mem_ctx, &user_pol, 
-                                          num_groups, &user_groups);
+       result = rpccli_samr_GetGroupsForUser(cli, mem_ctx,
+                                             &user_pol,
+                                             &rid_array);


-- 
Samba Shared Repository

Reply via email to