diff options
author | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-04 19:16:58 +0000 |
---|---|---|
committer | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-04 19:16:58 +0000 |
commit | 052d12c7d026cf6413ba57a22c228fc008019a8a (patch) | |
tree | ad473a33e1e81ef8b590cdeace2610f5f929600d /channels/chan_iax2.c | |
parent | ddc7aec9ff55c75c1555c66c9be1dc3f62d82ee8 (diff) |
Merged revisions 199139 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r199139 | dvossel | 2009-06-04 14:10:16 -0500 (Thu, 04 Jun 2009) | 9 lines
Merged revisions 199138 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r199138 | dvossel | 2009-06-04 14:00:15 -0500 (Thu, 04 Jun 2009) | 3 lines
Additional updates to AST-2009-001
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@199142 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r-- | channels/chan_iax2.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 03f895b07..ef5ab8291 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -589,7 +589,8 @@ struct chan_iax2_pvt { /*! received OSP token */ AST_STRING_FIELD(osptoken); ); - + /*! AUTHREJ all AUTHREP frames */ + int authrej; /*! permitted authentication methods */ int authmethods; /*! permitted encryption methods */ @@ -6201,6 +6202,18 @@ static int check_access(int callno, struct sockaddr_in *sin, struct iax_ies *ies ast_string_field_set(iaxs[callno], secret, user->secret); res = 0; user = user_unref(user); + } else { + /* user was not found, but we should still fake an AUTHREQ. + * Set authmethods to the last known authmethod used by the system + * Set a fake secret, it's not looked at, just required to attempt authentication. + * Set authrej so the AUTHREP is rejected without even looking at its contents */ + iaxs[callno]->authmethods = last_authmethod ? last_authmethod : (IAX_AUTH_MD5 | IAX_AUTH_PLAINTEXT); + ast_string_field_set(iaxs[callno], secret, "badsecret"); + iaxs[callno]->authrej = 1; + if (!ast_strlen_zero(iaxs[callno]->username)) { + /* only send the AUTHREQ if a username was specified. */ + res = 0; + } } ast_set2_flag(iaxs[callno], iax2_getpeertrunk(*sin), IAX_TRUNK); return res; @@ -6309,6 +6322,9 @@ static int authenticate_verify(struct chan_iax2_pvt *p, struct iax_ies *ies) .name = p->username, }; + if (p->authrej) { + return res; + } user = ao2_find(users, &tmp_user, OBJ_POINTER); if (user) { if (ast_test_flag(p, IAX_MAXAUTHREQ)) { |