[dovecot-cvs] dovecot/src/login-common main.c,1.4,1.5 ssl-proxy-openssl.c,1.3,1.4

cras at procontrol.fi cras at procontrol.fi
Sun Feb 23 12:45:48 EET 2003


Update of /home/cvs/dovecot/src/login-common
In directory danu:/tmp/cvs-serv32215

Modified Files:
	main.c ssl-proxy-openssl.c 
Log Message:
Keep list of the SSL proxies, so they're deinitialized properly if we have
to kill them.



Index: main.c
===================================================================
RCS file: /home/cvs/dovecot/src/login-common/main.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- main.c	10 Feb 2003 07:56:23 -0000	1.4
+++ main.c	23 Feb 2003 10:45:46 -0000	1.5
@@ -212,11 +212,11 @@
 	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();
 }

Index: ssl-proxy-openssl.c
===================================================================
RCS file: /home/cvs/dovecot/src/login-common/ssl-proxy-openssl.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- ssl-proxy-openssl.c	20 Feb 2003 15:48:10 -0000	1.3
+++ ssl-proxy-openssl.c	23 Feb 2003 10:45:46 -0000	1.4
@@ -37,6 +37,7 @@
 };
 
 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 @@
 	}
 
         main_ref();
+	hash_insert(ssl_proxies, proxy, proxy);
 	return sfd[1];
 }
 
@@ -325,6 +327,8 @@
 	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 @@
 			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




More information about the dovecot-cvs mailing list