[asterisk-commits] oej: branch 1.4 r68028 - /branches/1.4/res/res_jabber.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Thu Jun 7 02:55:14 MST 2007


Author: oej
Date: Thu Jun  7 04:55:13 2007
New Revision: 68028

URL: http://svn.digium.com/view/asterisk?view=rev&rev=68028
Log:
Ok, we found out that this is not about if you have any *active* clients using TLS, but
if you have initialized TLS at all during the lifetime of the module. So if you reload
to disable TLS, it won't help.

Modified:
    branches/1.4/res/res_jabber.c

Modified: branches/1.4/res/res_jabber.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/res/res_jabber.c?view=diff&rev=68028&r1=68027&r2=68028
==============================================================================
--- branches/1.4/res/res_jabber.c (original)
+++ branches/1.4/res/res_jabber.c Thu Jun  7 04:55:13 2007
@@ -168,11 +168,11 @@
 "             If not in roster variable will = 7\n";
 
 struct aji_client_container clients;
-
 struct aji_capabilities *capabilities = NULL;
 
 /*! \brief Global flags, initialized to default values */
 static struct ast_flags globalflags = { AJI_AUTOPRUNE | AJI_AUTOREGISTER };
+static int tls_initialized = FALSE;
 
 /*!
  * \brief Deletes the aji_client data structure.
@@ -502,10 +502,11 @@
 		switch (type) {
 		case IKS_NODE_START:
 			if (client->usetls && !iks_is_secure(client->p)) {
-				if (iks_has_tls())
+				if (iks_has_tls()) {
 					iks_start_tls(client->p);
-				else
-					ast_log(LOG_ERROR, "gnuTLS not installed.\n");
+					tls_initialized = TRUE;
+				} else
+					ast_log(LOG_ERROR, "gnuTLS not installed. You need to recompile the Iksemel library with gnuTLS support\n");
 				break;
 			}
 			if (!client->usesasl) {
@@ -2416,20 +2417,13 @@
 
 static int unload_module(void)
 {
-	int module_uses_tls = FALSE;
-
-	/* Check if any client use TLS. If that's the case, we can't unload this
+
+	/* Check if TLS is initialized. If that's the case, we can't unload this
 	   module due to a bug in the iksemel library that will cause a crash or
 	   a deadlock. We're trying to find a way to handle this, but in the meantime
 	   we will simply refuse to die... 
 	 */
-	ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, {
-		ASTOBJ_RDLOCK(iterator);
-		if (iterator->usetls)
-			module_uses_tls = TRUE;
-		ASTOBJ_UNLOCK(iterator);
-	});
-	if (module_uses_tls) {
+	if (tls_initialized) {
 		ast_log(LOG_ERROR, "Module can't be unloaded due to a bug in the Iksemel library when using TLS.\n");
 		return 1;	/* You need a forced unload to get rid of this module */
 	}



More information about the asterisk-commits mailing list