[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-1892-g4b06895

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


The branch, v3-2-test has been updated
       via  4b068954671143a7c94884e169f1d0ba420dccb7 (commit)
       via  8bcbf8cccdbd14a1c7a446828605c7235b63ff56 (commit)
       via  4cd7f7a8e797e00fc6b03496e23d384bb7085884 (commit)
      from  5c167162856fd1e13a3e04423cfc0cc936ae26b0 (commit)

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


- Log -----------------------------------------------------------------
commit 4b068954671143a7c94884e169f1d0ba420dccb7
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 5 03:17:12 2008 +0100

    Use idl for _samr_QueryGroupMember().
    
    Guenther

commit 8bcbf8cccdbd14a1c7a446828605c7235b63ff56
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 5 03:19:35 2008 +0100

    Re-run make idl.
    
    Guenther

commit 4cd7f7a8e797e00fc6b03496e23d384bb7085884
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 5 03:17:36 2008 +0100

    Fix IDL for samr_QueryGroupMember().
    
    Guenther

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

Summary of changes:
 source/librpc/gen_ndr/cli_samr.c |    2 +-
 source/librpc/gen_ndr/cli_samr.h |    2 +-
 source/librpc/gen_ndr/ndr_samr.c |   22 +++++++++++++++--
 source/librpc/gen_ndr/samr.h     |    2 +-
 source/librpc/gen_ndr/srv_samr.c |    2 +-
 source/librpc/idl/samr.idl       |    2 +-
 source/rpc_server/srv_samr.c     |   23 +------------------
 source/rpc_server/srv_samr_nt.c  |   46 +++++++++++++++++++------------------
 8 files changed, 49 insertions(+), 52 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/gen_ndr/cli_samr.c b/source/librpc/gen_ndr/cli_samr.c
index a688e67..627c448 100644
--- a/source/librpc/gen_ndr/cli_samr.c
+++ b/source/librpc/gen_ndr/cli_samr.c
@@ -1120,7 +1120,7 @@ NTSTATUS rpccli_samr_DeleteGroupMember(struct rpc_pipe_client *cli,
 NTSTATUS rpccli_samr_QueryGroupMember(struct rpc_pipe_client *cli,
 				      TALLOC_CTX *mem_ctx,
 				      struct policy_handle *group_handle,
-				      struct samr_RidTypeArray *rids)
+				      struct samr_RidTypeArray **rids)
 {
 	struct samr_QueryGroupMember r;
 	NTSTATUS status;
diff --git a/source/librpc/gen_ndr/cli_samr.h b/source/librpc/gen_ndr/cli_samr.h
index d1e262c..86396be 100644
--- a/source/librpc/gen_ndr/cli_samr.h
+++ b/source/librpc/gen_ndr/cli_samr.h
@@ -143,7 +143,7 @@ NTSTATUS rpccli_samr_DeleteGroupMember(struct rpc_pipe_client *cli,
 NTSTATUS rpccli_samr_QueryGroupMember(struct rpc_pipe_client *cli,
 				      TALLOC_CTX *mem_ctx,
 				      struct policy_handle *group_handle,
-				      struct samr_RidTypeArray *rids);
+				      struct samr_RidTypeArray **rids);
 NTSTATUS rpccli_samr_SetMemberAttributesOfGroup(struct rpc_pipe_client *cli,
 						TALLOC_CTX *mem_ctx,
 						struct policy_handle *group_handle,
diff --git a/source/librpc/gen_ndr/ndr_samr.c b/source/librpc/gen_ndr/ndr_samr.c
index 1d003f2..fbb6c64 100644
--- a/source/librpc/gen_ndr/ndr_samr.c
+++ b/source/librpc/gen_ndr/ndr_samr.c
@@ -7642,7 +7642,11 @@ static enum ndr_err_code ndr_push_samr_QueryGroupMember(struct ndr_push *ndr, in
 		if (r->out.rids == NULL) {
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
-		NDR_CHECK(ndr_push_samr_RidTypeArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rids));
+		if (*r->out.rids == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_ref_ptr(ndr));
+		NDR_CHECK(ndr_push_samr_RidTypeArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.rids));
 		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
 	}
 	return NDR_ERR_SUCCESS;
@@ -7650,8 +7654,10 @@ static enum ndr_err_code ndr_push_samr_QueryGroupMember(struct ndr_push *ndr, in
 
 static enum ndr_err_code ndr_pull_samr_QueryGroupMember(struct ndr_pull *ndr, int flags, struct samr_QueryGroupMember *r)
 {
+	uint32_t _ptr_rids;
 	TALLOC_CTX *_mem_save_group_handle_0;
 	TALLOC_CTX *_mem_save_rids_0;
+	TALLOC_CTX *_mem_save_rids_1;
 	if (flags & NDR_IN) {
 		ZERO_STRUCT(r->out);
 
@@ -7671,7 +7677,14 @@ static enum ndr_err_code ndr_pull_samr_QueryGroupMember(struct ndr_pull *ndr, in
 		}
 		_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
 		NDR_PULL_SET_MEM_CTX(ndr, r->out.rids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_RidTypeArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rids));
+		NDR_CHECK(ndr_pull_ref_ptr(ndr, &_ptr_rids));
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, *r->out.rids);
+		}
+		_mem_save_rids_1 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, *r->out.rids, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_samr_RidTypeArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.rids));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_1, LIBNDR_FLAG_REF_ALLOC);
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
 	}
@@ -7699,7 +7712,10 @@ _PUBLIC_ void ndr_print_samr_QueryGroupMember(struct ndr_print *ndr, const char
 		ndr->depth++;
 		ndr_print_ptr(ndr, "rids", r->out.rids);
 		ndr->depth++;
-		ndr_print_samr_RidTypeArray(ndr, "rids", r->out.rids);
+		ndr_print_ptr(ndr, "rids", *r->out.rids);
+		ndr->depth++;
+		ndr_print_samr_RidTypeArray(ndr, "rids", *r->out.rids);
+		ndr->depth--;
 		ndr->depth--;
 		ndr_print_NTSTATUS(ndr, "result", r->out.result);
 		ndr->depth--;
diff --git a/source/librpc/gen_ndr/samr.h b/source/librpc/gen_ndr/samr.h
index ba917c8..7a1537e 100644
--- a/source/librpc/gen_ndr/samr.h
+++ b/source/librpc/gen_ndr/samr.h
@@ -1101,7 +1101,7 @@ struct samr_QueryGroupMember {
 	} in;
 
 	struct {
-		struct samr_RidTypeArray *rids;/* [ref] */
+		struct samr_RidTypeArray **rids;/* [ref] */
 		NTSTATUS result;
 	} out;
 
diff --git a/source/librpc/gen_ndr/srv_samr.c b/source/librpc/gen_ndr/srv_samr.c
index 215d773..1df7fcf 100644
--- a/source/librpc/gen_ndr/srv_samr.c
+++ b/source/librpc/gen_ndr/srv_samr.c
@@ -2051,7 +2051,7 @@ static bool api_samr_QueryGroupMember(pipes_struct *p)
 	}
 
 	ZERO_STRUCT(r->out);
-	r->out.rids = talloc_zero(r, struct samr_RidTypeArray);
+	r->out.rids = talloc_zero(r, struct samr_RidTypeArray *);
 	if (r->out.rids == NULL) {
 		talloc_free(r);
 		return false;
diff --git a/source/librpc/idl/samr.idl b/source/librpc/idl/samr.idl
index e7eb4e5..92e4011 100644
--- a/source/librpc/idl/samr.idl
+++ b/source/librpc/idl/samr.idl
@@ -508,7 +508,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 
 	NTSTATUS samr_QueryGroupMember(
 		[in,ref]  policy_handle *group_handle,
-		[out,ref] samr_RidTypeArray *rids
+		[out,ref] samr_RidTypeArray **rids
 		);
 
 
diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c
index 6375d6d..d41d828 100644
--- a/source/rpc_server/srv_samr.c
+++ b/source/rpc_server/srv_samr.c
@@ -637,28 +637,7 @@ static bool api_samr_query_aliasmem(pipes_struct *p)
 
 static bool api_samr_query_groupmem(pipes_struct *p)
 {
-	SAMR_Q_QUERY_GROUPMEM q_u;
-	SAMR_R_QUERY_GROUPMEM 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_groupmem("", &q_u, data, 0)) {
-		DEBUG(0,("api_samr_query_groupmem: unable to unmarshall SAMR_Q_QUERY_GROUPMEM.\n"));
-		return False;
-	}
-
-	r_u.status = _samr_query_groupmem(p, &q_u, &r_u);
-
-	if (!samr_io_r_query_groupmem("", &r_u, rdata, 0)) {
-		DEBUG(0,("api_samr_query_groupmem: unable to marshall SAMR_R_QUERY_GROUPMEM.\n"));
-		return False;
-	}
-
-	return True;
+	return proxy_samr_call(p, NDR_SAMR_QUERYGROUPMEMBER);
 }
 
 /*******************************************************************
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index 2f85270..0c9547e 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -3909,10 +3909,11 @@ NTSTATUS _samr_GetMembersInAlias(pipes_struct *p,
 }
 
 /*********************************************************************
- _samr_query_groupmem
+ _samr_QueryGroupMember
 *********************************************************************/
 
-NTSTATUS _samr_query_groupmem(pipes_struct *p, SAMR_Q_QUERY_GROUPMEM *q_u, SAMR_R_QUERY_GROUPMEM *r_u)
+NTSTATUS _samr_QueryGroupMember(pipes_struct *p,
+				struct samr_QueryGroupMember *r)
 {
 	DOM_SID group_sid;
 	size_t i, num_members;
@@ -3922,16 +3923,23 @@ NTSTATUS _samr_query_groupmem(pipes_struct *p, SAMR_Q_QUERY_GROUPMEM *q_u, SAMR_
 
 	uint32 acc_granted;
 
-	NTSTATUS result;
+	NTSTATUS status;
+	struct samr_RidTypeArray *rids = NULL;
+
+	rids = TALLOC_ZERO_P(p->mem_ctx, struct samr_RidTypeArray);
+	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->group_pol, &group_sid, &acc_granted, NULL)) 
+	if (!get_lsa_policy_samr_sid(p, r->in.group_handle, &group_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_GROUP_GET_MEMBERS, "_samr_query_groupmem"))) {
-		return r_u->status;
+
+	status = access_check_samr_function(acc_granted, SA_RIGHT_GROUP_GET_MEMBERS, "_samr_QueryGroupMember");
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
-		
+
 	DEBUG(10, ("sid is %s\n", sid_string_dbg(&group_sid)));
 
 	if (!sid_check_is_in_our_domain(&group_sid)) {
@@ -3943,12 +3951,12 @@ NTSTATUS _samr_query_groupmem(pipes_struct *p, SAMR_Q_QUERY_GROUPMEM *q_u, SAMR_
 	DEBUG(10, ("lookup on Domain SID\n"));
 
 	become_root();
-	result = pdb_enum_group_members(p->mem_ctx, &group_sid,
+	status = pdb_enum_group_members(p->mem_ctx, &group_sid,
 					&rid, &num_members);
 	unbecome_root();
 
-	if (!NT_STATUS_IS_OK(result))
-		return result;
+	if (!NT_STATUS_IS_OK(status))
+		return status;
 
 	if (num_members) {
 		attr=TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_members);
@@ -3962,7 +3970,11 @@ NTSTATUS _samr_query_groupmem(pipes_struct *p, SAMR_Q_QUERY_GROUPMEM *q_u, SAMR_
 	for (i=0; i<num_members; i++)
 		attr[i] = SID_NAME_USER;
 
-	init_samr_r_query_groupmem(r_u, num_members, rid, attr, NT_STATUS_OK);
+	rids->count = num_members;
+	rids->types = attr;
+	rids->rids = rid;
+
+	*r->out.rids = rids;
 
 	return NT_STATUS_OK;
 }
@@ -5197,16 +5209,6 @@ NTSTATUS _samr_SetGroupInfo(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_QueryGroupMember(pipes_struct *p,
-				struct samr_QueryGroupMember *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
 NTSTATUS _samr_SetMemberAttributesOfGroup(pipes_struct *p,
 					  struct samr_SetMemberAttributesOfGroup *r)
 {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list