The branch, master has been updated
       via  fb3e4d2 s3-rpc_server: Remove unused _rpc_ep_register.
       via  8df4f4f s3-rpc_server: Use the new endpoint register functions.
       via  71f613e s3-rpc_server: Add tevent based endpoint setup functions.
       via  133ed1c s3-rpc_server: Change irritating debug message.
       via  0380423 s3-rpc_client: Don't ask endpoint mapper for its own port.
       via  b181cd8 s3-smbd: Increase debug level von context messages.
       via  d4867ef tevent: Fixed tevent_wakeup_send code example.
      from  9728b5a librpc/ndr use hyper for uid_t/gid_t rather than udlong

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


- Log -----------------------------------------------------------------
commit fb3e4d2be559fe56cde5d95c3aad4552d179e72b
Author: Andreas Schneider <[email protected]>
Date:   Tue Mar 8 18:25:04 2011 +0100

    s3-rpc_server: Remove unused _rpc_ep_register.
    
    Autobuild-User: Andreas Schneider <[email protected]>
    Autobuild-Date: Wed Mar  9 10:32:32 CET 2011 on sn-devel-104

commit 8df4f4fd410ab3069e441c823cb518713e585186
Author: Andreas Schneider <[email protected]>
Date:   Tue Mar 8 18:00:19 2011 +0100

    s3-rpc_server: Use the new endpoint register functions.

commit 71f613e9d52c6667700b70a0fe1edf14d7796958
Author: Andreas Schneider <[email protected]>
Date:   Tue Mar 8 16:02:16 2011 +0100

    s3-rpc_server: Add tevent based endpoint setup functions.

commit 133ed1cc6445bb6b734451a5eaf5939d5eb100b2
Author: Andreas Schneider <[email protected]>
Date:   Tue Mar 8 16:10:07 2011 +0100

    s3-rpc_server: Change irritating debug message.

commit 038042363a41b685f73cdc9ec6413c942c5dd94a
Author: Andreas Schneider <[email protected]>
Date:   Tue Mar 8 16:33:50 2011 +0100

    s3-rpc_client: Don't ask endpoint mapper for its own port.

commit b181cd8465e01fb7334d49725b5deee35a61d68c
Author: Andreas Schneider <[email protected]>
Date:   Tue Mar 8 17:47:36 2011 +0100

    s3-smbd: Increase debug level von context messages.

commit d4867ef8389a3767bba66d76511da496cb8c5495
Author: Andreas Schneider <[email protected]>
Date:   Tue Mar 8 17:04:44 2011 +0100

    tevent: Fixed tevent_wakeup_send code example.

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

Summary of changes:
 lib/tevent/tevent.h               |    2 +-
 source3/lib/privileges.c          |    2 +-
 source3/rpc_client/cli_pipe.c     |    6 ++
 source3/rpc_server/rpc_ep_setup.c |  154 +++++++++++++++++++++++++++++--------
 source3/rpc_server/rpc_server.c   |   14 ++--
 source3/smbd/sec_ctx.c            |   12 ++--
 source3/smbd/uid.c                |    2 +-
 7 files changed, 145 insertions(+), 47 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/tevent/tevent.h b/lib/tevent/tevent.h
index d67e2b0..665c491 100644
--- a/lib/tevent/tevent.h
+++ b/lib/tevent/tevent.h
@@ -1130,7 +1130,7 @@ void tevent_req_received(struct tevent_req *req);
  *
  * Example:
  * @code
- *   static my_callback_wakeup_done(tevent_req *req)
+ *   static void my_callback_wakeup_done(tevent_req *subreq)
  *   {
  *     struct tevent_req *req = tevent_req_callback_data(subreq,
  *                              struct tevent_req);
diff --git a/source3/lib/privileges.c b/source3/lib/privileges.c
index 00dfefe..3826424 100644
--- a/source3/lib/privileges.c
+++ b/source3/lib/privileges.c
@@ -91,7 +91,7 @@ static bool get_privileges( const struct dom_sid *sid, 
uint64_t *mask )
        data = dbwrap_fetch_bystring( db, talloc_tos(), keystr );
 
        if ( !data.dptr ) {
-               DEBUG(3, ("get_privileges: No privileges assigned to SID "
+               DEBUG(4, ("get_privileges: No privileges assigned to SID "
                          "[%s]\n", sid_string_dbg(sid)));
                return False;
        }
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index 26a0054..ebbe849 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -2515,6 +2515,12 @@ static NTSTATUS rpc_pipe_get_tcp_port(const char *host,
                goto done;
        }
 
+       if (ndr_syntax_id_equal(abstract_syntax,
+                               &ndr_table_epmapper.syntax_id)) {
+               *pport = 135;
+               return NT_STATUS_OK;
+       }
+
        /* open the connection to the endpoint mapper */
        status = rpc_pipe_open_tcp_port(tmp_ctx, host, 135,
                                        &ndr_table_epmapper.syntax_id,
diff --git a/source3/rpc_server/rpc_ep_setup.c 
b/source3/rpc_server/rpc_ep_setup.c
index 32afa1d..3731915 100644
--- a/source3/rpc_server/rpc_ep_setup.c
+++ b/source3/rpc_server/rpc_ep_setup.c
@@ -123,28 +123,23 @@ static uint16_t _open_sockets(struct tevent_context 
*ev_ctx,
        return p;
 }
 
-static NTSTATUS _rpc_ep_register(struct tevent_context *ev_ctx,
-                                struct messaging_context *msg_ctx,
-                                const struct ndr_interface_table *iface,
-                                const char *name,
-                                uint16_t port)
+static NTSTATUS _rpc_ep_unregister(const struct ndr_interface_table *iface)
 {
        struct dcerpc_binding_vector *v = NULL;
        NTSTATUS status;
 
        status = dcerpc_binding_vector_create(talloc_tos(),
                                              iface,
-                                             port,
-                                             name,
+                                             0,
+                                             NULL,
                                              &v);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
 
-       status = dcerpc_ep_register(iface,
-                                   v,
-                                   &iface->syntax_id.uuid,
-                                   name);
+       status = dcerpc_ep_unregister(iface,
+                                     v,
+                                     &iface->syntax_id.uuid);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
@@ -152,23 +147,120 @@ static NTSTATUS _rpc_ep_register(struct tevent_context 
*ev_ctx,
        return status;
 }
 
-static NTSTATUS _rpc_ep_unregister(const struct ndr_interface_table *iface)
+static void rpc_ep_setup_register_loop(struct tevent_req *subreq);
+static NTSTATUS rpc_ep_setup_try_register(struct tevent_context *ev_ctx,
+                                         struct messaging_context *msg_ctx,
+                                         const struct ndr_interface_table 
*iface,
+                                         const char *name,
+                                         uint16_t port);
+
+struct rpc_ep_regsiter_state {
+       uint32_t wait_time;
+
+       struct tevent_context *ev_ctx;
+       struct messaging_context *msg_ctx;
+
+       const struct ndr_interface_table *iface;
+
+       const char *ncalrpc;
+       uint16_t port;
+};
+
+static NTSTATUS rpc_ep_setup_register(struct tevent_context *ev_ctx,
+                                     struct messaging_context *msg_ctx,
+                                     const struct ndr_interface_table *iface,
+                                     const char *ncalrpc,
+                                     uint16_t port)
+{
+       struct rpc_ep_regsiter_state *state;
+       struct tevent_req *req;
+
+       state = talloc(ev_ctx, struct rpc_ep_regsiter_state);
+       if (state == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       state->wait_time = 1;
+       state->ev_ctx = ev_ctx;
+       state->msg_ctx = msg_ctx;
+       state->iface = iface;
+       state->ncalrpc = talloc_strdup(state, ncalrpc);
+       state->port = port;
+
+       req = tevent_wakeup_send(state, ev_ctx, timeval_current_ofs(1, 0));
+       if (tevent_req_nomem(state, req)) {
+               talloc_free(state);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       tevent_req_set_callback(req, rpc_ep_setup_register_loop, state);
+
+       return NT_STATUS_OK;
+}
+
+static void rpc_ep_setup_register_loop(struct tevent_req *req)
+{
+       struct rpc_ep_regsiter_state *state =
+               tevent_req_callback_data(req, struct rpc_ep_regsiter_state);
+       NTSTATUS status;
+       bool ok;
+
+       ok = tevent_wakeup_recv(req);
+       TALLOC_FREE(req);
+       if (!ok) {
+               return;
+       }
+
+       status = rpc_ep_setup_try_register(state->ev_ctx,
+                                          state->msg_ctx,
+                                          state->iface,
+                                          state->ncalrpc,
+                                          state->port);
+       if (NT_STATUS_IS_OK(status)) {
+               talloc_free(state);
+               return;
+       }
+
+       state->wait_time = state->wait_time * 2;
+       if (state->wait_time > 16) {
+               talloc_free(state);
+               return;
+       }
+
+       req = tevent_wakeup_send(state,
+                                state->ev_ctx,
+                                timeval_current_ofs(state->wait_time, 0));
+       if (tevent_req_nomem(state, req)) {
+               talloc_free(state);
+               return;
+       }
+
+       tevent_req_set_callback(req, rpc_ep_setup_register_loop, state);
+       return;
+}
+
+static NTSTATUS rpc_ep_setup_try_register(struct tevent_context *ev_ctx,
+                                         struct messaging_context *msg_ctx,
+                                         const struct ndr_interface_table 
*iface,
+                                         const char *name,
+                                         uint16_t port)
 {
        struct dcerpc_binding_vector *v = NULL;
        NTSTATUS status;
 
        status = dcerpc_binding_vector_create(talloc_tos(),
                                              iface,
-                                             0,
-                                             NULL,
+                                             port,
+                                             name,
                                              &v);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
 
-       status = dcerpc_ep_unregister(iface,
-                                     v,
-                                     &iface->syntax_id.uuid);
+       status = dcerpc_ep_register(iface,
+                                   v,
+                                   &iface->syntax_id.uuid,
+                                   name);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
@@ -227,7 +319,7 @@ static bool winreg_init_cb(void *ptr)
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                                ep_ctx->msg_ctx,
                                                &ndr_table_winreg,
                                                pipe_name,
@@ -297,7 +389,7 @@ static bool srvsvc_init_cb(void *ptr)
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_srvsvc,
                                          pipe_name,
@@ -367,7 +459,7 @@ static bool lsarpc_init_cb(void *ptr)
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_lsarpc,
                                          pipe_name,
@@ -437,7 +529,7 @@ static bool samr_init_cb(void *ptr)
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_samr,
                                          pipe_name,
@@ -507,7 +599,7 @@ static bool netlogon_init_cb(void *ptr)
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_netlogon,
                                          pipe_name,
@@ -566,7 +658,7 @@ static bool spoolss_init_cb(void *ptr)
            StrCaseCmp(rpcsrv_type, "daemon") == 0) {
                NTSTATUS status;
 
-               status =_rpc_ep_register(ep_ctx->ev_ctx,
+               status =rpc_ep_setup_register(ep_ctx->ev_ctx,
                                         ep_ctx->msg_ctx,
                                         &ndr_table_spoolss,
                                         "spoolss",
@@ -627,7 +719,7 @@ static bool svcctl_init_cb(void *ptr)
            StrCaseCmp(rpcsrv_type, "daemon") == 0) {
                NTSTATUS status;
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_svcctl,
                                          "svcctl",
@@ -678,7 +770,7 @@ static bool ntsvcs_init_cb(void *ptr)
            StrCaseCmp(rpcsrv_type, "daemon") == 0) {
                NTSTATUS status;
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_ntsvcs,
                                          "ntsvcs",
@@ -734,7 +826,7 @@ static bool eventlog_init_cb(void *ptr)
            StrCaseCmp(rpcsrv_type, "daemon") == 0) {
                NTSTATUS status;
 
-               status =_rpc_ep_register(ep_ctx->ev_ctx,
+               status =rpc_ep_setup_register(ep_ctx->ev_ctx,
                                         ep_ctx->msg_ctx,
                                         &ndr_table_eventlog,
                                         "eventlog",
@@ -784,7 +876,7 @@ static bool initshutdown_init_cb(void *ptr)
            StrCaseCmp(rpcsrv_type, "daemon") == 0) {
                NTSTATUS status;
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_initshutdown,
                                          "initshutdown",
@@ -843,7 +935,7 @@ static bool rpcecho_init_cb(void *ptr) {
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_rpcecho,
                                          "rpcecho",
@@ -913,7 +1005,7 @@ static bool netdfs_init_cb(void *ptr)
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_netdfs,
                                          pipe_name,
@@ -982,7 +1074,7 @@ static bool dssetup_init_cb(void *ptr)
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_dssetup,
                                          "dssetup",
@@ -1050,7 +1142,7 @@ static bool wkssvc_init_cb(void *ptr)
                        return false;
                }
 
-               status = _rpc_ep_register(ep_ctx->ev_ctx,
+               status = rpc_ep_setup_register(ep_ctx->ev_ctx,
                                          ep_ctx->msg_ctx,
                                          &ndr_table_wkssvc,
                                          "wkssvc",
diff --git a/source3/rpc_server/rpc_server.c b/source3/rpc_server/rpc_server.c
index 6f3d72d..974ecee 100644
--- a/source3/rpc_server/rpc_server.c
+++ b/source3/rpc_server/rpc_server.c
@@ -1215,7 +1215,6 @@ static void dcerpc_ncacn_packet_process(struct tevent_req 
*subreq)
        status = dcerpc_read_ncacn_packet_recv(subreq, ncacn_conn, &pkt, 
&recv_buffer);
        TALLOC_FREE(subreq);
        if (!NT_STATUS_IS_OK(status)) {
-               DEBUG(3, ("Failed to receive ncacn packet!\n"));
                goto fail;
        }
 
@@ -1337,9 +1336,8 @@ static void dcerpc_ncacn_packet_process(struct tevent_req 
*subreq)
        return;
 
 fail:
-       DEBUG(2, ("Fatal error(%s). "
-                 "Terminating client(%s) connection!\n",
-                 nt_errstr(status), ncacn_conn->client_name));
+       DEBUG(3, ("Terminating client(%s) connection! - '%s'\n",
+                 ncacn_conn->client_name, nt_errstr(status)));
 
        /* Terminate client connection */
        talloc_free(ncacn_conn);
@@ -1350,6 +1348,7 @@ static void dcerpc_ncacn_packet_done(struct tevent_req 
*subreq)
 {
        struct dcerpc_ncacn_conn *ncacn_conn =
                tevent_req_callback_data(subreq, struct dcerpc_ncacn_conn);
+       NTSTATUS status = NT_STATUS_OK;
        int sys_errno;
        int rc;
 
@@ -1357,6 +1356,7 @@ static void dcerpc_ncacn_packet_done(struct tevent_req 
*subreq)
        TALLOC_FREE(subreq);
        if (rc < 0) {
                DEBUG(2, ("Writev failed!\n"));
+               status = map_nt_error_from_unix(sys_errno);
                goto fail;
        }
 
@@ -1373,7 +1373,7 @@ static void dcerpc_ncacn_packet_done(struct tevent_req 
*subreq)
                                               ncacn_conn->tstream);
        if (subreq == NULL) {
                DEBUG(2, ("Failed to start receving packets\n"));
-               sys_errno = ENOMEM;
+               status = NT_STATUS_NO_MEMORY;
                goto fail;
        }
 
@@ -1381,8 +1381,8 @@ static void dcerpc_ncacn_packet_done(struct tevent_req 
*subreq)
        return;
 
 fail:
-       DEBUG(2, ("Fatal error(%s). Terminating client(%s) connection!\n",
-                 strerror(sys_errno), ncacn_conn->client_name));
+       DEBUG(3, ("Terminating client(%s) connection! - '%s'\n",
+                 ncacn_conn->client_name, nt_errstr(status)));
 
        /* Terminate client connection */
        talloc_free(ncacn_conn);
diff --git a/source3/smbd/sec_ctx.c b/source3/smbd/sec_ctx.c
index 9e409de..9eed0bd 100644
--- a/source3/smbd/sec_ctx.c
+++ b/source3/smbd/sec_ctx.c
@@ -168,11 +168,11 @@ static int get_current_groups(gid_t gid, uint32_t 
*p_ngroups, gid_t **p_groups)
        (*p_ngroups) = ngroups;
        (*p_groups) = groups;
 
-       DEBUG( 3, ( "get_current_groups: user is in %u groups: ", ngroups));
+       DEBUG( 4, ( "get_current_groups: user is in %u groups: ", ngroups));
        for (i = 0; i < ngroups; i++ ) {
-               DEBUG( 3, ( "%s%d", (i ? ", " : ""), (int)groups[i] ) );
+               DEBUG( 4, ( "%s%d", (i ? ", " : ""), (int)groups[i] ) );
        }
-       DEBUG( 3, ( "\n" ) );
+       DEBUG( 4, ( "\n" ) );
 
        return ngroups;
 
@@ -207,7 +207,7 @@ bool push_sec_ctx(void)
        ctx_p->ut.uid = geteuid();
        ctx_p->ut.gid = getegid();
 
-       DEBUG(3, ("push_sec_ctx(%u, %u) : sec_ctx_stack_ndx = %d\n", 
+       DEBUG(4, ("push_sec_ctx(%u, %u) : sec_ctx_stack_ndx = %d\n", 
                  (unsigned int)ctx_p->ut.uid, (unsigned int)ctx_p->ut.gid, 
sec_ctx_stack_ndx ));
 
        ctx_p->token = dup_nt_token(NULL,
@@ -307,7 +307,7 @@ void set_sec_ctx(uid_t uid, gid_t gid, int ngroups, gid_t 
*groups, struct securi
 
        /* Set the security context */
 
-       DEBUG(3, ("setting sec ctx (%u, %u) - sec_ctx_stack_ndx = %d\n", 
+       DEBUG(4, ("setting sec ctx (%u, %u) - sec_ctx_stack_ndx = %d\n", 
                (unsigned int)uid, (unsigned int)gid, sec_ctx_stack_ndx));
 
        security_token_debug(DBGC_CLASS, 5, token);
@@ -415,7 +415,7 @@ bool pop_sec_ctx(void)
        current_user.ut.groups = prev_ctx_p->ut.groups;
        current_user.nt_user_token = prev_ctx_p->token;
 
-       DEBUG(3, ("pop_sec_ctx (%u, %u) - sec_ctx_stack_ndx = %d\n", 
+       DEBUG(4, ("pop_sec_ctx (%u, %u) - sec_ctx_stack_ndx = %d\n", 
                (unsigned int)geteuid(), (unsigned int)getegid(), 
sec_ctx_stack_ndx));
 
        return True;
diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c
index 9a6b06d..3c4b574 100644
--- a/source3/smbd/uid.c
+++ b/source3/smbd/uid.c
@@ -427,7 +427,7 @@ static void push_conn_ctx(void)
        ctx_p->conn = current_user.conn;
        ctx_p->vuid = current_user.vuid;
 
-       DEBUG(3, ("push_conn_ctx(%u) : conn_ctx_stack_ndx = %d\n",
+       DEBUG(4, ("push_conn_ctx(%u) : conn_ctx_stack_ndx = %d\n",
                (unsigned int)ctx_p->vuid, conn_ctx_stack_ndx ));
 
        conn_ctx_stack_ndx++;


-- 
Samba Shared Repository

Reply via email to