summaryrefslogtreecommitdiffhomepage
path: root/networking
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-07-16 21:55:03 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-07-16 21:55:03 +0000
commit38e54f1c1384e76adafb4e611a6bd456e4351d42 (patch)
treef5abfca61c237890adcbaece5015c6d5f63fe352 /networking
parent4d0cd2894740a2db4cdcd4413e2d4e745dff98bb (diff)
sendmail: do not discard all headers
Diffstat (limited to 'networking')
-rw-r--r--networking/sendmail.c14
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());