[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Mon Mar 1 10:50:56 MST 2010


The branch, master has been updated
       via  522e4f3... s4:RPC-ECHO: don't ignore errors in the Sleep test now that we support async rpc over ncacn_np
       via  340bcf6... s4:rpc_server/remote: do async calls
       via  ff17d8a... s4:srvsvc RPC - make this one "signed-safe"
       via  b963741... s4:unixinfo RPC - make this one "signed-safe"
       via  932a986... s4:spoolss RPC - make this one "signed-safe"
       via  246742b... s4:remote RPC - make this one "signed-safe"
       via  c953b26... s4:epmapper RPC - make this one "signed-safe"
      from  d6a6872... s3: Abstract access to sessionid.tdb, similar to conn_tdb.c

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 522e4f3d2bcd260f7037fbafd4340a9a4513c89d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Feb 27 10:16:56 2010 +0100

    s4:RPC-ECHO: don't ignore errors in the Sleep test now that we support async rpc over ncacn_np
    
    metze

commit 340bcf646baf0a01ca55f66e787d1d49ddea6086
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Mar 1 15:20:19 2010 +0100

    s4:rpc_server/remote: do async calls
    
    metze

commit ff17d8ab1ee809e1c464b9c8cb088f2e8fbf3cb3
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date:   Sat Nov 21 19:08:42 2009 +0100

    s4:srvsvc RPC - make this one "signed-safe"

commit b963741aae82b721655e36e8c62b678acff2e210
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date:   Sat Nov 21 19:03:59 2009 +0100

    s4:unixinfo RPC - make this one "signed-safe"

commit 932a986a4f3122555654d36d838996a90b1e69a7
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date:   Sat Nov 21 19:03:18 2009 +0100

    s4:spoolss RPC - make this one "signed-safe"

commit 246742b30eb90da4d2c314e7b60bfc62ef0275ec
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date:   Sat Nov 21 19:01:53 2009 +0100

    s4:remote RPC - make this one "signed-safe"

commit c953b262419b8f67a7976b1f82d14e76893a7ec2
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date:   Sat Nov 21 18:59:30 2009 +0100

    s4:epmapper RPC - make this one "signed-safe"

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

Summary of changes:
 source4/rpc_server/epmapper/rpc_epmapper.c    |    4 +-
 source4/rpc_server/remote/dcesrv_remote.c     |   52 +++++++++++++++++++++----
 source4/rpc_server/spoolss/dcesrv_spoolss.c   |    2 +-
 source4/rpc_server/srvsvc/dcesrv_srvsvc.c     |   39 +++++++++---------
 source4/rpc_server/unixinfo/dcesrv_unixinfo.c |    2 +-
 source4/torture/rpc/echo.c                    |    6 +-
 6 files changed, 71 insertions(+), 34 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/rpc_server/epmapper/rpc_epmapper.c b/source4/rpc_server/epmapper/rpc_epmapper.c
index ade8b69..87bfee6 100644
--- a/source4/rpc_server/epmapper/rpc_epmapper.c
+++ b/source4/rpc_server/epmapper/rpc_epmapper.c
@@ -103,7 +103,7 @@ static error_status_t dcesrv_epm_Lookup(struct dcesrv_call_state *dce_call, TALL
 		struct dcesrv_ep_iface *e;
 	} *eps;
 	uint32_t num_ents;
-	int i;
+	unsigned int i;
 
 	DCESRV_PULL_HANDLE_FAULT(h, r->in.entry_handle, HTYPE_LOOKUP);
 
@@ -168,7 +168,7 @@ static error_status_t dcesrv_epm_Map(struct dcesrv_call_state *dce_call, TALLOC_
 			      struct epm_Map *r)
 {
 	uint32_t count;
-	int i;
+	unsigned int i;
 	struct dcesrv_ep_iface *eps;
 	struct epm_floor *floors;
 	enum dcerpc_transport_t transport;
diff --git a/source4/rpc_server/remote/dcesrv_remote.c b/source4/rpc_server/remote/dcesrv_remote.c
index 45944bc..0521603 100644
--- a/source4/rpc_server/remote/dcesrv_remote.c
+++ b/source4/rpc_server/remote/dcesrv_remote.c
@@ -186,6 +186,8 @@ static NTSTATUS remote_op_ndr_pull(struct dcesrv_call_state *dce_call, TALLOC_CT
 	return NT_STATUS_OK;
 }
 
+static void remote_op_dispatch_done(struct rpc_request *rreq);
+
 static NTSTATUS remote_op_dispatch(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r)
 {
 	struct dcesrv_remote_private *priv = dce_call->context->private_data;
@@ -193,6 +195,7 @@ static NTSTATUS remote_op_dispatch(struct dcesrv_call_state *dce_call, TALLOC_CT
 	const struct ndr_interface_table *table = dce_call->context->iface->private_data;
 	const struct ndr_interface_call *call;
 	const char *name;
+	struct rpc_request *rreq;
 
 	name = table->calls[opnum].name;
 	call = &table->calls[opnum];
@@ -204,20 +207,53 @@ static NTSTATUS remote_op_dispatch(struct dcesrv_call_state *dce_call, TALLOC_CT
 	priv->c_pipe->conn->flags |= DCERPC_NDR_REF_ALLOC;
 
 	/* we didn't use the return code of this function as we only check the last_fault_code */
-	dcerpc_ndr_request(priv->c_pipe, NULL, table, opnum, mem_ctx,r);
+	rreq = dcerpc_ndr_request_send(priv->c_pipe, NULL, table, opnum, true, mem_ctx, r);
+	if (rreq == NULL) {
+		DEBUG(0,("dcesrv_remote: call[%s] dcerpc_ndr_request_send() failed!\n", name));
+		return NT_STATUS_NO_MEMORY;
+	}
+	rreq->async.callback = remote_op_dispatch_done;
+	rreq->async.private_data = dce_call;
+
+	dce_call->state_flags |= DCESRV_CALL_STATE_FLAG_ASYNC;
+	return NT_STATUS_OK;
+}
+
+static void remote_op_dispatch_done(struct rpc_request *rreq)
+{
+	struct dcesrv_call_state *dce_call = talloc_get_type_abort(rreq->async.private_data,
+					     struct dcesrv_call_state);
+	struct dcesrv_remote_private *priv = dce_call->context->private_data;
+	uint16_t opnum = dce_call->pkt.u.request.opnum;
+	const struct ndr_interface_table *table = dce_call->context->iface->private_data;
+	const struct ndr_interface_call *call;
+	const char *name;
+	NTSTATUS status;
+
+	name = table->calls[opnum].name;
+	call = &table->calls[opnum];
+
+	/* we didn't use the return code of this function as we only check the last_fault_code */
+	status = dcerpc_ndr_request_recv(rreq);
 
 	dce_call->fault_code = priv->c_pipe->last_fault_code;
 	if (dce_call->fault_code != 0) {
-		DEBUG(0,("dcesrv_remote: call[%s] failed with: %s!\n",name, dcerpc_errstr(mem_ctx, dce_call->fault_code)));
-		return NT_STATUS_NET_WRITE_FAULT;
+		DEBUG(0,("dcesrv_remote: call[%s] failed with: %s!\n",
+			name, dcerpc_errstr(dce_call, dce_call->fault_code)));
+		goto reply;
 	}
 
-	if ((dce_call->fault_code == 0) && 
+	if (NT_STATUS_IS_OK(status) &&
 	    (priv->c_pipe->conn->flags & DCERPC_DEBUG_PRINT_OUT)) {
-		ndr_print_function_debug(call->ndr_print, name, NDR_OUT, r);		
+		ndr_print_function_debug(call->ndr_print, name, NDR_OUT, dce_call->r);
 	}
 
-	return NT_STATUS_OK;
+reply:
+	status = dcesrv_reply(dce_call);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0,("dcesrv_remote: call[%s]: dcesrv_reply() failed - %s\n",
+			name, nt_errstr(status)));
+	}
 }
 
 static NTSTATUS remote_op_ndr_push(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ndr_push *push, const void *r)
@@ -238,7 +274,7 @@ static NTSTATUS remote_op_ndr_push(struct dcesrv_call_state *dce_call, TALLOC_CT
 
 static NTSTATUS remote_register_one_iface(struct dcesrv_context *dce_ctx, const struct dcesrv_interface *iface)
 {
-	int i;
+	unsigned int i;
 	const struct ndr_interface_table *table = iface->private_data;
 
 	for (i=0;i<table->endpoints->count;i++) {
@@ -257,7 +293,7 @@ static NTSTATUS remote_register_one_iface(struct dcesrv_context *dce_ctx, const
 
 static NTSTATUS remote_op_init_server(struct dcesrv_context *dce_ctx, const struct dcesrv_endpoint_server *ep_server)
 {
-	int i;
+	unsigned int i;
 	const char **ifaces = (const char **)str_list_make(dce_ctx, lp_parm_string(dce_ctx->lp_ctx, NULL, "dcerpc_remote", "interfaces"),NULL);
 
 	if (!ifaces) {
diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c
index 0e071dc..2921b6b 100644
--- a/source4/rpc_server/spoolss/dcesrv_spoolss.c
+++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c
@@ -151,7 +151,7 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal
 	struct socket_address *myaddr;
 	const char **aliases;
 	const char *dnsdomain;
-	int i;
+	unsigned int i;
 
 	/* NULL is ok */
 	if (!server_name) return WERR_OK;
diff --git a/source4/rpc_server/srvsvc/dcesrv_srvsvc.c b/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
index ac53fd7..90edadb 100644
--- a/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
+++ b/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
@@ -431,8 +431,8 @@ static WERROR dcesrv_srvsvc_NetShareAdd(struct dcesrv_call_state *dce_call, TALL
 		NTSTATUS nterr;
 		struct share_info *info;
 		struct share_context *sctx;
-		int count = 8;
-		int i;
+		unsigned int count = 8;
+		unsigned int i;
 
 		nterr = share_get_context_by_name(mem_ctx, lp_share_backend(dce_call->conn->dce_ctx->lp_ctx), dce_call->event_ctx, dce_call->conn->dce_ctx->lp_ctx, &sctx);
 		if (!NT_STATUS_IS_OK(nterr)) {
@@ -529,8 +529,8 @@ static WERROR dcesrv_srvsvc_NetShareAdd(struct dcesrv_call_state *dce_call, TALL
 		NTSTATUS nterr;
 		struct share_info *info;
 		struct share_context *sctx;
-		int count = 10;
-		int i;
+		unsigned int count = 10;
+		unsigned int i;
 
 		nterr = share_get_context_by_name(mem_ctx, lp_share_backend(dce_call->conn->dce_ctx->lp_ctx), dce_call->event_ctx, dce_call->conn->dce_ctx->lp_ctx, &sctx);
 		if (!NT_STATUS_IS_OK(nterr)) {
@@ -733,7 +733,7 @@ static WERROR dcesrv_srvsvc_NetShareEnumAll(struct dcesrv_call_state *dce_call,
 	switch (r->in.info_ctr->level) {
 	case 0:
 	{
-		int i;
+		unsigned int i;
 		struct srvsvc_NetShareCtr0 *ctr0;
 
 		ctr0 = talloc(mem_ctx, struct srvsvc_NetShareCtr0);
@@ -774,7 +774,7 @@ static WERROR dcesrv_srvsvc_NetShareEnumAll(struct dcesrv_call_state *dce_call,
 	}
 	case 1:
 	{
-		int i;
+		unsigned int i;
 		struct srvsvc_NetShareCtr1 *ctr1;
 
 		ctr1 = talloc(mem_ctx, struct srvsvc_NetShareCtr1);
@@ -816,7 +816,7 @@ static WERROR dcesrv_srvsvc_NetShareEnumAll(struct dcesrv_call_state *dce_call,
 	}
 	case 2:
 	{
-		int i;
+		unsigned int i;
 		struct srvsvc_NetShareCtr2 *ctr2;
 
 		SRVSVC_CHECK_ADMIN_ACCESS;
@@ -860,7 +860,7 @@ static WERROR dcesrv_srvsvc_NetShareEnumAll(struct dcesrv_call_state *dce_call,
 	}
 	case 501:
 	{
-		int i;
+		unsigned int i;
 		struct srvsvc_NetShareCtr501 *ctr501;
 
 		SRVSVC_CHECK_ADMIN_ACCESS;
@@ -904,7 +904,7 @@ static WERROR dcesrv_srvsvc_NetShareEnumAll(struct dcesrv_call_state *dce_call,
 	}
 	case 502:
 	{
-		int i;
+		unsigned int i;
 		struct srvsvc_NetShareCtr502 *ctr502;
 
 		SRVSVC_CHECK_ADMIN_ACCESS;
@@ -1102,7 +1102,7 @@ static WERROR dcesrv_srvsvc_fill_share_info(struct share_info *info, int *count,
 					uint32_t csc_policy,
 					struct security_descriptor *sd)
 {
-	int i = 0;
+	unsigned int i = 0;
 
 	if (level == 501) {
 		info[i].name = SHARE_CSC_POLICY;
@@ -1383,7 +1383,8 @@ static WERROR dcesrv_srvsvc_NetShareCheck(struct dcesrv_call_state *dce_call, TA
 	struct share_config *scfg = NULL;
 	char *device;
 	const char **names;
-	int count, i;
+	int count;
+	unsigned int i;
 
 	*r->out.type = 0;
 
@@ -1833,8 +1834,8 @@ static WERROR dcesrv_srvsvc_NetShareEnum(struct dcesrv_call_state *dce_call, TAL
 	switch (r->in.info_ctr->level) {
 	case 0:
 	{
-		int i, y = 0;
-		int count;
+		unsigned int i, y = 0;
+		unsigned int count;
 		struct srvsvc_NetShareCtr0 *ctr0;
 
 		ctr0 = talloc(mem_ctx, struct srvsvc_NetShareCtr0);
@@ -1885,8 +1886,8 @@ static WERROR dcesrv_srvsvc_NetShareEnum(struct dcesrv_call_state *dce_call, TAL
 	}
 	case 1:
 	{
-		int i, y = 0;
-		int count;
+		unsigned int i, y = 0;
+		unsigned int count;
 		struct srvsvc_NetShareCtr1 *ctr1;
 
 		ctr1 = talloc(mem_ctx, struct srvsvc_NetShareCtr1);
@@ -1937,8 +1938,8 @@ static WERROR dcesrv_srvsvc_NetShareEnum(struct dcesrv_call_state *dce_call, TAL
 	}
 	case 2:
 	{
-		int i, y = 0;
-		int count;
+		unsigned int i, y = 0;
+		unsigned int count;
 		struct srvsvc_NetShareCtr2 *ctr2;
 
 		SRVSVC_CHECK_ADMIN_ACCESS;
@@ -1991,8 +1992,8 @@ static WERROR dcesrv_srvsvc_NetShareEnum(struct dcesrv_call_state *dce_call, TAL
 	}
 	case 502:
 	{
-		int i, y = 0;
-		int count;
+		unsigned int i, y = 0;
+		unsigned int count;
 		struct srvsvc_NetShareCtr502 *ctr502;
 
 		SRVSVC_CHECK_ADMIN_ACCESS;
diff --git a/source4/rpc_server/unixinfo/dcesrv_unixinfo.c b/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
index 0a1e9f6..2ef34ce 100644
--- a/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
+++ b/source4/rpc_server/unixinfo/dcesrv_unixinfo.c
@@ -195,7 +195,7 @@ static NTSTATUS dcesrv_unixinfo_GetPWUid(struct dcesrv_call_state *dce_call,
 				  TALLOC_CTX *mem_ctx,
 				  struct unixinfo_GetPWUid *r)
 {
-	int i;
+	unsigned int i;
 
 	*r->out.count = 0;
 
diff --git a/source4/torture/rpc/echo.c b/source4/torture/rpc/echo.c
index 2321500..e0ee8a5 100644
--- a/source4/torture/rpc/echo.c
+++ b/source4/torture/rpc/echo.c
@@ -289,9 +289,9 @@ static bool test_sleep(struct torture_context *tctx,
 					torture_comment(tctx, "Slept for %u seconds (reply takes %u.%06u seconds - ok)\n", 
 							r[i].out.result, (unsigned int)diff[i].tv_sec, (unsigned int)diff[i].tv_usec);
 				} else {
-						torture_comment(tctx, "(Failed) - Not async - Slept for %u seconds (but reply takes %u.%06u seconds)", 
-							r[i].out.result, (unsigned int)diff[i].tv_sec, (unsigned int)diff[i].tv_usec);
-					/* TODO: let the test fail here, when we support async rpc on ncacn_np */
+					torture_fail(tctx, talloc_asprintf(tctx,
+						     "(Failed) - Not async - Slept for %u seconds (but reply takes %u.%06u seconds)\n",
+						     r[i].out.result, (unsigned int)diff[i].tv_sec, (unsigned int)diff[i].tv_usec));
 				}
 			}
 		}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list