]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
If a REGISTER attempt comes in that is a retransmission of a previous REGISTER do...
authorJoshua Colp <jcolp@digium.com>
Tue, 5 Feb 2008 19:52:30 +0000 (19:52 +0000)
committerJoshua Colp <jcolp@digium.com>
Tue, 5 Feb 2008 19:52:30 +0000 (19:52 +0000)
(issue #BE-381)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@102450 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 484d86d89314e24a049b70c29e3c4fea1538be17..d02268e0aebc0bdfdaa909f57c6ff9401d780781 100644 (file)
@@ -8415,16 +8415,22 @@ static enum check_auth_result check_auth(struct sip_pvt *p, struct sip_request *
        good_response = keys[K_RESP].s &&
                        !strncasecmp(keys[K_RESP].s, resp_hash, strlen(resp_hash));
        if (wrongnonce) {
-               ast_string_field_build(p, randdata, "%08lx", ast_random());
                if (good_response) {
                        if (sipdebug)
                                ast_log(LOG_NOTICE, "Correct auth, but based on stale nonce received from '%s'\n", get_header(req, "To"));
                        /* We got working auth token, based on stale nonce . */
+                       ast_string_field_build(p, randdata, "%08lx", ast_random());
                        transmit_response_with_auth(p, response, req, p->randdata, reliable, respheader, TRUE);
                } else {
                        /* Everything was wrong, so give the device one more try with a new challenge */
-                       if (sipdebug)
-                               ast_log(LOG_NOTICE, "Bad authentication received from '%s'\n", get_header(req, "To"));
+                       if (!ast_test_flag(req, SIP_PKT_IGNORE)) {
+                               if (sipdebug)
+                                       ast_log(LOG_NOTICE, "Bad authentication received from '%s'\n", get_header(req, "To"));
+                               ast_string_field_build(p, randdata, "%08lx", ast_random());
+                       } else {
+                               if (sipdebug)
+                                       ast_log(LOG_NOTICE, "Duplicate authentication received from '%s'\n", get_header(req, "To"));
+                       }
                        transmit_response_with_auth(p, response, req, p->randdata, reliable, respheader, FALSE);
                }