[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