]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_caller_id chan_sip: Comply to RFC 3323 values for privacy
authorDaniel Tryba <daniel@pocos.nl>
Mon, 2 Oct 2017 12:48:41 +0000 (14:48 +0200)
committerdtryba <daniel@tryba.nl>
Thu, 5 Oct 2017 12:46:44 +0000 (07:46 -0500)
Currently privacy requests are only granted if the Privacy header
value is exactly "id" (defined in RFC 3325). It ignores any other
possible value (or a combination there of). This patch reverses the
logic from testing for "id" to grant privacy, to testing for "none" and
granting privacy for any other value. "none" must not be used in
combination with any other value (RFC 3323 section 4.2).

ASTERISK-27284 #close

Change-Id: If438a21f31a962da32d7a33ff33bdeb1e776fe56

channels/chan_sip.c
res/res_pjsip_caller_id.c

index 909a5c85dd27332245547ef2f053917451b50ee6..caf780282f374d2a2e60943bfce4bedaa575bff2 100644 (file)
@@ -18083,7 +18083,7 @@ static int get_pai(struct sip_pvt *p, struct sip_request *req)
        }
 
        ast_copy_string(privacy, sip_get_header(req, "Privacy"), sizeof(privacy));
-       if (!ast_strlen_zero(privacy) && !strncmp(privacy, "id", 2)) {
+       if (!ast_strlen_zero(privacy) && strcasecmp(privacy, "none")) {
                callingpres = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
        }
        if (!cid_name) {
index 470d90f43eef4b636b69f45079dc3c3f14314122..64191a75099ac1ee6a3cd0e411fcbf4bb381b6ba 100644 (file)
@@ -149,12 +149,12 @@ static int set_id_from_pai(pjsip_rx_data *rdata, struct ast_party_id *id)
        }
 
        privacy = pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &privacy_str, NULL);
-       if (privacy && !pj_stricmp2(&privacy->hvalue, "id")) {
-               id->number.presentation = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
-               id->name.presentation = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
-       } else {
+       if (!privacy || !pj_stricmp2(&privacy->hvalue, "none")) {
                id->number.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
                id->name.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
+       } else {
+               id->number.presentation = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
+               id->name.presentation = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
        }
 
        return 0;