Merged revisions 124912 via svnmerge from

https://origsvn.digium.com/svn/asterisk/trunk

................
r124912 | tilghman | 2008-06-24 16:18:52 -0500 (Tue, 24 Jun 2008) | 16 lines

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

........

................


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@124964 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.0
Tilghman Lesher 17 years ago
parent a8231e854e
commit 78b60650e4

@ -677,6 +677,21 @@ static int is_valid_dtmf(const char *key);
static int __has_voicemail(const char *context, const char *mailbox, const char *folder, int shortcircuit); static int __has_voicemail(const char *context, const char *mailbox, const char *folder, int shortcircuit);
#endif #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;
}
static void populate_defaults(struct ast_vm_user *vmu) static void populate_defaults(struct ast_vm_user *vmu)
@ -1966,6 +1981,7 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
char dur[256]; char dur[256];
char tmpcmd[256]; char tmpcmd[256];
struct ast_tm tm; struct ast_tm tm;
char enc_cidnum[256], enc_cidname[256];
char *passdata2; char *passdata2;
size_t len_passdata; size_t len_passdata;
char *greeting_attachment; char *greeting_attachment;
@ -1976,6 +1992,8 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
#define ENDL "\n" #define ENDL "\n"
#endif #endif
strip_control(cidnum, enc_cidnum, sizeof(enc_cidnum));
strip_control(cidname, enc_cidname, sizeof(enc_cidname));
gethostname(host, sizeof(host) - 1); gethostname(host, sizeof(host) - 1);
if (strchr(srcemail, '@')) if (strchr(srcemail, '@'))
@ -2001,16 +2019,18 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
int vmlen = strlen(fromstring) * 3 + 200; int vmlen = strlen(fromstring) * 3 + 200;
passdata = alloca(vmlen); passdata = alloca(vmlen);
memset(passdata, 0, vmlen); memset(passdata, 0, vmlen);
prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, vmlen, category); prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, enc_cidnum, enc_cidname, dur, date, passdata, vmlen, category);
pbx_substitute_variables_helper(ast, fromstring, passdata, vmlen); pbx_substitute_variables_helper(ast, fromstring, passdata, vmlen);
len_passdata = strlen(passdata) * 2 + 3; len_passdata = strlen(passdata) * 2 + 3;
passdata2 = alloca(len_passdata); passdata2 = alloca(len_passdata);
fprintf(p, "From: %s <%s>" ENDL, quote(passdata, passdata2, len_passdata), who); fprintf(p, "From: %s <%s>" ENDL, quote(passdata, passdata2, len_passdata), who);
ast_channel_free(ast); ast_channel_free(ast);
} else } else {
ast_log(LOG_WARNING, "Cannot allocate the channel for variables substitution\n"); ast_log(LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
} else }
} else {
fprintf(p, "From: Asterisk PBX <%s>" ENDL, who); fprintf(p, "From: Asterisk PBX <%s>" ENDL, who);
}
len_passdata = strlen(vmu->fullname) * 2 + 3; len_passdata = strlen(vmu->fullname) * 2 + 3;
passdata2 = alloca(len_passdata); passdata2 = alloca(len_passdata);
fprintf(p, "To: %s <%s>" ENDL, quote(vmu->fullname, passdata2, len_passdata), vmu->email); fprintf(p, "To: %s <%s>" ENDL, quote(vmu->fullname, passdata2, len_passdata), vmu->email);
@ -2021,16 +2041,19 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
int vmlen = strlen(emailsubject) * 3 + 200; int vmlen = strlen(emailsubject) * 3 + 200;
passdata = alloca(vmlen); passdata = alloca(vmlen);
memset(passdata, 0, vmlen); memset(passdata, 0, vmlen);
prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, vmlen, category); prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, enc_cidnum, enc_cidname, dur, date, passdata, vmlen, category);
pbx_substitute_variables_helper(ast, emailsubject, passdata, vmlen); pbx_substitute_variables_helper(ast, emailsubject, passdata, vmlen);
fprintf(p, "Subject: %s" ENDL, passdata); fprintf(p, "Subject: %s" ENDL, passdata);
ast_channel_free(ast); ast_channel_free(ast);
} else } else {
ast_log(LOG_WARNING, "Cannot allocate the channel for variables substitution\n"); ast_log(LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
} else if (ast_test_flag((&globalflags), VM_PBXSKIP)) }
} else if (ast_test_flag((&globalflags), VM_PBXSKIP)) {
fprintf(p, "Subject: New message %d in mailbox %s" ENDL, msgnum + 1, mailbox); fprintf(p, "Subject: New message %d in mailbox %s" ENDL, msgnum + 1, mailbox);
else } else {
fprintf(p, "Subject: [PBX]: New message %d in mailbox %s" ENDL, msgnum + 1, mailbox); fprintf(p, "Subject: [PBX]: New message %d in mailbox %s" ENDL, msgnum + 1, mailbox);
}
fprintf(p, "Message-ID: <Asterisk-%d-%d-%s-%d@%s>" ENDL, msgnum + 1, (unsigned int)ast_random(), mailbox, (int)getpid(), host); fprintf(p, "Message-ID: <Asterisk-%d-%d-%s-%d@%s>" ENDL, msgnum + 1, (unsigned int)ast_random(), mailbox, (int)getpid(), host);
if (imap) { if (imap) {
/* additional information needed for IMAP searching */ /* additional information needed for IMAP searching */
@ -2041,19 +2064,22 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
fprintf(p, "X-Asterisk-VM-Extension: %s" ENDL, mailbox); fprintf(p, "X-Asterisk-VM-Extension: %s" ENDL, mailbox);
fprintf(p, "X-Asterisk-VM-Priority: %d" ENDL, chan->priority); 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-channel: %s" ENDL, chan->name);
fprintf(p, "X-Asterisk-VM-Caller-ID-Num: %s" ENDL, cidnum); fprintf(p, "X-Asterisk-VM-Caller-ID-Num: %s" ENDL, enc_cidnum);
fprintf(p, "X-Asterisk-VM-Caller-ID-Name: %s" ENDL, cidname); fprintf(p, "X-Asterisk-VM-Caller-ID-Name: %s" ENDL, enc_cidname);
fprintf(p, "X-Asterisk-VM-Duration: %d" ENDL, duration); 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-Category: %s" ENDL, category);
}
fprintf(p, "X-Asterisk-VM-Message-Type: %s" ENDL, msgnum > -1 ? "Message" : greeting_attachment); 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-date: %s" ENDL, date);
fprintf(p, "X-Asterisk-VM-Orig-time: %ld" ENDL, (long)time(NULL)); fprintf(p, "X-Asterisk-VM-Orig-time: %ld" ENDL, (long)time(NULL));
} }
if (!ast_strlen_zero(cidnum)) if (!ast_strlen_zero(cidnum)) {
fprintf(p, "X-Asterisk-CallerID: %s" ENDL, cidnum); fprintf(p, "X-Asterisk-CallerID: %s" ENDL, enc_cidnum);
if (!ast_strlen_zero(cidname)) }
fprintf(p, "X-Asterisk-CallerIDName: %s" ENDL, cidname); if (!ast_strlen_zero(cidname)) {
fprintf(p, "X-Asterisk-CallerIDName: %s" ENDL, enc_cidname);
}
fprintf(p, "MIME-Version: 1.0" ENDL); fprintf(p, "MIME-Version: 1.0" ENDL);
if (attach_user_voicemail) { if (attach_user_voicemail) {
/* Something unique. */ /* Something unique. */

Loading…
Cancel
Save