From: Jakob Hirsch <jh@plonk.de>
To: mlmmj@mlmmj.org
Subject: Re: Fw: footer isn't appended to multipart messages (part II: reality
Date: Sat, 16 Jul 2005 13:12:56 +0000 [thread overview]
Message-ID: <42D907D8.6070102@plonk.de> (raw)
In-Reply-To: <200507052130.02825.lists@seattleserver.com>
[-- Attachment #1: Type: text/plain, Size: 184 bytes --]
Mads Martin Joergensen wrote:
> Thanks for the patch!
de nada.
But better take the attached one. :)
> I'll have a look next week, when I'm back from vacation.
Have a nice holiday!
[-- Attachment #2: mlmmj-footer-mime2.patch --]
[-- Type: text/plain, Size: 4712 bytes --]
--- mlmmj-1.2.8/src/do_all_the_voodo_here.c 2005-05-09 14:50:15.000000000 +0200
+++ mlmmj-1.2.8-jh1/src/do_all_the_voodo_here.c 2005-07-16 13:53:00.000000000 +0200
@@ -82,6 +82,9 @@
char *hdrline, *subject, *unqp;
int hdrsadded = 0;
int subject_present = 0;
+ int mime = 0;
+ char *content_orig = NULL; /* original content-type header */
+ char *boundary = NULL;
allhdrs->count = 0;
allhdrs->strs = NULL;
@@ -160,6 +163,55 @@
}
}
+ /* Content-Type */
+ if(footfd>=0 && !mime && !strncasecmp(hdrline, "Content-Type:", 13)) {
+ char* p;
+ int len;
+ /* search first non-LWSP */
+ for (p = hdrline+13; *p==' ' || *p=='\t'; p++);
+
+ if (!strncasecmp(p, "multipart/mixed", 15)) {
+ mime = 1;
+
+ /* get boundary string */
+ p = index(p, ';');
+ if (p != NULL)
+ p = strstr(p, "boundary");
+ if (p != NULL)
+ p = index(p, '=');
+ if (p != NULL)
+ p = index(p, '"') + 1;
+ if (p == NULL) {
+ log_error(LOG_ARGS, "MIME multipart but no boundary");
+ mime = 0;
+ } else {
+ /* find closing quote */
+ for(len=0; p[len]!='"' && p[len]!=0; ++len);
+ if(p[len] == 0) {
+ log_error(LOG_ARGS, "no closing quote in boundary");
+ mime = 0;
+ } else {
+ boundary = mymalloc(len + 1);
+ strncpy(boundary, p, len);
+ boundary[len] = 0;
+ }
+ }
+ } else if (!strncasecmp(p, "multipart/alternative", 21)) {
+ mime = 2;
+
+ /* create new boundary for MIME-encapsulation */
+ boundary = random_str();
+
+ /* save for later use */
+ content_orig = hdrline;
+ /* and create new content-type header */
+ hdrline = concatstr(3,
+ "Content-Type: multipart/mixed; boundary=\"",
+ boundary, "\"\n");
+
+ }
+ }
+
/* Should it be stripped? */
if(delhdrs) {
if(!findit(hdrline, delhdrs))
@@ -171,18 +223,101 @@
myfree(hdrline);
}
- /* Just print the rest of the mail */
- if(dumpfd2fd(infd, outfd) < 0) {
- log_error(LOG_ARGS, "Error when dumping rest of mail");
- return -1;
- }
+ /* MIME-Handling */
+ switch (mime) {
+ char* s;
+ unsigned int i;
+
+ case 0 : /* no MIME, plain message */
+ /* Just print the rest of the mail */
+ if(dumpfd2fd(infd, outfd) < 0) {
+ log_error(LOG_ARGS, "Error when dumping rest of mail");
+ return -1;
+ }
- /* No more, lets add the footer if one */
- if(footfd >= 0)
- if(dumpfd2fd(footfd, outfd) < 0) {
- log_error(LOG_ARGS, "Error when adding footer");
- return -1;
- }
+ /* No more, lets add the footer if one */
+ if(footfd >= 0)
+ if(dumpfd2fd(footfd, outfd) < 0) {
+ log_error(LOG_ARGS, "Error when adding footer");
+ return -1;
+ }
+
+ break;
+
+ case 1 : /* multipart/mixed */
+
+ if(dumpfd2fd(infd, outfd) < 0) {
+ log_error(LOG_ARGS, "Error when dumping rest of mail");
+ return -1;
+ }
+
+ /* seek back to the end of the close-delimiter to kill
+ the last two hyphens. hopefully nobody puts too
+ much garbage in the epilogue or else this will fail... */
+ i = 2 * strlen(boundary) - 1;
+ lseek(outfd, -i, SEEK_END);
+ s = mymalloc(i+1);
+ read(outfd, s, i);
+ s[i] = 0;
+ i -= strstr(s, boundary) - s + strlen(boundary);
+ myfree(s);
+ if (i>2*strlen(boundary)) {
+ log_error(LOG_ARGS, "Error seeking MIME close-delimiter");
+ } else {
+ lseek(outfd, -i, SEEK_END);
+
+ s = concatstr(2, "\nContent-Type: text/plain\n",
+ "Content-Disposition: inline\n\n");
+ writen(outfd, s, strlen(s));
+ myfree(s);
+
+ if(dumpfd2fd(footfd, outfd) < 0) {
+ log_error(LOG_ARGS, "Error when adding footer");
+ myfree(boundary);
+ return -1;
+ }
+
+ s = concatstr(3, "\n--", boundary, "--\n");
+ writen(outfd, s, strlen(s));
+ myfree(s);
+ }
+ myfree(boundary);
+
+ break;
+
+ case 2 : /* multipart/alternative */
+ s = concatstr(5,
+ "This is a multi-part message in MIME format.\n\n--",
+ boundary, "\n",
+ content_orig, "\n");
+ myfree(content_orig);
+ writen(outfd, s, strlen(s));
+ myfree(s);
+
+ if(dumpfd2fd(infd, outfd) < 0) {
+ log_error(LOG_ARGS, "Error when dumping rest of mail");
+ return -1;
+ }
+
+ s = concatstr(4,
+ "\n--", boundary,
+ "\nContent-Type: text/plain\n",
+ "Content-Disposition: inline\n\n");
+ writen(outfd, s, strlen(s));
+ myfree(s);
+
+ if(dumpfd2fd(footfd, outfd) < 0) {
+ log_error(LOG_ARGS, "Error when adding footer");
+ return -1;
+ }
+
+ s = concatstr(3, "\n--", boundary, "--\n");
+ myfree(boundary);
+ writen(outfd, s, strlen(s));
+ myfree(s);
+
+ break;
+ }
fsync(outfd);
next prev parent reply other threads:[~2005-07-16 13:12 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-05 21:30 footer isn't appended to multipart messages Casey Allen Shobe
2005-07-05 22:09 ` Sven 'Darkman' Michels
2005-07-05 23:32 ` footer isn't appended to multipart messages (part II: reality check!) Patrick Bennett
2005-07-06 2:38 ` Casey Allen Shobe
2005-07-06 6:17 ` Fw: " Patrick Bennett
2005-07-06 8:05 ` footer isn't appended to multipart messages Mads Martin Joergensen
2005-07-06 8:12 ` footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-06 8:15 ` Mads Martin Joergensen
2005-07-06 13:00 ` Fw: " Morten K. Poulsen
2005-07-07 15:31 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-07 16:07 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-09 18:10 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-15 14:29 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-16 13:12 ` Jakob Hirsch [this message]
2005-07-16 14:52 ` Mads Martin Joergensen
2005-07-18 9:49 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-18 18:12 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-18 23:26 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-19 7:25 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-19 7:59 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-19 8:05 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-19 18:44 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-19 22:09 ` Jakob Hirsch
2005-07-20 6:18 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-10-10 5:28 ` Mads Martin Joergensen
2005-10-10 21:41 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-10-10 21:47 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Neale Pickett
2005-10-10 22:08 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-10-11 0:15 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-10-11 3:06 ` Neale Pickett
2005-10-11 7:52 ` Fw: footer isn't appended to multipart messages (part II: Jakob Hirsch
2005-10-11 8:52 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-10-11 9:30 ` Fw: footer isn't appended to multipart messages (part II: Jakob Hirsch
2005-10-11 12:24 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-10-11 12:55 ` Neale Pickett
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=42D907D8.6070102@plonk.de \
--to=jh@plonk.de \
--cc=mlmmj@mlmmj.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox