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 <me...@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 <me...@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 <mwallnoe...@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 <mwallnoe...@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 <mwallnoe...@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 <mwallnoe...@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 <mwallnoe...@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

Reply via email to