]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Recorded merge of revisions 255592 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Wed, 31 Mar 2010 19:34:39 +0000 (19:34 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Wed, 31 Mar 2010 19:34:39 +0000 (19:34 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r255592 | tilghman | 2010-03-31 14:13:02 -0500 (Wed, 31 Mar 2010) | 22 lines

  Recorded merge of revisions 255591 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r255591 | tilghman | 2010-03-31 14:09:46 -0500 (Wed, 31 Mar 2010) | 15 lines

    Ensure line terminators in email are consistent.

    Fixes an issue with certain Mail Transport Agents, where attachments are not
    interpreted correctly.

    (closes issue #16557)
     Reported by: jcovert
     Patches:
           20100308__issue16557__1.4.diff.txt uploaded by tilghman (license 14)
           20100308__issue16557__1.6.0.diff.txt uploaded by tilghman (license 14)
           20100308__issue16557__trunk.diff.txt uploaded by tilghman (license 14)
     Tested by: ebroad, zktech

    Reviewboard: https://reviewboard.asterisk.org/r/544/
  ........
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@255675 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c

index c6b07a3a51b5b11e67efbcd122d883d7b25badb5..d9b26eb1889f392a72cc13bd29be2afc292acef1 100644 (file)
@@ -214,7 +214,11 @@ static AST_LIST_HEAD_STATIC(vmstates, vmstate);
 
 #define BASELINELEN 72
 #define BASEMAXINLINE 256
-#define eol "\r\n"
+#ifdef IMAP_STORAGE
+#define ENDL "\r\n"
+#else
+#define ENDL "\n"
+#endif
 
 #define MAX_DATETIME_FORMAT    512
 #define MAX_NUM_CID_CONTEXTS 10
@@ -3769,14 +3773,16 @@ static int inchar(struct baseio *bio, FILE *fi)
 static int ochar(struct baseio *bio, int c, FILE *so)
 {
        if (bio->linelength >= BASELINELEN) {
-               if (fputs(eol,so) == EOF)
+               if (fputs(ENDL, so) == EOF) {
                        return -1;
+               }
 
                bio->linelength= 0;
        }
 
-       if (putc(((unsigned char)c),so) == EOF)
+       if (putc(((unsigned char) c), so) == EOF) {
                return -1;
+       }
 
        bio->linelength++;
 
@@ -3845,8 +3851,9 @@ static int base_encode(char *filename, FILE *so)
 
        fclose(fi);
        
-       if (fputs(eol,so)==EOF)
+       if (fputs(ENDL, so) == EOF) {
                return 0;
+       }
 
        return 1;
 }
@@ -4051,11 +4058,6 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
        char *greeting_attachment; 
        char filename[256];
 
-#ifdef IMAP_STORAGE
-#define ENDL "\r\n"
-#else
-#define ENDL "\n"
-#endif
 
        /* One alloca for multiple fields */
        len_passdata2 = strlen(vmu->fullname);
@@ -4234,7 +4236,22 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
                        memset(passdata, 0, vmlen);
                        prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, fromfolder, cidnum, cidname, dur, date, passdata, vmlen, category, flag);
                        pbx_substitute_variables_helper(ast, emailbody, passdata, vmlen);
+#ifdef IMAP_STORAGE
+                       {
+                               /* Convert body to native line terminators for IMAP backend */
+                               char *line = passdata, *next;
+                               do {
+                                       /* Terminate line before outputting it to the file */
+                                       if ((next = strchr(line, '\n'))) {
+                                               *next++ = '\0';
+                                       }
+                                       fprintf(p, "%s" ENDL, line);
+                                       line = next;
+                               } while (!ast_strlen_zero(line));
+                       }
+#else
                        fprintf(p, "%s" ENDL, passdata);
+#endif
                        ast_channel_free(ast);
                } else
                        ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");