]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:rpc_server: Initialize epmd connection endpoints
authorSamuel Cabrero <scabrero@suse.de>
Wed, 27 Feb 2019 13:42:07 +0000 (14:42 +0100)
committerSamuel Cabrero <scabrero@sn-devel-184>
Fri, 20 Mar 2020 15:36:33 +0000 (15:36 +0000)
Signed-off-by: Samuel Cabrero <scabrero@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/rpc_server/epmd.c

index 952ad4f29e5868f47fdd60cb28536fea2ada977f..148a7e4655decafecaa05092ecd82527e3809f69 100644 (file)
@@ -31,6 +31,7 @@
 #include "librpc/gen_ndr/ndr_epmapper_scompat.h"
 
 #include "rpc_server/rpc_server.h"
+#include "rpc_server/rpc_service_setup.h"
 #include "rpc_server/rpc_sock_helper.h"
 #include "rpc_server/epmapper/srv_epmapper.h"
 #include "rpc_server/epmd.h"
@@ -138,6 +139,7 @@ void start_epmd(struct tevent_context *ev_ctx,
        pid_t pid;
        int rc;
        const struct dcesrv_endpoint_server *ep_server = NULL;
+       struct dcesrv_endpoint *e = NULL;
 
        DEBUG(1, ("Forking Endpoint Mapper Daemon\n"));
 
@@ -204,6 +206,38 @@ void start_epmd(struct tevent_context *ev_ctx,
                exit(1);
        }
 
+       DBG_INFO("Initializing DCE/RPC connection endpoints\n");
+
+       for (e = dce_ctx->endpoint_list; e; e = e->next) {
+               enum dcerpc_transport_t transport =
+                       dcerpc_binding_get_transport(e->ep_description);
+               dcerpc_ncacn_termination_fn term_fn = NULL;
+
+               if (transport == NCACN_HTTP) {
+                       continue;
+               }
+
+               if (transport == NCALRPC) {
+                       term_fn = srv_epmapper_delete_endpoints;
+               }
+
+               status = dcesrv_setup_endpoint_sockets(ev_ctx,
+                                                      msg_ctx,
+                                                      dce_ctx,
+                                                      e,
+                                                      NULL, /* binding vector */
+                                                      term_fn,
+                                                      NULL); /* termination_data */
+               if (!NT_STATUS_IS_OK(status)) {
+                       char *ep_string = dcerpc_binding_string(
+                                       dce_ctx, e->ep_description);
+                       DBG_ERR("Failed to setup endpoint '%s': %s\n",
+                               ep_string, nt_errstr(status));
+                       TALLOC_FREE(ep_string);
+                       exit(1);
+               }
+       }
+
        status = dcesrv_setup_ncacn_ip_tcp_sockets(ev_ctx,
                                                   msg_ctx,
                                                   &ndr_table_epmapper,