s3-lib: If we create a pipe socket, don't start to listen.
authorAndreas Schneider <asn@samba.org>
Mon, 29 Aug 2011 07:49:22 +0000 (09:49 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Mon, 29 Aug 2011 11:21:43 +0000 (13:21 +0200)
The create_pipe_sock() function should only create the socket as the
name states and not start to listen on it too. We should start to listen
on in the individual places as we need different backlog values.

Autobuild-User: Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date: Mon Aug 29 13:21:43 CEST 2011 on sn-devel-104

source3/lib/util_sock.c
source3/libsmb/unexpected.c
source3/rpc_server/rpc_server.c
source3/winbindd/winbindd.c

index ebdd2c78f3de696e0a794ec8f1aa320b2593e914..9ade23c8bc7b68ebe2cba10122ac09d7758f1712 100644 (file)
@@ -1298,12 +1298,6 @@ int create_pipe_sock(const char *socket_dir,
                goto out_close;
        }
 
-       if (listen(sock, 5) == -1) {
-               DEBUG(0, ("listen failed on pipe socket %s: %s\n", path,
-                       strerror(errno)));
-               goto out_close;
-       }
-
        SAFE_FREE(path);
 
        umask(old_umask);
index 483d325d67f3bb3647fb6a1750a85e3825287c8e..f537b3d0a7347d56933d00e168232829919724c8 100644 (file)
@@ -72,6 +72,7 @@ NTSTATUS nb_packet_server_create(TALLOC_CTX *mem_ctx,
        struct nb_packet_server *result;
        struct tevent_fd *fde;
        NTSTATUS status;
+       int rc;
 
        result = talloc_zero(mem_ctx, struct nb_packet_server);
        if (result == NULL) {
@@ -87,6 +88,11 @@ NTSTATUS nb_packet_server_create(TALLOC_CTX *mem_ctx,
                status = map_nt_error_from_unix(errno);
                goto fail;
        }
+       rc = listen(result->listen_sock, 5);
+       if (rc < 0) {
+               status = map_nt_error_from_unix(errno);
+               goto fail;
+       }
        talloc_set_destructor(result, nb_packet_server_destructor);
 
        fde = tevent_add_fd(ev, result, result->listen_sock, TEVENT_FD_READ,
index c995e22ea05bb03ba0575dc0864fd8481c1b37e3..6b95419172b21732517d7d546268ea7bdd2d4dc2 100644 (file)
@@ -209,6 +209,7 @@ bool setup_named_pipe_socket(const char *pipe_name,
 {
        struct dcerpc_ncacn_listen_state *state;
        struct tevent_fd *fde;
+       int rc;
 
        state = talloc(ev_ctx, struct dcerpc_ncacn_listen_state);
        if (!state) {
@@ -225,6 +226,13 @@ bool setup_named_pipe_socket(const char *pipe_name,
                goto out;
        }
 
+       rc = listen(state->fd, 5);
+       if (rc < 0) {
+               DEBUG(0, ("Failed to listen on pipe socket %s: %s\n",
+                         pipe_name, strerror(errno)));
+               goto out;
+       }
+
        state->ev_ctx = ev_ctx;
        state->msg_ctx = msg_ctx;
 
@@ -852,6 +860,7 @@ bool setup_dcerpc_ncalrpc_socket(struct tevent_context *ev_ctx,
 {
        struct dcerpc_ncacn_listen_state *state;
        struct tevent_fd *fde;
+       int rc;
 
        state = talloc(ev_ctx, struct dcerpc_ncacn_listen_state);
        if (state == NULL) {
@@ -878,6 +887,13 @@ bool setup_dcerpc_ncalrpc_socket(struct tevent_context *ev_ctx,
                goto out;
        }
 
+       rc = listen(state->fd, 5);
+       if (rc < 0) {
+               DEBUG(0, ("Failed to listen on ncalrpc socket %s: %s\n",
+                         name, strerror(errno)));
+               goto out;
+       }
+
        state->ev_ctx = ev_ctx;
        state->msg_ctx = msg_ctx;
 
index cb9d70c5f38b627c399431ecb98af52827943231..b33328c8d34b541295bee91c5d36ba6662bad61f 100644 (file)
@@ -957,6 +957,7 @@ static bool winbindd_setup_listeners(void)
        struct winbindd_listen_state *pub_state = NULL;
        struct winbindd_listen_state *priv_state = NULL;
        struct tevent_fd *fde;
+       int rc;
 
        pub_state = talloc(winbind_event_context(),
                           struct winbindd_listen_state);
@@ -970,6 +971,10 @@ static bool winbindd_setup_listeners(void)
        if (pub_state->fd == -1) {
                goto failed;
        }
+       rc = listen(pub_state->fd, 5);
+       if (rc < 0) {
+               goto failed;
+       }
 
        fde = tevent_add_fd(winbind_event_context(), pub_state, pub_state->fd,
                            TEVENT_FD_READ, winbindd_listen_fde_handler,
@@ -992,6 +997,10 @@ static bool winbindd_setup_listeners(void)
        if (priv_state->fd == -1) {
                goto failed;
        }
+       rc = listen(priv_state->fd, 5);
+       if (rc < 0) {
+               goto failed;
+       }
 
        fde = tevent_add_fd(winbind_event_context(), priv_state,
                            priv_state->fd, TEVENT_FD_READ,