From 946da187300e1a73c32c2dc418f2eb4e8a7ab3c2 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Tue, 5 Feb 2008 19:54:05 +0000 Subject: [PATCH] Merged revisions 102450 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r102450 | file | 2008-02-05 15:52:30 -0400 (Tue, 05 Feb 2008) | 3 lines If a REGISTER attempt comes in that is a retransmission of a previous REGISTER do not create a new nonce value. (issue #BE-381) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@102451 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 0287e6f6bd..0939ee96b7 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -9918,16 +9918,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); }