summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorWalter Doekes <walter+asterisk@wjd.nu>2013-02-26 19:36:30 +0000
committerWalter Doekes <walter+asterisk@wjd.nu>2013-02-26 19:36:30 +0000
commitd33d9c178149373dbb5773271e09d1573454d52c (patch)
tree292952ac89a6912eb6f1a235cdf19c7707bbb413 /channels
parent4951ab9ed111bbd374bda91adf3b5cda535fb3ba (diff)
Correct RPID parsing for unquoted display-name.
Parsing Remote-Party-ID will now succeed if display-name is of the *(token LWS) kind and not just the quoted-string kind. Review: https://reviewboard.asterisk.org/r/2341/ ........ Merged revisions 382107 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 382108 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@382109 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 1808d9289..249672729 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -17243,7 +17243,16 @@ static int get_rpid(struct sip_pvt *p, struct sip_request *oreq)
return get_pai(p, req);
}
+ /*
+ * RPID is not:
+ * rpid = (name-addr / addr-spec) *(SEMI rpi-token)
+ * But it is:
+ * rpid = [display-name] LAQUOT addr-spec RAQUOT *(SEMI rpi-token)
+ * Ergo, calling parse_name_andor_addr() on it wouldn't be
+ * correct because that would allow addr-spec style too.
+ */
start = tmp;
+ /* Quoted (note that we're not dealing with escapes properly) */
if (*start == '"') {
*start++ = '\0';
end = strchr(start, '"');
@@ -17252,6 +17261,17 @@ static int get_rpid(struct sip_pvt *p, struct sip_request *oreq)
*end++ = '\0';
cid_name = start;
start = ast_skip_blanks(end);
+ /* Unquoted */
+ } else {
+ cid_name = start;
+ start = end = strchr(start, '<');
+ if (!start) {
+ return 0;
+ }
+ /* trim blanks if there are any. the mandatory NUL is done below */
+ while (--end >= cid_name && *end < 33) {
+ *end = '\0';
+ }
}
if (*start != '<')