[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-1882-g1b1f9ee

Günther Deschner gd at samba.org
Tue Feb 5 09:09:45 GMT 2008


The branch, v3-2-test has been updated
       via  1b1f9ee2e931a9c2608e4fd4bc37b877c52b1dcb (commit)
       via  3f48f9e671698235a4152102cf73a694b94542e0 (commit)
       via  f6db8a51c8858e48567a819f18a7215e7ad8f6b4 (commit)
      from  27e0b6a1aa94294588b2c18ed7929edb0289e746 (commit)

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


- Log -----------------------------------------------------------------
commit 1b1f9ee2e931a9c2608e4fd4bc37b877c52b1dcb
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 5 01:22:10 2008 +0100

    Remove unused marshalling for SAMR_QUERY_ALIASMEM.
    
    Guenther

commit 3f48f9e671698235a4152102cf73a694b94542e0
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 5 01:18:56 2008 +0100

    Use rpccli_samr_GetMembersInAlias() in net and rpcclient.
    
    Guenther

commit f6db8a51c8858e48567a819f18a7215e7ad8f6b4
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 5 00:29:11 2008 +0100

    Use pidl for _samr_GetMembersInAlias().
    
    Guenther

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

Summary of changes:
 source/include/rpc_samr.h       |   22 -------
 source/rpc_client/cli_samr.c    |   56 -----------------
 source/rpc_parse/parse_samr.c   |  130 ---------------------------------------
 source/rpc_server/srv_samr.c    |   23 +-------
 source/rpc_server/srv_samr_nt.c |   50 +++++++--------
 source/rpcclient/cmd_samr.c     |   13 ++--
 source/utils/net_rpc.c          |   32 +++++++---
 7 files changed, 54 insertions(+), 272 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h
index 57c7831..e9c9efd 100644
--- a/source/include/rpc_samr.h
+++ b/source/include/rpc_samr.h
@@ -1385,28 +1385,6 @@ typedef struct r_samr_query_groupmem_info
 } SAMR_R_QUERY_GROUPMEM;
 
 
-/* SAMR_Q_QUERY_ALIASMEM - query alias members */
-typedef struct q_samr_query_aliasmem_info
-{
-	POLICY_HND alias_pol;        /* policy handle */
-
-} SAMR_Q_QUERY_ALIASMEM;
-
-
-/* SAMR_R_QUERY_ALIASMEM - query alias members */
-typedef struct r_samr_query_aliasmem_info
-{
-	uint32 num_sids;
-	uint32 ptr;
-	uint32 num_sids1;
-
-	DOM_SID2 *sid;
-
-	NTSTATUS status;
-
-} SAMR_R_QUERY_ALIASMEM;
-
-
 /* SAMR_ENC_PASSWD */
 typedef struct enc_passwd_info
 {
diff --git a/source/rpc_client/cli_samr.c b/source/rpc_client/cli_samr.c
index 4f29397..8b4ad1e 100644
--- a/source/rpc_client/cli_samr.c
+++ b/source/rpc_client/cli_samr.c
@@ -518,62 +518,6 @@ NTSTATUS rpccli_samr_enum_als_groups(struct rpc_pipe_client *cli,
 	return result;
 }
 
-/* Query alias members */
-
-NTSTATUS rpccli_samr_query_aliasmem(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    POLICY_HND *alias_pol, uint32 *num_mem, 
-				    DOM_SID **sids)
-{
-	prs_struct qbuf, rbuf;
-	SAMR_Q_QUERY_ALIASMEM q;
-	SAMR_R_QUERY_ALIASMEM r;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32 i;
-
-	DEBUG(10,("cli_samr_query_aliasmem\n"));
-
-	ZERO_STRUCT(q);
-	ZERO_STRUCT(r);
-
-	/* Marshall data and send request */
-
-	init_samr_q_query_aliasmem(&q, alias_pol);
-
-	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_ALIASMEM,
-		q, r,
-		qbuf, rbuf,
-		samr_io_q_query_aliasmem,
-		samr_io_r_query_aliasmem,
-		NT_STATUS_UNSUCCESSFUL); 
-
-	/* Return output parameters */
-
-	if (!NT_STATUS_IS_OK(result = r.status)) {
-		goto done;
-	}
-
-	*num_mem = r.num_sids;
-
-	if (*num_mem == 0) {
-		*sids = NULL;
-		result = NT_STATUS_OK;
-		goto done;
-	}
-
-	if (!(*sids = TALLOC_ARRAY(mem_ctx, DOM_SID, *num_mem))) {
-		result = NT_STATUS_UNSUCCESSFUL;
-		goto done;
-	}
-
-	for (i = 0; i < *num_mem; i++) {
-		(*sids)[i] = r.sid[i].sid;
-	}
-
- done:
-	return result;
-}
-
 /* Query alias info */
 
 NTSTATUS rpccli_samr_query_alias_info(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c
index fb3994a..1dc1ff0 100644
--- a/source/rpc_parse/parse_samr.c
+++ b/source/rpc_parse/parse_samr.c
@@ -3599,136 +3599,6 @@ bool samr_io_r_lookup_rids(const char *desc, SAMR_R_LOOKUP_RIDS * r_u,
 }
 
 /*******************************************************************
-inits a SAMR_Q_QUERY_ALIASMEM structure.
-********************************************************************/
-
-void init_samr_q_query_aliasmem(SAMR_Q_QUERY_ALIASMEM * q_c,
-				POLICY_HND *hnd)
-{
-	DEBUG(5, ("init_samr_q_query_aliasmem\n"));
-
-	q_c->alias_pol = *hnd;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_q_query_aliasmem(const char *desc, SAMR_Q_QUERY_ALIASMEM * q_u,
-			      prs_struct *ps, int depth)
-{
-	if (q_u == NULL)
-		return False;
-
-	prs_debug(ps, depth, desc, "samr_io_q_query_aliasmem");
-	depth++;
-
-	if(!prs_align(ps))
-		return False;
-
-	if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
-		return False;
-
-	return True;
-}
-
-/*******************************************************************
-inits a SAMR_R_QUERY_ALIASMEM structure.
-********************************************************************/
-
-void init_samr_r_query_aliasmem(SAMR_R_QUERY_ALIASMEM * r_u,
-				uint32 num_sids, DOM_SID2 * sid,
-				NTSTATUS status)
-{
-	DEBUG(5, ("init_samr_r_query_aliasmem\n"));
-
-	if (NT_STATUS_IS_OK(status)) {
-		r_u->num_sids = num_sids;
-		r_u->ptr = (num_sids != 0) ? 1 : 0;
-		r_u->num_sids1 = num_sids;
-
-		r_u->sid = sid;
-	} else {
-		r_u->ptr = 0;
-		r_u->num_sids = 0;
-	}
-
-	r_u->status = status;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_r_query_aliasmem(const char *desc, SAMR_R_QUERY_ALIASMEM * r_u,
-			      prs_struct *ps, int depth)
-{
-	uint32 i;
-
-	if (r_u == NULL)
-		return False;
-
-	prs_debug(ps, depth, desc, "samr_io_r_query_aliasmem");
-	depth++;
-
-	if(!prs_align(ps))
-		return False;
-
-	if(!prs_uint32("num_sids ", ps, depth, &r_u->num_sids))
-		return False;
-	if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
-		return False;
-
-	if (r_u->ptr != 0 && r_u->num_sids != 0) {
-		uint32 *ptr_sid = NULL;
-
-		if(!prs_uint32("num_sids1", ps, depth, &r_u->num_sids1))
-			return False;
-
-		/* We must always use talloc here even when marshalling. */
-		if (r_u->num_sids1) {
-			ptr_sid = TALLOC_ARRAY(ps->mem_ctx, uint32, r_u->num_sids1);
-			if (!ptr_sid) {
-				return False;
-			}
-		} else {
-			ptr_sid = NULL;
-		}
-		
-		for (i = 0; i < r_u->num_sids1; i++) {
-			ptr_sid[i] = 1;
-			if(!prs_uint32("ptr_sid", ps, depth, &ptr_sid[i]))
-				return False;
-		}
-		
-		if (UNMARSHALLING(ps)) {
-			if (r_u->num_sids1) {
-				r_u->sid = TALLOC_ARRAY(ps->mem_ctx, DOM_SID2, r_u->num_sids1);
-				if (!r_u->sid) {
-					return False;
-				}
-			} else {
-				r_u->sid = NULL;
-			}
-		}
-		
-		for (i = 0; i < r_u->num_sids1; i++) {
-			if (ptr_sid[i] != 0) {
-				if(!smb_io_dom_sid2("sid", &r_u->sid[i], 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_LOOKUP_NAMES structure.
 ********************************************************************/
 
diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c
index fc5edcc..012503b 100644
--- a/source/rpc_server/srv_samr.c
+++ b/source/rpc_server/srv_samr.c
@@ -669,28 +669,7 @@ static bool api_samr_query_useraliases(pipes_struct *p)
 
 static bool api_samr_query_aliasmem(pipes_struct *p)
 {
-	SAMR_Q_QUERY_ALIASMEM q_u;
-	SAMR_R_QUERY_ALIASMEM 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_aliasmem("", &q_u, data, 0)) {
-		DEBUG(0,("api_samr_query_aliasmem: unable to unmarshall SAMR_Q_QUERY_ALIASMEM.\n"));
-		return False;
-	}
-
-	r_u.status = _samr_query_aliasmem(p, &q_u, &r_u);
-
-	if (!samr_io_r_query_aliasmem("", &r_u, rdata, 0)) {
-		DEBUG(0,("api_samr_query_aliasmem: unable to marshall SAMR_R_QUERY_ALIASMEM.\n"));
-		return False;
-	}
-
-	return True;
+	return proxy_samr_call(p, NDR_SAMR_GETMEMBERSINALIAS);
 }
 
 /*******************************************************************
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index c62fc78..08df3c6 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -3846,34 +3846,35 @@ NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u,
 }
 
 /*********************************************************************
- _samr_query_aliasmem
+ _samr_GetMembersInAlias
 *********************************************************************/
 
-NTSTATUS _samr_query_aliasmem(pipes_struct *p, SAMR_Q_QUERY_ALIASMEM *q_u, SAMR_R_QUERY_ALIASMEM *r_u)
+NTSTATUS _samr_GetMembersInAlias(pipes_struct *p,
+				 struct samr_GetMembersInAlias *r)
 {
 	NTSTATUS status;
 	size_t i;
 	size_t num_sids = 0;
-	DOM_SID2 *sid;
-	DOM_SID *sids=NULL;
+	struct lsa_SidPtr *sids = NULL;
+	DOM_SID *pdb_sids = NULL;
 
 	DOM_SID alias_sid;
 
 	uint32 acc_granted;
 
 	/* find the policy handle.  open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, &q_u->alias_pol, &alias_sid, &acc_granted, NULL)) 
+	if (!get_lsa_policy_samr_sid(p, r->in.alias_handle, &alias_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_ALIAS_GET_MEMBERS, "_samr_query_aliasmem"))) {
-		return r_u->status;
+
+	status = access_check_samr_function(acc_granted, SA_RIGHT_ALIAS_GET_MEMBERS, "_samr_GetMembersInAlias");
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
 	DEBUG(10, ("sid is %s\n", sid_string_dbg(&alias_sid)));
 
 	become_root();
-	status = pdb_enum_aliasmem(&alias_sid, &sids, &num_sids);
+	status = pdb_enum_aliasmem(&alias_sid, &pdb_sids, &num_sids);
 	unbecome_root();
 
 	if (!NT_STATUS_IS_OK(status)) {
@@ -3881,22 +3882,25 @@ NTSTATUS _samr_query_aliasmem(pipes_struct *p, SAMR_Q_QUERY_ALIASMEM *q_u, SAMR_
 	}
 
 	if (num_sids) {
-		sid = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_SID2, num_sids);	
-		if (sid == NULL) {
-			SAFE_FREE(sids);
+		sids = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_SidPtr, num_sids);
+		if (sids == NULL) {
+			TALLOC_FREE(pdb_sids);
 			return NT_STATUS_NO_MEMORY;
 		}
-	} else {
-		sid = NULL;
 	}
 
 	for (i = 0; i < num_sids; i++) {
-		init_dom_sid2(&sid[i], &sids[i]);
+		sids[i].sid = sid_dup_talloc(p->mem_ctx, &pdb_sids[i]);
+		if (!sids[i].sid) {
+			TALLOC_FREE(pdb_sids);
+			return NT_STATUS_NO_MEMORY;
+		}
 	}
 
-	init_samr_r_query_aliasmem(r_u, num_sids, sid, NT_STATUS_OK);
+	r->out.sids->num_sids = num_sids;
+	r->out.sids->sids = sids;
 
-	TALLOC_FREE(sids);
+	TALLOC_FREE(pdb_sids);
 
 	return NT_STATUS_OK;
 }
@@ -5250,16 +5254,6 @@ NTSTATUS _samr_SetAliasInfo(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_GetMembersInAlias(pipes_struct *p,
-				 struct samr_GetMembersInAlias *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
 NTSTATUS _samr_QueryUserInfo(pipes_struct *p,
 			     struct samr_QueryUserInfo *r)
 {
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c
index dbc2008..5895379 100644
--- a/source/rpcclient/cmd_samr.c
+++ b/source/rpcclient/cmd_samr.c
@@ -1100,9 +1100,9 @@ static NTSTATUS cmd_samr_query_aliasmem(struct rpc_pipe_client *cli,
 {
 	POLICY_HND connect_pol, domain_pol, alias_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32 alias_rid, num_members, i;
+	uint32 alias_rid, i;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	DOM_SID *alias_sids;
+	struct lsa_SidArray sid_array;
 
 	if ((argc < 3) || (argc > 4)) {
 		printf("Usage: %s builtin|domain rid [access mask]\n", argv[0]);
@@ -1152,16 +1152,17 @@ static NTSTATUS cmd_samr_query_aliasmem(struct rpc_pipe_client *cli,
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_query_aliasmem(cli, mem_ctx, &alias_pol,
-					 &num_members, &alias_sids);
+	result = rpccli_samr_GetMembersInAlias(cli, mem_ctx,
+					       &alias_pol,
+					       &sid_array);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	for (i = 0; i < num_members; i++) {
+	for (i = 0; i < sid_array.num_sids; i++) {
 		fstring sid_str;
 
-		sid_to_fstring(sid_str, &alias_sids[i]);
+		sid_to_fstring(sid_str, sid_array.sids[i].sid);
 		printf("\tsid:[%s]\n", sid_str);
 	}
 
diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c
index 4329005..7887960 100644
--- a/source/utils/net_rpc.c
+++ b/source/utils/net_rpc.c
@@ -2874,6 +2874,7 @@ static NTSTATUS rpc_list_alias_members(struct rpc_pipe_client *pipe_hnd,
 	char **names;
 	enum lsa_SidType *types;
 	int i;
+	struct lsa_SidArray sid_array;
 
 	result = rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
 				       domain_pol,
@@ -2884,14 +2885,17 @@ static NTSTATUS rpc_list_alias_members(struct rpc_pipe_client *pipe_hnd,
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	result = rpccli_samr_query_aliasmem(pipe_hnd, mem_ctx, &alias_pol,
-					 &num_members, &alias_sids);
+	result = rpccli_samr_GetMembersInAlias(pipe_hnd, mem_ctx,
+					       &alias_pol,
+					       &sid_array);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "Couldn't list alias members\n");
 		return result;
 	}
 
+	num_members = sid_array.num_sids;
+
 	if (num_members == 0) {
 		return NT_STATUS_OK;
 	}
@@ -2912,6 +2916,17 @@ static NTSTATUS rpc_list_alias_members(struct rpc_pipe_client *pipe_hnd,
 		return result;
 	}
 
+	alias_sids = TALLOC_ZERO_ARRAY(mem_ctx, DOM_SID, num_members);
+	if (!alias_sids) {
+		d_fprintf(stderr, "Out of memory\n");
+		cli_rpc_pipe_close(lsa_pipe);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for (i=0; i<num_members; i++) {
+		sid_copy(&alias_sids[i], sid_array.sids[i].sid);
+	}
+
 	result = rpccli_lsa_lookup_sids(lsa_pipe, mem_ctx, &lsa_pol, num_members,
 				     alias_sids, 
 				     &domains, &names, &types);
@@ -4185,7 +4200,7 @@ static NTSTATUS rpc_fetch_domain_aliases(struct rpc_pipe_client *pipe_hnd,
 
 			POLICY_HND alias_pol;
 			struct full_alias alias;
-			DOM_SID *members;
+			struct lsa_SidArray sid_array;
 			int j;
 
 			result = rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
@@ -4196,13 +4211,14 @@ static NTSTATUS rpc_fetch_domain_aliases(struct rpc_pipe_client *pipe_hnd,
 			if (!NT_STATUS_IS_OK(result))
 				goto done;
 
-			result = rpccli_samr_query_aliasmem(pipe_hnd, mem_ctx,
-							 &alias_pol,
-							 &alias.num_members,
-							 &members);
+			result = rpccli_samr_GetMembersInAlias(pipe_hnd, mem_ctx,
+							       &alias_pol,
+							       &sid_array);
 			if (!NT_STATUS_IS_OK(result))
 				goto done;
 
+			alias.num_members = sid_array.num_sids;
+
 			result = rpccli_samr_Close(pipe_hnd, mem_ctx, &alias_pol);
 			if (!NT_STATUS_IS_OK(result))
 				goto done;
@@ -4214,7 +4230,7 @@ static NTSTATUS rpc_fetch_domain_aliases(struct rpc_pipe_client *pipe_hnd,
 
 				for (j = 0; j < alias.num_members; j++)
 					sid_copy(&alias.members[j],
-						 &members[j]);
+						 sid_array.sids[j].sid);
 			}
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list