diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-07-16 21:55:03 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-07-16 21:55:03 +0000 |
commit | 38e54f1c1384e76adafb4e611a6bd456e4351d42 (patch) | |
tree | f5abfca61c237890adcbaece5015c6d5f63fe352 /networking | |
parent | 4d0cd2894740a2db4cdcd4413e2d4e745dff98bb (diff) |
sendmail: do not discard all headers
Diffstat (limited to 'networking')
-rw-r--r-- | networking/sendmail.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/networking/sendmail.c b/networking/sendmail.c index 2332f6afb..653f2e60a 100644 --- a/networking/sendmail.c +++ b/networking/sendmail.c @@ -375,6 +375,7 @@ int sendgetmail_main(int argc UNUSED_PARAM, char **argv) const char *p; char *q; llist_t *l; + llist_t *headers = NULL; // recipients specified as arguments while (*argv) { @@ -390,6 +391,7 @@ int sendgetmail_main(int argc UNUSED_PARAM, char **argv) // N.B. subject read from body has priority // over that specified on command line. // recipients are merged + // N.B. other headers are collected and will be dumped verbatim if (opts & OPTS_t || !opt_recipients) { // fetch recipients and (optionally) subject char *s; @@ -402,11 +404,12 @@ int sendgetmail_main(int argc UNUSED_PARAM, char **argv) */ } else if (0 == strncmp("Subject: ", s, 9)) { opt_subject = s+9; opts |= OPTS_s; + } else if (s[0]) { + // misc header + llist_add_to_end(&headers, s); } else { - char first = s[0]; free(s); - if (!first) - break; // empty line + break; // empty line } } } @@ -476,6 +479,11 @@ int sendgetmail_main(int argc UNUSED_PARAM, char **argv) if (opts & OPTS_N) printf("Disposition-Notification-To: %s\r\n", opt_from); + // put headers we could have preread with -t + for (l = headers; l; l = l->link) { + printf("%s\r\n", l->data); + } + // make a random string -- it will delimit message parts srand(monotonic_us()); boundary = xasprintf("%d-%d-%d", rand(), rand(), rand()); |