From: Timo Sirainen Date: Wed, 7 May 2014 14:26:21 +0000 (+0300) Subject: *-login: SSL connections didn't get closed when the client got destroyed. X-Git-Tag: 2.2.13.rc1~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6da2d4faed507f513c68b94bb56a13caeeb3ff4a;p=thirdparty%2Fdovecot%2Fcore.git *-login: SSL connections didn't get closed when the client got destroyed. --- diff --git a/src/login-common/client-common.c b/src/login-common/client-common.c index 8b54e14d19..e882eb43f8 100644 --- a/src/login-common/client-common.c +++ b/src/login-common/client-common.c @@ -171,6 +171,8 @@ void client_destroy(struct client *client, const char *reason) last_client = client->prev; DLLIST_REMOVE(&clients, client); + if (!client->login_success && client->ssl_proxy != NULL) + ssl_proxy_destroy(client->ssl_proxy); if (client->input != NULL) i_stream_close(client->input); if (client->output != NULL) diff --git a/src/login-common/ssl-proxy-openssl.c b/src/login-common/ssl-proxy-openssl.c index 272c67c43d..92e5dcb4c3 100644 --- a/src/login-common/ssl-proxy-openssl.c +++ b/src/login-common/ssl-proxy-openssl.c @@ -116,7 +116,6 @@ static void plain_read(struct ssl_proxy *proxy); static void ssl_read(struct ssl_proxy *proxy); static void ssl_write(struct ssl_proxy *proxy); static void ssl_step(struct ssl_proxy *proxy); -static void ssl_proxy_destroy(struct ssl_proxy *proxy); static void ssl_proxy_unref(struct ssl_proxy *proxy); static struct ssl_server_context * @@ -807,7 +806,7 @@ static void ssl_proxy_unref(struct ssl_proxy *proxy) i_free(proxy); } -static void ssl_proxy_destroy(struct ssl_proxy *proxy) +void ssl_proxy_destroy(struct ssl_proxy *proxy) { if (proxy->destroyed) return; diff --git a/src/login-common/ssl-proxy.h b/src/login-common/ssl-proxy.h index 87ede6d5ff..2cb79cb198 100644 --- a/src/login-common/ssl-proxy.h +++ b/src/login-common/ssl-proxy.h @@ -34,6 +34,7 @@ const char *ssl_proxy_get_last_error(const struct ssl_proxy *proxy) ATTR_PURE; const char *ssl_proxy_get_security_string(struct ssl_proxy *proxy); const char *ssl_proxy_get_compression(struct ssl_proxy *proxy); const char *ssl_proxy_get_cert_error(struct ssl_proxy *proxy); +void ssl_proxy_destroy(struct ssl_proxy *proxy); void ssl_proxy_free(struct ssl_proxy **proxy); /* Return number of active SSL proxies */