From: Olle Johansson Date: Wed, 16 May 2007 10:58:22 +0000 (+0000) Subject: Below patches with some re-structuring for trunk X-Git-Tag: 1.6.0-beta1~3^2~2662 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d83dcae6b1372369d947594a8f18185ba03635d6;p=thirdparty%2Fasterisk.git Below patches with some re-structuring for trunk --- Merged revisions 64602 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r64602 | oej | 2007-05-16 12:38:18 +0200 (Wed, 16 May 2007) | 2 lines Issue #9681 - Handle www-auth on BYE ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@64604 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 380f711ebc..7e5499d44e 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -13162,14 +13162,26 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ handle_response_refer(p, resp, rest, req, seqno); break; case 401: /* Not www-authorized on SIP method */ + case 407: /* Proxy auth required */ if (sipmethod == SIP_INVITE) handle_response_invite(p, resp, rest, req, seqno); else if (sipmethod == SIP_REFER) handle_response_refer(p, resp, rest, req, seqno); else if (p->registry && sipmethod == SIP_REGISTER) res = handle_response_register(p, resp, rest, req, seqno); - else { - ast_log(LOG_WARNING, "Got authentication request (401) on unknown %s to '%s'\n", sip_methods[sipmethod].text, get_header(req, "To")); + else if (sipmethod == SIP_BYE) { + if (p->options) + p->options->auth_type = resp; + if (ast_strlen_zero(p->authname)) { + ast_log(LOG_WARNING, "Asked to authenticate %s, to %s:%d but we have no matching peer!\n", + msg, ast_inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port)); + ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); + } else if ((p->authtries == MAX_AUTHTRIES) || do_proxy_auth(p, req, resp, sipmethod, 0)) { + ast_log(LOG_NOTICE, "Failed to authenticate on %s to '%s'\n", msg, get_header(&p->initreq, "From")); + ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); + } + } else { + ast_log(LOG_WARNING, "Got authentication request (%d) on %s to '%s'\n", resp, sip_methods[sipmethod].text, get_header(req, "To")); ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); } break; @@ -13191,26 +13203,6 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ else if (owner) ast_queue_control(p->owner, AST_CONTROL_CONGESTION); break; - case 407: /* Proxy auth required */ - if (sipmethod == SIP_INVITE) - handle_response_invite(p, resp, rest, req, seqno); - else if (sipmethod == SIP_REFER) - handle_response_refer(p, resp, rest, req, seqno); - else if (p->registry && sipmethod == SIP_REGISTER) - res = handle_response_register(p, resp, rest, req, seqno); - else if (sipmethod == SIP_BYE) { - if (ast_strlen_zero(p->authname)) - ast_log(LOG_WARNING, "Asked to authenticate %s, to %s:%d but we have no matching peer!\n", - msg, ast_inet_ntoa(p->recv.sin_addr), ntohs(p->recv.sin_port)); - ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); - if (p->authtries == MAX_AUTHTRIES || do_proxy_auth(p, req, 407, sipmethod, 0)) { - ast_log(LOG_NOTICE, "Failed to authenticate on %s to '%s'\n", msg, get_header(&p->initreq, "From")); - ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); - } - } else /* We can't handle this, giving up in a bad way */ - ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); - - break; case 423: /* Interval too brief */ if (sipmethod == SIP_REGISTER) res = handle_response_register(p, resp, rest, req, seqno);