]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
*-login: SSL connections didn't get closed when the client got destroyed.
authorTimo Sirainen <tss@iki.fi>
Wed, 7 May 2014 14:26:21 +0000 (17:26 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 7 May 2014 14:26:21 +0000 (17:26 +0300)
src/login-common/client-common.c
src/login-common/ssl-proxy-openssl.c
src/login-common/ssl-proxy.h

index 8b54e14d192396640ec40bb17336744bb99672cd..e882eb43f88cc0e5480df0aa45e3d136862e2d96 100644 (file)
@@ -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)
index 272c67c43d306df07e80c6d6daa0eb53151f7a2b..92e5dcb4c3bdeb37ba24840d671772212d3af5a0 100644 (file)
@@ -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;
index 87ede6d5ffc4d598ba0c031da9fedf20ff18dd85..2cb79cb198be5859b29accb595661d0d40693828 100644 (file)
@@ -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 */