diff options
Diffstat (limited to 'source3/winbindd/winbindd.c')
-rw-r--r-- | source3/winbindd/winbindd.c | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index 1c87a14ef6..5e041fb57b 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -763,23 +763,40 @@ void request_ok(struct winbindd_cli_state *state) /* Process a new connection by adding it to the client connection list */ -void winbindd_accepted_new_connection(int accepted_sock, bool privileged) +static void new_connection(int listen_sock, bool privileged) { + struct sockaddr_un sunaddr; struct winbindd_cli_state *state; struct tevent_req *req; + socklen_t len; + int sock; + + /* Accept connection */ + + len = sizeof(sunaddr); + + do { + sock = accept(listen_sock, (struct sockaddr *)(void *)&sunaddr, + &len); + } while (sock == -1 && errno == EINTR); + + if (sock == -1) + return; + + DEBUG(6,("accepted socket %d\n", sock)); /* Create new connection structure */ if ((state = TALLOC_ZERO_P(NULL, struct winbindd_cli_state)) == NULL) { - close(accepted_sock); + close(sock); return; } - state->sock = accepted_sock; + state->sock = sock; state->out_queue = tevent_queue_create(state, "winbind client reply"); if (state->out_queue == NULL) { - close(accepted_sock); + close(sock); TALLOC_FREE(state); return; } @@ -792,40 +809,16 @@ void winbindd_accepted_new_connection(int accepted_sock, bool privileged) WINBINDD_MAX_EXTRA_DATA); if (req == NULL) { TALLOC_FREE(state); - close(accepted_sock); + close(sock); return; } tevent_req_set_callback(req, winbind_client_request_read, state); /* Add to connection list */ - /* Once the client is added here, we can be sure something will close it eventually */ winbindd_add_client(state); } -static void new_connection(int listen_sock, bool privileged) -{ - struct sockaddr_un sunaddr; - socklen_t len; - int sock; - - /* Accept connection */ - - len = sizeof(sunaddr); - - do { - sock = accept(listen_sock, (struct sockaddr *)(void *)&sunaddr, - &len); - } while (sock == -1 && errno == EINTR); - - if (sock == -1) - return; - - DEBUG(6,("accepted socket %d\n", sock)); - - winbindd_accepted_new_connection(sock, privileged); -} - static void winbind_client_request_read(struct tevent_req *req) { struct winbindd_cli_state *state = tevent_req_callback_data( |