Archived
14
0
Fork 0

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/trunk@199139 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
dvossel 2009-06-04 19:10:16 +00:00
parent 84c8feb3ee
commit daf31860a5

View file

@ -736,7 +736,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 */
@ -6488,6 +6489,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;
@ -6598,6 +6611,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)) {