From 0e7377b8973d0272aea87a2a712a6b91528fab66 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Wed, 11 Feb 2009 16:18:36 +0000 Subject: [PATCH] Thu Jan 8 13:04:03 CST 2009 Pekka Pessi * auth_client: do not crash with unknown authentication schemes git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11779 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/sofia-sip/.update | 2 +- libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c | 10 ++++++++-- .../iptsec/sofia-sip/auth_client_plugin.h | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index f3382220ab..6b6f901a57 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Wed Feb 11 10:16:40 CST 2009 +Wed Feb 11 10:18:18 CST 2009 diff --git a/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c b/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c index 20d1287204..1feb81d66d 100644 --- a/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c +++ b/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c @@ -128,11 +128,17 @@ int auc_challenge(auth_client_t **auc_list, if (!matched) { /* There was no matching authenticator, create a new one */ *cca = ca_create(home, scheme, realm); - if (ca_challenge((*cca), ch, crcl, scheme, realm) < 0) { + + if (*cca == NULL) { + return -1; + } + else if (ca_challenge((*cca), ch, crcl, scheme, realm) < 0) { ca_destroy(home, *cca), *cca = NULL; return -1; } - retval = 1; /* Updated authenticator */ + /* XXX - case w/ unknown authentication scheme */ + else + retval = 1; /* Updated authenticator */ } } diff --git a/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client_plugin.h b/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client_plugin.h index 36104ec8bd..cc1d2d83cf 100644 --- a/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client_plugin.h +++ b/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client_plugin.h @@ -98,7 +98,8 @@ struct auth_client_plugin /** Check if authentication client has been extended. @NEW_1_12_6. */ #define AUTH_CLIENT_IS_EXTENDED(ca) \ - ((ca)->ca_auc->auc_plugin_size > \ + ((ca)->ca_auc && \ + (ca)->ca_auc->auc_plugin_size > \ (int)offsetof(auth_client_plugin_t, auc_clear) \ && (ca)->ca_auc->auc_clear != NULL)