[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-1889-g5c16716

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


The branch, v3-2-test has been updated
       via  5c167162856fd1e13a3e04423cfc0cc936ae26b0 (commit)
       via  b573f677239fbf176468796bb05c4b43dce47262 (commit)
      from  e03fd629171b625a42f02bdd6660b2ba75d27a4b (commit)

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


- Log -----------------------------------------------------------------
commit 5c167162856fd1e13a3e04423cfc0cc936ae26b0
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 5 02:45:51 2008 +0100

    Use rpccli_samr_GetAliasMembership() in winbindd and rpcclient.
    
    Guenther

commit b573f677239fbf176468796bb05c4b43dce47262
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 5 02:04:56 2008 +0100

    Use pidl for _samr_GetAliasMembership().
    
    Guenther

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

Summary of changes:
 source/rpc_server/srv_samr.c    |   23 +-------------------
 source/rpc_server/srv_samr_nt.c |   44 +++++++++++++++-----------------------
 source/rpcclient/cmd_samr.c     |   30 +++++++++++++++-----------
 source/winbindd/winbindd_rpc.c  |   37 ++++++++++++++++++--------------
 4 files changed, 56 insertions(+), 78 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c
index 8c71e5e..6375d6d 100644
--- a/source/rpc_server/srv_samr.c
+++ b/source/rpc_server/srv_samr.c
@@ -619,28 +619,7 @@ static bool api_samr_set_userinfo2(pipes_struct *p)
 
 static bool api_samr_query_useraliases(pipes_struct *p)
 {
-	SAMR_Q_QUERY_USERALIASES q_u;
-	SAMR_R_QUERY_USERALIASES 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_useraliases("", &q_u, data, 0)) {
-		DEBUG(0,("api_samr_query_useraliases:  Unable to unmarshall SAMR_Q_QUERY_USERALIASES.\n"));
-		return False;
-	}
-
-	r_u.status = _samr_query_useraliases(p, &q_u, &r_u);
-
-	if (! samr_io_r_query_useraliases("", &r_u, rdata, 0)) {
-		DEBUG(0,("api_samr_query_useraliases:  Unable to nmarshall SAMR_R_QUERY_USERALIASES.\n"));
-		return False;
-	}
-
-	return True;
+	return proxy_samr_call(p, NDR_SAMR_GETALIASMEMBERSHIP);
 }
 
 /*******************************************************************
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index 10a3267..2f85270 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -3781,10 +3781,11 @@ NTSTATUS _samr_set_userinfo2(pipes_struct *p, SAMR_Q_SET_USERINFO2 *q_u, SAMR_R_
 }
 
 /*********************************************************************
- _samr_query_aliasmem
+ _samr_GetAliasMembership
 *********************************************************************/
 
-NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u, SAMR_R_QUERY_USERALIASES *r_u)
+NTSTATUS _samr_GetAliasMembership(pipes_struct *p,
+				  struct samr_GetAliasMembership *r)
 {
 	size_t num_alias_rids;
 	uint32 *alias_rids;
@@ -3796,17 +3797,15 @@ NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u,
 
 	DOM_SID *members;
 
-	r_u->status = NT_STATUS_OK;
-
-	DEBUG(5,("_samr_query_useraliases: %d\n", __LINE__));
+	DEBUG(5,("_samr_GetAliasMembership: %d\n", __LINE__));
 
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-		
-	ntstatus1 = access_check_samr_function(info->acc_granted, SA_RIGHT_DOMAIN_LOOKUP_ALIAS_BY_MEM, "_samr_query_useraliases");
-	ntstatus2 = access_check_samr_function(info->acc_granted, SA_RIGHT_DOMAIN_OPEN_ACCOUNT, "_samr_query_useraliases");
-	
+
+	ntstatus1 = access_check_samr_function(info->acc_granted, SA_RIGHT_DOMAIN_LOOKUP_ALIAS_BY_MEM, "_samr_GetAliasMembership");
+	ntstatus2 = access_check_samr_function(info->acc_granted, SA_RIGHT_DOMAIN_OPEN_ACCOUNT, "_samr_GetAliasMembership");
+
 	if (!NT_STATUS_IS_OK(ntstatus1) || !NT_STATUS_IS_OK(ntstatus2)) {
 		if (!(NT_STATUS_EQUAL(ntstatus1,NT_STATUS_ACCESS_DENIED) && NT_STATUS_IS_OK(ntstatus2)) &&
 		    !(NT_STATUS_EQUAL(ntstatus1,NT_STATUS_ACCESS_DENIED) && NT_STATUS_IS_OK(ntstatus1))) {
@@ -3818,8 +3817,8 @@ NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u,
 	    !sid_check_is_builtin(&info->sid))
 		return NT_STATUS_OBJECT_TYPE_MISMATCH;
 
-	if (q_u->num_sids1) {
-		members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, q_u->num_sids1);
+	if (r->in.sids->num_sids) {
+		members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, r->in.sids->num_sids);
 
 		if (members == NULL)
 			return NT_STATUS_NO_MEMORY;
@@ -3827,15 +3826,15 @@ NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u,
 		members = NULL;
 	}
 
-	for (i=0; i<q_u->num_sids1; i++)
-		sid_copy(&members[i], &q_u->sid[i].sid);
+	for (i=0; i<r->in.sids->num_sids; i++)
+		sid_copy(&members[i], r->in.sids->sids[i].sid);
 
 	alias_rids = NULL;
 	num_alias_rids = 0;
 
 	become_root();
 	ntstatus1 = pdb_enum_alias_memberships(p->mem_ctx, &info->sid, members,
-					       q_u->num_sids1,
+					       r->in.sids->num_sids,
 					       &alias_rids, &num_alias_rids);
 	unbecome_root();
 
@@ -3843,8 +3842,9 @@ NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u,
 		return ntstatus1;
 	}
 
-	init_samr_r_query_useraliases(r_u, num_alias_rids, alias_rids,
-				      NT_STATUS_OK);
+	r->out.rids->count = num_alias_rids;
+	r->out.rids->ids = alias_rids;
+
 	return NT_STATUS_OK;
 }
 
@@ -5157,16 +5157,6 @@ NTSTATUS _samr_EnumDomainAliases(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_GetAliasMembership(pipes_struct *p,
-				  struct samr_GetAliasMembership *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
 NTSTATUS _samr_LookupNames(pipes_struct *p,
 			   struct samr_LookupNames *r)
 {
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c
index e751c4d..ccea73e 100644
--- a/source/rpcclient/cmd_samr.c
+++ b/source/rpcclient/cmd_samr.c
@@ -696,11 +696,11 @@ static NTSTATUS cmd_samr_query_useraliases(struct rpc_pipe_client *cli,
 	NTSTATUS		result = NT_STATUS_UNSUCCESSFUL;
 	DOM_SID                *sids;
 	size_t                     num_sids;
-	uint32 			num_aliases, *alias_rids;
 	uint32			access_mask = MAXIMUM_ALLOWED_ACCESS;
 	int 			i;
 	fstring			server;
-	DOM_SID2	       *sid2;
+	struct lsa_SidArray sid_array;
+	struct samr_Ids alias_rids;
 
 	if (argc < 3) {
 		printf("Usage: %s builtin|domain sid1 sid2 ...\n", argv[0]);
@@ -723,18 +723,22 @@ static NTSTATUS cmd_samr_query_useraliases(struct rpc_pipe_client *cli,
 	}
 
 	if (num_sids) {
-		sid2 = TALLOC_ARRAY(mem_ctx, DOM_SID2, num_sids);
-		if (sid2 == NULL)
+		sid_array.sids = TALLOC_ZERO_ARRAY(mem_ctx, struct lsa_SidPtr, num_sids);
+		if (sid_array.sids == NULL)
 			return NT_STATUS_NO_MEMORY;
 	} else {
-		sid2 = NULL;
+		sid_array.sids = NULL;
 	}
 
 	for (i=0; i<num_sids; i++) {
-		sid_copy(&sid2[i].sid, &sids[i]);
-		sid2[i].num_auths = sid2[i].sid.num_auths;
+		sid_array.sids[i].sid = sid_dup_talloc(mem_ctx, &sids[i]);
+		if (!sid_array.sids[i].sid) {
+			return NT_STATUS_NO_MEMORY;
+		}
 	}
 
+	sid_array.num_sids = num_sids;
+
 	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
 	strupper_m(server);
 		
@@ -763,15 +767,15 @@ static NTSTATUS cmd_samr_query_useraliases(struct rpc_pipe_client *cli,
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_query_useraliases(cli, mem_ctx, &domain_pol,
-					    num_sids, sid2,
-					    &num_aliases, &alias_rids);
-
+	result = rpccli_samr_GetAliasMembership(cli, mem_ctx,
+						&domain_pol,
+						&sid_array,
+						&alias_rids);
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	for (i = 0; i < num_aliases; i++) {
-		printf("\tgroup rid:[0x%x]\n", alias_rids[i]);
+	for (i = 0; i < alias_rids.count; i++) {
+		printf("\tgroup rid:[0x%x]\n", alias_rids.ids[i]);
 	}
 
 	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
diff --git a/source/winbindd/winbindd_rpc.c b/source/winbindd/winbindd_rpc.c
index 0d937ef..7e35759 100644
--- a/source/winbindd/winbindd_rpc.c
+++ b/source/winbindd/winbindd_rpc.c
@@ -585,11 +585,10 @@ NTSTATUS msrpc_lookup_useraliases(struct winbindd_domain *domain,
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	POLICY_HND dom_pol;
-	DOM_SID2 *query_sids;
 	uint32 num_query_sids = 0;
 	int i;
 	struct rpc_pipe_client *cli;
-	uint32 *alias_rids_query, num_aliases_query;
+	struct samr_Ids alias_rids_query;
 	int rangesize = MAX_SAM_ENTRIES_W2K;
 	uint32 total_sids = 0;
 	int num_queries = 1;
@@ -611,6 +610,9 @@ NTSTATUS msrpc_lookup_useraliases(struct winbindd_domain *domain,
 
 	do {
 		/* prepare query */
+		struct lsa_SidArray sid_array;
+
+		ZERO_STRUCT(sid_array);
 
 		num_query_sids = MIN(num_sids - total_sids, rangesize);
 
@@ -618,45 +620,48 @@ NTSTATUS msrpc_lookup_useraliases(struct winbindd_domain *domain,
 			num_queries, num_query_sids));	
 
 		if (num_query_sids) {
-			query_sids = TALLOC_ARRAY(mem_ctx, DOM_SID2, num_query_sids);
-			if (query_sids == NULL) {
+			sid_array.sids = TALLOC_ZERO_ARRAY(mem_ctx, struct lsa_SidPtr, num_query_sids);
+			if (sid_array.sids == NULL) {
 				return NT_STATUS_NO_MEMORY;
 			}
 		} else {
-			query_sids = NULL;
+			sid_array.sids = NULL;
 		}
 
 		for (i=0; i<num_query_sids; i++) {
-			sid_copy(&query_sids[i].sid, &sids[total_sids++]);
-			query_sids[i].num_auths = query_sids[i].sid.num_auths;
+			sid_array.sids[i].sid = sid_dup_talloc(mem_ctx, &sids[total_sids++]);
+			if (sid_array.sids[i].sid) {
+				TALLOC_FREE(sid_array.sids);
+				return NT_STATUS_NO_MEMORY;
+			}
 		}
+		sid_array.num_sids = num_query_sids;
 
 		/* do request */
-
-		result = rpccli_samr_query_useraliases(cli, mem_ctx, &dom_pol,
-						       num_query_sids, query_sids,
-						       &num_aliases_query, 
-						       &alias_rids_query);
+		result = rpccli_samr_GetAliasMembership(cli, mem_ctx,
+							&dom_pol,
+							&sid_array,
+							&alias_rids_query);
 
 		if (!NT_STATUS_IS_OK(result)) {
 			*num_aliases = 0;
 			*alias_rids = NULL;
-			TALLOC_FREE(query_sids);
+			TALLOC_FREE(sid_array.sids);
 			goto done;
 		}
 
 		/* process output */
 
-		for (i=0; i<num_aliases_query; i++) {
+		for (i=0; i<alias_rids_query.count; i++) {
 			size_t na = *num_aliases;
-			if (!add_rid_to_array_unique(mem_ctx, alias_rids_query[i], 
+			if (!add_rid_to_array_unique(mem_ctx, alias_rids_query.ids[i],
 						alias_rids, &na)) {
 				return NT_STATUS_NO_MEMORY;
 			}
 			*num_aliases = na;
 		}
 
-		TALLOC_FREE(query_sids);
+		TALLOC_FREE(sid_array.sids);
 
 		num_queries++;
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list