From 6dfe5b29b6cd6249c6fbe32f5e84f36d38903932 Mon Sep 17 00:00:00 2001 From: Daniel Tryba Date: Mon, 2 Oct 2017 14:48:41 +0200 Subject: [PATCH] res_pjsip_caller_id chan_sip: Comply to RFC 3323 values for privacy 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 | 2 +- res/res_pjsip_caller_id.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index aa6813fd37..724021eeab 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -18026,7 +18026,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) { diff --git a/res/res_pjsip_caller_id.c b/res/res_pjsip_caller_id.c index 0aca2db2a4..0c1325c472 100644 --- a/res/res_pjsip_caller_id.c +++ b/res/res_pjsip_caller_id.c @@ -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;