[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-1980-g232a505

Günther Deschner gd at samba.org
Thu Feb 7 13:32:23 GMT 2008


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 <gd at samba.org>
Date:   Wed Feb 6 16:22:48 2008 +0100

    Remove unused marshalling for SAMR_QUERY_USERGROUPS.
    
    Guenther

commit d1c669920e88e7fecd13101c4ddfe45354c5ecdb
Author: Günther Deschner <gd at samba.org>
Date:   Wed Feb 6 16:19:20 2008 +0100

    Use rpccli_samr_GetGroupsForUser() all over the place.
    
    Guenther

commit 3a3feb376116b4ebc5be7b149c187b49bc6b390d
Author: Günther Deschner <gd at samba.org>
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


More information about the samba-cvs mailing list