diff options
author | Richard Mudgett <rmudgett@digium.com> | 2011-07-05 17:35:54 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2011-07-05 17:35:54 +0000 |
commit | 14d510c5b7a07cefdd617f276da5617e197c9f05 (patch) | |
tree | ae8564bc7171d1716a2b513d814722b6768dce10 /channels/sip/include | |
parent | 8b20d4ffe84c6be70832901a937ab17a8575714a (diff) |
Merged revisions 326291 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
........
r326291 | rmudgett | 2011-07-05 12:22:59 -0500 (Tue, 05 Jul 2011) | 23 lines
Used auth= parameter freed during "sip reload" causes crash.
If you use the auth= parameter and do a "sip reload" while there is an
ongoing call. The peer->auth data points to free'd memory.
The patch does several things:
1) Puts the authentication list into an ao2 object for reference counting
to fix the reported crash during a SIP reload.
2) Converts the authentication list from open coding to AST list macros.
3) Adds display of the global authentication list in "sip show settings".
(closes issue ASTERISK-17939)
Reported by: wdoekes
Patches:
jira_asterisk_17939_v1.8.patch (license #5621) patch uploaded by rmudgett
Review: https://reviewboard.asterisk.org/r/1303/
JIRA SWP-3526
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@326321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/sip/include')
-rw-r--r-- | channels/sip/include/sip.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/channels/sip/include/sip.h b/channels/sip/include/sip.h index def239220..f5cf93d2b 100644 --- a/channels/sip/include/sip.h +++ b/channels/sip/include/sip.h @@ -829,11 +829,16 @@ struct sip_history { /*! \brief sip_auth: Credentials for authentication to other SIP services */ struct sip_auth { + AST_LIST_ENTRY(sip_auth) node; char realm[AST_MAX_EXTENSION]; /*!< Realm in which these credentials are valid */ char username[256]; /*!< Username */ char secret[256]; /*!< Secret */ char md5secret[256]; /*!< MD5Secret */ - struct sip_auth *next; /*!< Next auth structure in list */ +}; + +/*! \brief Container of SIP authentication credentials. */ +struct sip_auth_container { + AST_LIST_HEAD_NOLOCK(, sip_auth) list; }; /*! \brief T.38 channel settings (at some point we need to make this alloc'ed */ @@ -1046,7 +1051,7 @@ struct sip_pvt { struct ast_channel *owner; /*!< Who owns us (if we have an owner) */ struct sip_route *route; /*!< Head of linked list of routing steps (fm Record-Route) */ struct sip_notify *notify; /*!< Custom notify type */ - struct sip_auth *peerauth; /*!< Realm authentication */ + struct sip_auth_container *peerauth;/*!< Realm authentication credentials */ int noncecount; /*!< Nonce-count */ unsigned int stalenonce:1; /*!< Marks the current nonce as responded too */ char lastmsg[256]; /*!< Last Message sent/received */ @@ -1209,7 +1214,7 @@ struct sip_peer { * for incoming calls */ unsigned short deprecated_username:1; /*!< If it's a realtime peer, are they using the deprecated "username" instead of "defaultuser" */ - struct sip_auth *auth; /*!< Realm authentication list */ + struct sip_auth_container *auth;/*!< Realm authentication credentials */ int amaflags; /*!< AMA Flags (for billing) */ int callingpres; /*!< Calling id presentation */ int inUse; /*!< Number of calls in use */ |