s3-rpc_server: Start the Endpoint Mapper Dameon if enabled.
authorAndreas Schneider <asn@samba.org>
Thu, 24 Feb 2011 11:06:54 +0000 (12:06 +0100)
committerGünther Deschner <gd@samba.org>
Tue, 8 Mar 2011 10:41:29 +0000 (11:41 +0100)
Endpoint Mapper is still disabled by default!

Signed-off-by: Günther Deschner <gd@samba.org>
source3/rpc_server/rpc_ep_setup.c
source3/smbd/server.c

index 85021b3c2225a7390361c7b73956e4241ed3835a..3fdd2f1eebde590b472a179cff885a0fd5d914a7 100644 (file)
@@ -61,12 +61,12 @@ static uint16_t _open_sockets(struct tevent_context *ev_ctx,
        uint16_t p = 0;
        const char *rpcsrv_type;
 
-       /* TODO: Remove this if we enable epmapper */
        rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
-                                          "rpc_server", "epmapper",
+                                          "rpc_server",
+                                          "epmapper",
                                           "none");
        if (StrCaseCmp(rpcsrv_type, "none") == 0) {
-               return 1;
+               return (uint16_t) -1;
        }
 
        if (lp_interfaces() && lp_bind_interfaces_only()) {
@@ -135,7 +135,8 @@ static NTSTATUS _rpc_ep_register(struct tevent_context *ev_ctx,
 
        /* start endpoint mapper only if enabled */
        rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
-                                          "rpc_server", "epmapper",
+                                          "rpc_server",
+                                          "epmapper",
                                           "none");
        if (StrCaseCmp(rpcsrv_type, "none") == 0) {
                return NT_STATUS_OK;
@@ -168,7 +169,8 @@ static NTSTATUS _rpc_ep_unregister(const struct ndr_interface_table *iface)
 
        /* start endpoint mapper only if enabled */
        rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
-                                          "rpc_server", "epmapper",
+                                          "rpc_server",
+                                          "epmapper",
                                           "none");
        if (StrCaseCmp(rpcsrv_type, "none") == 0) {
                return NT_STATUS_OK;
@@ -600,7 +602,8 @@ bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
 
        /* start endpoint mapper only if enabled */
        rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
-                                          "rpc_server", "epmapper",
+                                          "rpc_server",
+                                          "epmapper",
                                           "none");
        if (StrCaseCmp(rpcsrv_type, "embedded") == 0) {
                epmapper_cb.init         = epmapper_init_cb;
index c06eaa12e79834fc02df7e24794f108e2ad1a054..5d2abc0bd9f8225142575dadda392458ba12068f 100644 (file)
@@ -37,6 +37,9 @@
 #include "printing.h"
 #include "serverid.h"
 
+extern void start_epmd(struct tevent_context *ev_ctx,
+                      struct messaging_context *msg_ctx);
+
 #ifdef WITH_DFS
 extern int dcelogin_atmost_once;
 #endif /* WITH_DFS */
@@ -1208,6 +1211,18 @@ extern void build_options(bool screen);
                return -1;
        }
 
+       if (is_daemon && !interactive) {
+               const char *rpcsrv_type;
+
+               rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
+                                                  "rpc_server", "epmapper",
+                                                  "none");
+               if (StrCaseCmp(rpcsrv_type, "daemon") == 0) {
+                       start_epmd(smbd_event_context(),
+                                  smbd_server_conn->msg_ctx);
+               }
+       }
+
        if (!dcesrv_ep_setup(smbd_event_context(), smbd_server_conn->msg_ctx)) {
                exit(1);
        }