s3-epmd: Use rpc_setup_tcpip_sockets().
authorAndreas Schneider <asn@samba.org>
Tue, 5 Jul 2011 10:04:00 +0000 (12:04 +0200)
committerAndreas Schneider <asn@samba.org>
Mon, 1 Aug 2011 06:50:35 +0000 (08:50 +0200)
source3/rpc_server/epmd.c

index 6f3959b5b86163931e45b105556d8c55b7bce79e..d036b25bf73367be98993398ea2839ea25de46dd 100644 (file)
 
 #include "serverid.h"
 #include "ntdomain.h"
+#include "messages.h"
+
+#include "librpc/rpc/dcerpc_ep.h"
 #include "../librpc/gen_ndr/srv_epmapper.h"
 #include "rpc_server/rpc_server.h"
+#include "rpc_server/rpc_sock_helper.h"
 #include "rpc_server/epmapper/srv_epmapper.h"
-#include "messages.h"
 
 #define DAEMON_NAME "epmd"
 
 void start_epmd(struct tevent_context *ev_ctx,
                struct messaging_context *msg_ctx);
 
-static bool epmd_open_sockets(struct tevent_context *ev_ctx,
-                             struct messaging_context *msg_ctx)
-{
-       uint32_t num_ifs = iface_count();
-       uint16_t port;
-       uint32_t i;
-
-       if (lp_interfaces() && lp_bind_interfaces_only()) {
-               /*
-                * We have been given an interfaces line, and been told to only
-                * bind to those interfaces. Create a socket per interface and
-                * bind to only these.
-                */
-
-               /* Now open a listen socket for each of the interfaces. */
-               for(i = 0; i < num_ifs; i++) {
-                       const struct sockaddr_storage *ifss =
-                                       iface_n_sockaddr_storage(i);
-
-                       port = setup_dcerpc_ncacn_tcpip_socket(ev_ctx,
-                                                              msg_ctx,
-                                                              ifss,
-                                                              135);
-                       if (port == 0) {
-                               return false;
-                       }
-               }
-       } else {
-               const char *sock_addr = lp_socket_address();
-               const char *sock_ptr;
-               char *sock_tok;
-
-               if (strequal(sock_addr, "0.0.0.0") ||
-                   strequal(sock_addr, "::")) {
-#if HAVE_IPV6
-                       sock_addr = "::,0.0.0.0";
-#else
-                       sock_addr = "0.0.0.0";
-#endif
-               }
-
-               for (sock_ptr = sock_addr;
-                    next_token_talloc(talloc_tos(), &sock_ptr, &sock_tok, " \t,");
-                   ) {
-                       struct sockaddr_storage ss;
-
-                       /* open an incoming socket */
-                       if (!interpret_string_addr(&ss,
-                                                  sock_tok,
-                                                  AI_NUMERICHOST|AI_PASSIVE)) {
-                               continue;
-                       }
-
-                       port = setup_dcerpc_ncacn_tcpip_socket(ev_ctx,
-                                                              msg_ctx,
-                                                              &ss,
-                                                              135);
-                       if (port == 0) {
-                               return false;
-                       }
-               }
-       }
-
-       return true;
-}
-
 static void epmd_reopen_logs(void)
 {
        char *lfile = lp_logfile();
@@ -259,6 +196,16 @@ void start_epmd(struct tevent_context *ev_ctx,
                exit(1);
        }
 
+       status = rpc_setup_tcpip_sockets(ev_ctx,
+                                        msg_ctx,
+                                        &ndr_table_epmapper,
+                                        NULL,
+                                        135);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, ("Failed to open epmd tcpip sockets!\n"));
+               exit(1);
+       }
+
        ok = setup_dcerpc_ncalrpc_socket(ev_ctx,
                                         msg_ctx,
                                         "EPMAPPER",
@@ -268,12 +215,6 @@ void start_epmd(struct tevent_context *ev_ctx,
                exit(1);
        }
 
-       ok = epmd_open_sockets(ev_ctx, msg_ctx);
-       if (!ok) {
-               DEBUG(0, ("Failed to open epmd tcpip sockets!\n"));
-               exit(1);
-       }
-
        ok = setup_named_pipe_socket("epmapper", ev_ctx, msg_ctx);
        if (!ok) {
                DEBUG(0, ("Failed to open epmd named pipe!\n"));