<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Segoe UI";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.js-path-segment
        {mso-style-name:js-path-segment;}
span.separator
        {mso-style-name:separator;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:56.7pt 42.5pt 56.7pt 85.05pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head><body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hello All,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">We have an issue with the opensips 1.11.5-tls. Received header is not added to the Via header even when src IP and IP in the Via1 header are different.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here is an example<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Src IP is 192.168.1.121<o:p></o:p></p>
<p class="MsoNormal">IP in Via is 192.168.1.12<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Looking into the code of <span class="js-path-segment"><b><span style="font-family:"Segoe UI","sans-serif";color:#586069;background:white"><a href="https://github.com/OpenSIPS/opensips/tree/f36a8a1735f273ac2cee1b0c7b97b7381612903c"><span style="color:#0366D6">opensip</span><span style="color:#0366D6">s</span></a></span></b></span><span class="separator"><span style="font-family:"Segoe UI","sans-serif";color:#586069;background:white">/</span></span><strong><span style="font-family:"Segoe UI","sans-serif";color:#24292E;background:white">msg_translator.c</span></strong>
 I can see that check_ip_address function  from <span class="js-path-segment"><b><span style="font-family:"Segoe UI","sans-serif";color:#586069;background:white"><a href="https://github.com/OpenSIPS/opensips/tree/f36a8a1735f273ac2cee1b0c7b97b7381612903c"><span style="color:#0366D6">opensip</span><span style="color:#0366D6">s</span></a></span></b></span><span class="separator"><span style="font-family:"Segoe UI","sans-serif";color:#586069;background:white">/</span></span><strong><span style="font-family:"Segoe UI","sans-serif";color:#24292E;background:white">resolve.c</span></strong>
 is used. It looks like there is a bug in the function, which returns 0 for the cases like above, because comparison is done only up to the Via host length and length of IP is not taken into consideration<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">=========================================================================================<o:p></o:p></p>
<p class="MsoNormal">int check_ip_address(struct ip_addr* ip, str *name,<o:p></o:p></p>
<p class="MsoNormal">                                                                unsigned short port, unsigned short proto, int resolver)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">                struct hostent* he;<o:p></o:p></p>
<p class="MsoNormal">                int i, len;<o:p></o:p></p>
<p class="MsoNormal">                char* s;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                /* maybe we are lucky and name it's an ip */<o:p></o:p></p>
<p class="MsoNormal">                s=ip_addr2a(ip);<o:p></o:p></p>
<p class="MsoNormal">                if (s){<o:p></o:p></p>
<p class="MsoNormal">                                LM_DBG("params %s, %.*s, %d\n", s, name->len, name->s, resolver);<o:p></o:p></p>
<p class="MsoNormal">                                len=strlen(s);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                                /* check if name->s is an ipv6 address or an ipv6 address ref. */<o:p></o:p></p>
<p class="MsoNormal">                                if ((ip->af==AF_INET6) &&<o:p></o:p></p>
<p class="MsoNormal">                                                                (              ((len==name->len)&&(strncasecmp(name->s, s, name->len)==0))<o:p></o:p></p>
<p class="MsoNormal">                                                                                ||<o:p></o:p></p>
<p class="MsoNormal">                                                                                ((len==(name->len-2))&&(name->s[0]=='[')&&<o:p></o:p></p>
<p class="MsoNormal">                                                                                                (name->s[name->len-1]==']')&&<o:p></o:p></p>
<p class="MsoNormal">                                                                                                (strncasecmp(name->s+1, s, len)==0))<o:p></o:p></p>
<p class="MsoNormal">                                                                )<o:p></o:p></p>
<p class="MsoNormal">                                   )<o:p></o:p></p>
<p class="MsoNormal">                                                return 0;<o:p></o:p></p>
<p class="MsoNormal">                                else<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b><span style="color:red">                                                if (strncmp(name->s, s, name->len)==0)<o:p></o:p></span></b></p>
<p class="MsoNormal"><b><span style="color:red">                                                                return 0;<o:p></o:p></span></b></p>
<p class="MsoNormal">                }else{<o:p></o:p></p>
<p class="MsoNormal">                                LM_CRIT("could not convert ip address\n");<o:p></o:p></p>
<p class="MsoNormal">                                return -1;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">==========================================================================================<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The easies fix would be just add (len == name->len) as a first condition with &&  conjunction to the highlighted if statement .<br>
<br>
<o:p></o:p></p>
<p class="MsoNormal">Could you please check and issue a patch for this?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Vladimir<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>

<br /><br /><br /><br /><br />
<p>IPC ranks #33 in IDC's Top 100 FinTech
<br /><br />
DISCLAIMER:
This e-mail may contain information that is confidential, privileged or otherwise protected from disclosure. If you are not an intended recipient of this e-mail, do not duplicate or redistribute it by any means. Please delete it and any attachments and notify the sender that you have received it in error. Unintended recipients are prohibited from taking action on the basis of information in this e-mail. E-mail messages may contain computer viruses or other defects, may not be accurately replicated on other systems, or may be intercepted, deleted or interfered with without the knowledge of the sender or the intended recipient. If you are not comfortable with the risks associated with e-mail messages, you may decide not to use e-mail to communicate with IPC. IPC reserves the right, to the extent and under circumstances permitted by applicable law, to retain, monitor and intercept e-mail messages to and from its systems.</p></body></html>