diff --git a/include/client.h b/include/client.h index ddf64375..d67c1e84 100644 --- a/include/client.h +++ b/include/client.h @@ -581,7 +581,6 @@ extern int is_remote_connect(struct Client *); extern void init_client(void); extern struct Client *make_client(struct Client *from); extern void free_pre_client(struct Client *client); -extern void free_client(struct Client *client); extern int exit_client(struct Client *, struct Client *, struct Client *, const char *); diff --git a/src/client.c b/src/client.c index 1b2567f8..262fcc0a 100644 --- a/src/client.c +++ b/src/client.c @@ -267,7 +267,7 @@ free_local_client(struct Client *client_p) client_p->localClient = NULL; } -void +static void free_client(struct Client *client_p) { s_assert(NULL != client_p); diff --git a/src/listener.c b/src/listener.c index 616b45ef..9a814583 100644 --- a/src/listener.c +++ b/src/listener.c @@ -474,24 +474,7 @@ add_connection(struct Listener *listener, rb_fde_t *F, struct sockaddr *sai, str * the client has already been checked out in accept_connection */ new_client = make_client(NULL); - - if (listener->ssl) - { - rb_fde_t *xF[2]; - if(rb_socketpair(AF_UNIX, SOCK_STREAM, 0, &xF[0], &xF[1], "Incoming ssld Connection") == -1) - { - free_client(new_client); - return; - } - new_client->localClient->ssl_ctl = start_ssld_accept(F, xF[1], new_client->localClient->connid); /* this will close F for us */ - if(new_client->localClient->ssl_ctl == NULL) - { - free_client(new_client); - return; - } - F = xF[0]; - SetSSL(new_client); - } + new_client->localClient->F = F; memcpy(&new_client->localClient->ip, sai, sizeof(struct rb_sockaddr_storage)); memcpy(&new_client->preClient->lip, lai, sizeof(struct rb_sockaddr_storage)); @@ -503,10 +486,29 @@ add_connection(struct Listener *listener, rb_fde_t *F, struct sockaddr *sai, str rb_inet_ntop_sock((struct sockaddr *)&new_client->localClient->ip, new_client->sockhost, sizeof(new_client->sockhost)); - rb_strlcpy(new_client->host, new_client->sockhost, sizeof(new_client->host)); - new_client->localClient->F = F; + if (listener->ssl) + { + rb_fde_t *xF[2]; + if(rb_socketpair(AF_UNIX, SOCK_STREAM, 0, &xF[0], &xF[1], "Incoming ssld Connection") == -1) + { + SetIOError(new_client); + exit_client(new_client, new_client, new_client, "Fatal Error"); + return; + } + new_client->localClient->ssl_ctl = start_ssld_accept(F, xF[1], new_client->localClient->connid); /* this will close F for us */ + if(new_client->localClient->ssl_ctl == NULL) + { + SetIOError(new_client); + exit_client(new_client, new_client, new_client, "Service Unavailable"); + return; + } + F = xF[0]; + new_client->localClient->F = F; + SetSSL(new_client); + } + new_client->localClient->listener = listener; ++listener->ref_count;