Merged revisions 68028 via svnmerge from
authorOlle Johansson <oej@edvina.net>
Thu, 7 Jun 2007 10:00:37 +0000 (10:00 +0000)
committerOlle Johansson <oej@edvina.net>
Thu, 7 Jun 2007 10:00:37 +0000 (10:00 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r68028 | oej | 2007-06-07 11:55:13 +0200 (Thu, 07 Jun 2007) | 4 lines

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.

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@68031 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_jabber.c

index 12cd0f5..8dc3f13 100644 (file)
@@ -169,11 +169,11 @@ static char *ajistatus_descrip =
 "             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.
@@ -505,10 +505,11 @@ static int aji_act_hook(void *data, int type, iks *node)
                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) {
@@ -2396,20 +2397,13 @@ static int aji_reload()
 
 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 */
        }