mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 20:04:50 +00:00
(This bug was reported to me by Kinsey Moore)
Merged revisions 58242 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r58242 | russell | 2007-03-07 12:17:07 -0600 (Wed, 07 Mar 2007) | 7 lines Fix a problem where the Asterisk channel name could be that of the wrong IAX2 user for a call. This is because the first step of choosing this name is to look for an IAX2 peer that happens to have the same IP/port number that this call is coming from and assuming that is it. However, this is not always correct. So, I have made it change this name after authentication happens since at that point, we have an exact match. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@58243 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1231,6 +1231,12 @@ static int find_callno(unsigned short callno, unsigned short dcallno, struct soc
|
||||
}
|
||||
}
|
||||
if ((res < 1) && (new >= NEW_ALLOW)) {
|
||||
/* It may seem odd that we look through the peer list for a name for
|
||||
* this *incoming* call. Well, it is weird. However, users don't
|
||||
* have an IP address/port number that we can match against. So,
|
||||
* this is just checking for a peer that has that IP/port and
|
||||
* assuming that we have a user of the same name. This isn't always
|
||||
* correct, but it will be changed if needed after authentication. */
|
||||
if (!iax2_getpeername(*sin, host, sizeof(host), lockpeer))
|
||||
snprintf(host, sizeof(host), "%s:%d", ast_inet_ntoa(sin->sin_addr), ntohs(sin->sin_port));
|
||||
gettimeofday(&now, NULL);
|
||||
@@ -4864,17 +4870,19 @@ static int authenticate_verify(struct chan_iax2_pvt *p, struct iax_ies *ies)
|
||||
int x;
|
||||
struct iax2_user *user = NULL;
|
||||
|
||||
if (ast_test_flag(p, IAX_MAXAUTHREQ)) {
|
||||
AST_LIST_LOCK(&users);
|
||||
AST_LIST_TRAVERSE(&users, user, entry) {
|
||||
if (!strcmp(user->name, p->username)) {
|
||||
user->curauthreq--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
AST_LIST_UNLOCK(&users);
|
||||
ast_clear_flag(p, IAX_MAXAUTHREQ);
|
||||
AST_LIST_LOCK(&users);
|
||||
AST_LIST_TRAVERSE(&users, user, entry) {
|
||||
if (!strcmp(user->name, p->username))
|
||||
break;
|
||||
}
|
||||
if (user) {
|
||||
if (ast_test_flag(p, IAX_MAXAUTHREQ)) {
|
||||
user->curauthreq--;
|
||||
ast_clear_flag(p, IAX_MAXAUTHREQ);
|
||||
}
|
||||
ast_string_field_set(p, host, user->name);
|
||||
}
|
||||
AST_LIST_UNLOCK(&users);
|
||||
|
||||
if (!ast_test_flag(&p->state, IAX_STATE_AUTHENTICATED))
|
||||
return res;
|
||||
|
Reference in New Issue
Block a user