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/trunk@124912 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
2eebb973da
commit
7ec25255c5
1 changed files with 38 additions and 13 deletions
|
@ -703,6 +703,22 @@ 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Sets default voicemail system options to a voicemail user.
|
* \brief Sets default voicemail system options to a voicemail user.
|
||||||
|
@ -2405,6 +2421,7 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
|
||||||
char bound[256];
|
char bound[256];
|
||||||
char dur[256];
|
char dur[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;
|
||||||
|
@ -2416,7 +2433,9 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
|
||||||
#define ENDL "\n"
|
#define ENDL "\n"
|
||||||
#endif
|
#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, '@'))
|
if (strchr(srcemail, '@'))
|
||||||
ast_copy_string(who, srcemail, sizeof(who));
|
ast_copy_string(who, srcemail, sizeof(who));
|
||||||
|
@ -2441,16 +2460,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, 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);
|
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(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
|
ast_log(AST_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);
|
||||||
|
@ -2461,12 +2482,13 @@ 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, 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);
|
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(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
|
ast_log(AST_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)) {
|
||||||
if (ast_strlen_zero(flag)) {
|
if (ast_strlen_zero(flag)) {
|
||||||
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);
|
||||||
|
@ -2493,19 +2515,22 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
|
||||||
fprintf(p, "X-Asterisk-VM-Flag: %s" ENDL, flag);
|
fprintf(p, "X-Asterisk-VM-Flag: %s" ENDL, flag);
|
||||||
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…
Reference in a new issue