From 416bd82bdaf8a5cbc0c129d4b08af2af58fed067 Mon Sep 17 00:00:00 2001 From: Matthew Jordan Date: Thu, 21 Aug 2014 17:32:12 +0000 Subject: [PATCH] chan_sip: Don't use port derived from fromdomain if it isn't set 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@421717 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 612b8f27ce..933e33a218 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12430,7 +12430,7 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho ast_uri_encode(l, tmp_l, sizeof(tmp_l), 0); } - 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 (!sip_standard_port(p->socket.type, ourport)) { snprintf(from, sizeof(from), "\"%s\" ;tag=%s", n, tmp_l, d, ourport, p->tag); } else { @@ -13327,7 +13327,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);