From: Timo Sirainen Date: Sun, 23 Feb 2003 10:45:46 +0000 (+0200) Subject: Keep list of the SSL proxies, so they're deinitialized properly if we have X-Git-Tag: 1.1.alpha1~4876 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3fad6a638c28a73588b34345efd160d5e4cf14c9;p=thirdparty%2Fdovecot%2Fcore.git Keep list of the SSL proxies, so they're deinitialized properly if we have to kill them. --HG-- branch : HEAD --- diff --git a/src/login-common/main.c b/src/login-common/main.c index 5c7af2b015..24275af5bf 100644 --- a/src/login-common/main.c +++ b/src/login-common/main.c @@ -212,12 +212,12 @@ static void main_deinit(void) if (io_listen != NULL) io_remove(io_listen); if (io_ssl_listen != NULL) io_remove(io_ssl_listen); + ssl_proxy_deinit(); + clients_deinit(); master_deinit(); auth_connection_deinit(); - ssl_proxy_deinit(); - closelog(); } diff --git a/src/login-common/ssl-proxy-openssl.c b/src/login-common/ssl-proxy-openssl.c index b8c89184e3..5a59a5ede5 100644 --- a/src/login-common/ssl-proxy-openssl.c +++ b/src/login-common/ssl-proxy-openssl.c @@ -37,6 +37,7 @@ struct ssl_proxy { }; static SSL_CTX *ssl_ctx; +static struct hash_table *ssl_proxies; static void plain_read(struct ssl_proxy *proxy); static void plain_write(struct ssl_proxy *proxy); @@ -317,6 +318,7 @@ int ssl_proxy_new(int fd) } main_ref(); + hash_insert(ssl_proxies, proxy, proxy); return sfd[1]; } @@ -325,6 +327,8 @@ static int ssl_proxy_destroy(struct ssl_proxy *proxy) if (--proxy->refcount > 0) return TRUE; + hash_remove(ssl_proxies, proxy); + SSL_free(proxy->ssl); (void)net_disconnect(proxy->fd_ssl); @@ -375,13 +379,25 @@ void ssl_proxy_init(void) keyfile, ssl_last_error()); } + ssl_proxies = hash_create(default_pool, default_pool, 0, NULL, NULL); ssl_initialized = TRUE; } +static void ssl_proxy_destroy_hash(void *key __attr_unused__, void *value, + void *context __attr_unused__) +{ + ssl_proxy_destroy(value); +} + void ssl_proxy_deinit(void) { - if (ssl_initialized) - SSL_CTX_free(ssl_ctx); + if (!ssl_initialized) + return; + + SSL_CTX_free(ssl_ctx); + + hash_foreach(ssl_proxies, ssl_proxy_destroy_hash, NULL); + hash_destroy(ssl_proxies); } #endif