]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge Script <automerge@asterisk.org>
Wed, 7 Mar 2007 19:05:38 +0000 (19:05 +0000)
committerAutomerge Script <automerge@asterisk.org>
Wed, 7 Mar 2007 19:05:38 +0000 (19:05 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58284 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_iax2.c

index 1e23a726ec8864b8c4df86b03c688554d89ce7c5..b9d536aab2d455da52f57eb86b228d7d53f37f20 100644 (file)
@@ -1085,6 +1085,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(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port));
                gettimeofday(&now, NULL);
@@ -5035,19 +5041,21 @@ 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_mutex_lock(&userl.lock);
-               user = userl.users;
-               while (user) {
-                       if (!strcmp(user->name, p->username)) {
-                               user->curauthreq--;
-                               break;
-                       }
-                       user = user->next;
+       ast_mutex_lock(&userl.lock);
+       user = userl.users;
+       while (user) {
+               if (!strcmp(user->name, p->username))
+                       break;
+               user = user->next;
+       }
+       if (user) {
+               if (ast_test_flag(p, IAX_MAXAUTHREQ)) {
+                       user->curauthreq--;
+                       ast_clear_flag(p, IAX_MAXAUTHREQ);
                }
-               ast_mutex_unlock(&userl.lock);
-               ast_clear_flag(p, IAX_MAXAUTHREQ);
+               ast_copy_string(p->host, user->name, sizeof(p->host));  
        }
+       ast_mutex_unlock(&userl.lock);
 
        if (!ast_test_flag(&p->state, IAX_STATE_AUTHENTICATED))
                return res;