[asterisk-commits] tilghman: trunk r124912 - in /trunk: ./ apps/app_voicemail.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Jun 24 16:18:53 CDT 2008
Author: tilghman
Date: Tue Jun 24 16:18:52 2008
New Revision: 124912
URL: http://svn.digium.com/view/asterisk?view=rev&rev=124912
Log:
Merged revisions 124910 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r124910 | tilghman | 2008-06-24 16:08:52 -0500 (Tue, 24 Jun 2008) | 8 lines
Occasionally control characters find their way into CallerID. These need to
be stripped prior to placing CallerID in the headers of an email.
(closes issue #12759)
Reported by: RobH
Patches:
20080602__bug12759__2.diff.txt uploaded by Corydon76 (license 14)
Tested by: RobH
........
Modified:
trunk/ (props changed)
trunk/apps/app_voicemail.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: trunk/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_voicemail.c?view=diff&rev=124912&r1=124911&r2=124912
==============================================================================
--- trunk/apps/app_voicemail.c (original)
+++ trunk/apps/app_voicemail.c Tue Jun 24 16:18:52 2008
@@ -702,6 +702,22 @@
#if !(defined(ODBC_STORAGE) || defined(IMAP_STORAGE))
static int __has_voicemail(const char *context, const char *mailbox, const char *folder, int shortcircuit);
#endif
+
+static char *strip_control(const char *input, char *buf, size_t buflen)
+{
+ char *bufptr = buf;
+ for (; *input; input++) {
+ if (*input < 32) {
+ continue;
+ }
+ *bufptr++ = *input;
+ if (bufptr == buf + buflen - 1) {
+ break;
+ }
+ }
+ *bufptr = '\0';
+ return buf;
+}
/*!
@@ -2405,6 +2421,7 @@
char bound[256];
char dur[256];
struct ast_tm tm;
+ char enc_cidnum[256], enc_cidname[256];
char *passdata2;
size_t len_passdata;
char *greeting_attachment;
@@ -2416,7 +2433,9 @@
#define ENDL "\n"
#endif
- gethostname(host, sizeof(host)-1);
+ strip_control(cidnum, enc_cidnum, sizeof(enc_cidnum));
+ strip_control(cidname, enc_cidname, sizeof(enc_cidname));
+ gethostname(host, sizeof(host) - 1);
if (strchr(srcemail, '@'))
ast_copy_string(who, srcemail, sizeof(who));
@@ -2441,16 +2460,18 @@
int vmlen = strlen(fromstring)*3 + 200;
passdata = alloca(vmlen);
memset(passdata, 0, vmlen);
- prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, vmlen, category, flag);
+ prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, enc_cidnum, enc_cidname, dur, date, passdata, vmlen, category, flag);
pbx_substitute_variables_helper(ast, fromstring, passdata, vmlen);
len_passdata = strlen(passdata) * 2 + 3;
passdata2 = alloca(len_passdata);
fprintf(p, "From: %s <%s>" ENDL, quote(passdata, passdata2, len_passdata), who);
ast_channel_free(ast);
- } else
+ } else {
ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
- } else
+ }
+ } else {
fprintf(p, "From: Asterisk PBX <%s>" ENDL, who);
+ }
len_passdata = strlen(vmu->fullname) * 2 + 3;
passdata2 = alloca(len_passdata);
fprintf(p, "To: %s <%s>" ENDL, quote(vmu->fullname, passdata2, len_passdata), vmu->email);
@@ -2461,12 +2482,13 @@
int vmlen = strlen(emailsubject) * 3 + 200;
passdata = alloca(vmlen);
memset(passdata, 0, vmlen);
- prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, vmlen, category, flag);
+ prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, enc_cidnum, enc_cidname, dur, date, passdata, vmlen, category, flag);
pbx_substitute_variables_helper(ast, emailsubject, passdata, vmlen);
fprintf(p, "Subject: %s" ENDL, passdata);
ast_channel_free(ast);
- } else
+ } else {
ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
+ }
} else if (ast_test_flag((&globalflags), VM_PBXSKIP)) {
if (ast_strlen_zero(flag)) {
fprintf(p, "Subject: New message %d in mailbox %s" ENDL, msgnum + 1, mailbox);
@@ -2493,19 +2515,22 @@
fprintf(p, "X-Asterisk-VM-Flag: %s" ENDL, flag);
fprintf(p, "X-Asterisk-VM-Priority: %d" ENDL, chan->priority);
fprintf(p, "X-Asterisk-VM-Caller-channel: %s" ENDL, chan->name);
- fprintf(p, "X-Asterisk-VM-Caller-ID-Num: %s" ENDL, cidnum);
- fprintf(p, "X-Asterisk-VM-Caller-ID-Name: %s" ENDL, cidname);
+ fprintf(p, "X-Asterisk-VM-Caller-ID-Num: %s" ENDL, enc_cidnum);
+ fprintf(p, "X-Asterisk-VM-Caller-ID-Name: %s" ENDL, enc_cidname);
fprintf(p, "X-Asterisk-VM-Duration: %d" ENDL, duration);
- if (!ast_strlen_zero(category))
+ if (!ast_strlen_zero(category)) {
fprintf(p, "X-Asterisk-VM-Category: %s" ENDL, category);
+ }
fprintf(p, "X-Asterisk-VM-Message-Type: %s" ENDL, msgnum > -1 ? "Message" : greeting_attachment);
fprintf(p, "X-Asterisk-VM-Orig-date: %s" ENDL, date);
fprintf(p, "X-Asterisk-VM-Orig-time: %ld" ENDL, (long)time(NULL));
}
- if (!ast_strlen_zero(cidnum))
- fprintf(p, "X-Asterisk-CallerID: %s" ENDL, cidnum);
- if (!ast_strlen_zero(cidname))
- fprintf(p, "X-Asterisk-CallerIDName: %s" ENDL, cidname);
+ if (!ast_strlen_zero(cidnum)) {
+ fprintf(p, "X-Asterisk-CallerID: %s" ENDL, enc_cidnum);
+ }
+ if (!ast_strlen_zero(cidname)) {
+ fprintf(p, "X-Asterisk-CallerIDName: %s" ENDL, enc_cidname);
+ }
fprintf(p, "MIME-Version: 1.0" ENDL);
if (attach_user_voicemail) {
/* Something unique. */
More information about the asterisk-commits
mailing list