diff options
Diffstat (limited to 'source3/winbindd')
-rw-r--r-- | source3/winbindd/winbindd.c | 51 | ||||
-rw-r--r-- | source3/winbindd/winbindd_proto.h | 1 |
2 files changed, 22 insertions, 30 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( diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h index 8ebbb2a842..1b086734bc 100644 --- a/source3/winbindd/winbindd_proto.h +++ b/source3/winbindd/winbindd_proto.h @@ -44,7 +44,6 @@ void debug_unix_user_token(int dbg_class, int dbg_lev, uid_t uid, gid_t gid, struct event_context *winbind_event_context(void); /* The following definitions come from winbindd/winbindd.c */ -void winbindd_accepted_new_connection(int accepted_sock, bool privileged); struct messaging_context *winbind_messaging_context(void); void request_error(struct winbindd_cli_state *state); void request_ok(struct winbindd_cli_state *state); |