aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-06-04 19:15:15 +0000
committerdvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-06-04 19:15:15 +0000
commit84eb8368e2b857a30fff2a943d820b0c347a48fc (patch)
tree8b5a26ba53c0650eb77a764d7d91501e239b1137
parentbb445b3cdb1a32503b2e83c0e20fa33027d9554f (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.2@199140 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channels/chan_iax2.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 7dba71b1c..5d43b5160 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -692,7 +692,8 @@ struct chan_iax2_pvt {
/*! Default parkinglot */
AST_STRING_FIELD(parkinglot);
);
-
+ /*! AUTHREJ all AUTHREP frames */
+ int authrej;
/*! permitted authentication methods */
int authmethods;
/*! permitted encryption methods */
@@ -6410,6 +6411,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;
@@ -6520,6 +6533,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)) {