diff options
author | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-06-07 10:00:37 +0000 |
---|---|---|
committer | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-06-07 10:00:37 +0000 |
commit | cfea76b8812df4c42908894c77e6f1023c03e74b (patch) | |
tree | 8c2452b8260e827b58e4243f61094452a22bfa05 /res/res_jabber.c | |
parent | b597a0aaad672cc16af4bbca0372e0ae9c4715be (diff) |
Merged revisions 68028 via svnmerge from
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: http://svn.digium.com/svn/asterisk/trunk@68031 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_jabber.c')
-rw-r--r-- | res/res_jabber.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/res/res_jabber.c b/res/res_jabber.c index 12cd0f5b5..8dc3f1305 100644 --- a/res/res_jabber.c +++ b/res/res_jabber.c @@ -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 */ } |