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