Fix improper comaparison of anonymous URI when getting P-Asserted-Identity.
authorMark Michelson <mmichelson@digium.com>
Wed, 31 Mar 2010 22:35:20 +0000 (22:35 +0000)
committerMark Michelson <mmichelson@digium.com>
Wed, 31 Mar 2010 22:35:20 +0000 (22:35 +0000)
There was a bug where we split the URI on the @ sign and then attempted
to compare to "anonymous@anonymous.invalid" afterwards. This comparison
could never evaluate true. So now we keep a copy of the URI prior to the
split so that the comparison is valid.

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

channels/chan_sip.c

index 9cd0608..59ba5dc 100644 (file)
@@ -12172,7 +12172,7 @@ static int get_pai(struct sip_pvt *p, struct sip_request *req)
        char *cid_num = "";
        char *cid_name = "";
        int callingpres = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
-       char *start = NULL, *end = NULL;
+       char *start = NULL, *end = NULL, *uri = NULL;
 
        ast_copy_string(pai, get_header(req, "P-Asserted-Identity"), sizeof(pai));
 
@@ -12193,12 +12193,17 @@ static int get_pai(struct sip_pvt *p, struct sip_request *req)
 
        if (*start != '<')
                return 0;
+       /* At this point, 'start' points to the URI in brackets.
+        * We need a copy so that our comparison to the anonymous
+        * URI is valid.
+        */
+       uri = ast_strdupa(start);
        *start++ = '\0';
        end = strchr(start, '@');
        if (!end)
                return 0;
        *end++ = '\0';
-       if (!strncasecmp(start, "anonymous@anonymous.invalid", 27)) {
+       if (!strncasecmp(uri, "anonymous@anonymous.invalid", 27)) {
                callingpres = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
                /*XXX Assume no change in cid_num. Perhaps it should be
                 * blanked?