]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_sip: Don't use port derived from fromdomain if it isn't set
authorMatthew Jordan <mjordan@digium.com>
Thu, 21 Aug 2014 17:33:56 +0000 (17:33 +0000)
committerMatthew Jordan <mjordan@digium.com>
Thu, 21 Aug 2014 17:33:56 +0000 (17:33 +0000)
If a user does not provide a port in the fromdomain setting, chan_sip will set
the fromdomainport to STANDARD_SIP_PORT (5060). The fromdomainport value will
then get used unilaterally in certain places. This causes issues with TLS,
where the default port is expected to be 5061.

This patch modifies chan_sip such that fromdomainport is only used if it is
not the standard SIP port; otherwise, the port from the SIP pvt's recorded
self IP address is used.

Review: https://reviewboard.asterisk.org/r/3893/

ASTERISK-24178 #close
Reported by: Elazar Broad
patches:
  fromdomainport_fix.diff uploaded by Elazar Broad (License 5835)
........

Merged revisions 421717 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 421718 from http://svn.asterisk.org/svn/asterisk/branches/11

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

channels/chan_sip.c

index 4bb88dfd6909015fc473a6bd7dc15e0fb8555181..60761c1fdf73c02a18e4babf3ba1fc14146d5bcd 100644 (file)
@@ -13938,7 +13938,7 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho
                ast_uri_encode(l, tmp_l, sizeof(tmp_l), ast_uri_sip_user);
        }
 
-       ourport = (p->fromdomainport) ? p->fromdomainport : ast_sockaddr_port(&p->ourip);
+       ourport = (p->fromdomainport && (p->fromdomainport != STANDARD_SIP_PORT)) ? p->fromdomainport : ast_sockaddr_port(&p->ourip);
 
        /* If a caller id name was specified, add a display name. */
        if (cid_has_name || !cid_has_num) {
@@ -14905,7 +14905,7 @@ static int transmit_notify_with_mwi(struct sip_pvt *p, int newmsgs, int oldmsgs,
 {
        struct sip_request req;
        struct ast_str *out = ast_str_alloca(500);
-       int ourport = (p->fromdomainport) ? p->fromdomainport : ast_sockaddr_port(&p->ourip);
+       int ourport = (p->fromdomainport && (p->fromdomainport != STANDARD_SIP_PORT)) ? p->fromdomainport : ast_sockaddr_port(&p->ourip);
        const char *domain;
        const char *exten = S_OR(vmexten, default_vmexten);