Daniel Tryba
2017-Jun-09 14:30 UTC
[asterisk-users] pjsip user_eq_phone adds user=phone to anonymous user bug?
With pjsip (asterisk 13.14.1) I see the problem that an anonymous from header gets user=phone appendend to the URI if user_eq_phone=yes is specified: On the incoming leg: From: anonymous <sip:anonymous at anonymous.invalid:5060>;tag=Q5zBj7BMnvI6Fe6O2866fox3ZHmn-smt Get transformed to From: "Anonymous" <sip:anonymous at anonymous.invalid;user=phone>;tag=fa3cb748-6af9-485f-8a70-a2b9ad40b13a on the outgoing leg. Setting user_eq_phone = no will result in user=phone not being added. The upstream provide demands user=phone in URIs if the username resembles a phonenumber, but declines the INVITE if user=phone is present on an anonymous username. Looking at the code,res/res_pjsip.c function ast_sip_add_usereqphone is the only place I see that might add user=phone: ================================================================================ int i = 0; //..... if (pj_strbuf(&sip_uri->user)[0] == '+') { i = 1; } /* Test URI user against allowed characters in AST_DIGIT_ANY */ for (; i < pj_strlen(&sip_uri->user); i++) { if (!strchr(AST_DIGIT_ANYNUM, pj_strbuf(&sip_uri->user)[i])) { break; } } if (i < pj_strlen(&sip_uri->user)) { return; } //add user=phone if we get to the code below ================================================================================ sip_uri->user should be "anonymous" AST_DIGIT_ANY is: #define AST_DIGIT_ANYNUM "0123456789" So in the for loop the first char of sip_uri->user should result in a NULL from strchr. Leaving i at the value 0, which is smaller than the length of sip_uri->user. And thus the function should return before adding the user=phone. So why is user=phone being added?
Joshua Colp
2017-Jun-09 14:40 UTC
[asterisk-users] pjsip user_eq_phone adds user=phone to anonymous user bug?
On Fri, Jun 9, 2017, at 11:30 AM, Daniel Tryba wrote:> With pjsip (asterisk 13.14.1) I see the problem that an anonymous from > header gets user=phone appendend to the URI if user_eq_phone=yes is > specified: > > On the incoming leg: > From: anonymous > <sip:anonymous at anonymous.invalid:5060>;tag=Q5zBj7BMnvI6Fe6O2866fox3ZHmn-smt > Get transformed to > From: "Anonymous" > <sip:anonymous at anonymous.invalid;user=phone>;tag=fa3cb748-6af9-485f-8a70-a2b9ad40b13a > on the outgoing leg. > > Setting user_eq_phone = no will result in user=phone not being added. > The upstream provide demands user=phone in URIs if the username > resembles a phonenumber, but declines the INVITE if user=phone is > present on an anonymous username.<snip>> sip_uri->user should be "anonymous" > AST_DIGIT_ANY is: #define AST_DIGIT_ANYNUM "0123456789" > > So in the for loop the first char of sip_uri->user should result in a > NULL from strchr. Leaving i at the value 0, which is smaller than the > length of sip_uri->user. And thus the function should return before > adding the user=phone. So why is user=phone being added?What seems to be happening is that the session is being set up and the user=phone parameter added. It's only after that the values are updated to be Anonymous and the user=phone parameter is left there. Please file an issue[1] with the description above. [1] https://issues.asterisk.org/jira -- Joshua Colp Digium, Inc. | Senior Software Developer 445 Jan Davis Drive NW - Huntsville, AL 35806 - US Check us out at: www.digium.com & www.asterisk.org
Daniel Tryba
2017-Jun-09 15:41 UTC
[asterisk-users] pjsip user_eq_phone adds user=phone to anonymous user bug?
On Fri, Jun 09, 2017 at 11:40:01AM -0300, Joshua Colp wrote:> What seems to be happening is that the session is being set up and the > user=phone parameter added. It's only after that the values are updated > to be Anonymous and the user=phone parameter is left there. Please file > an issue[1] with the description above.Issue created: https://issues.asterisk.org/jira/browse/ASTERISK-27047