sendmail: don't add multiple To: headers

When adding To: header, add only a single header. If there are multiple
addresses, make it multiline.

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Aaro Koskinen 2013-02-25 00:45:12 +02:00 committed by Denys Vlasenko
parent 4a732220e9
commit e82bfef839

View File

@ -365,7 +365,7 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
continue; // N.B. Bcc: vanishes from headers!
}
}
check_hdr = list && isspace(s[0]);
check_hdr = (list && isspace(s[0]));
if (strchr(s, ':') || check_hdr) {
// other headers go verbatim
// N.B. RFC2822 2.2.3 "Long Header Fields" allows for headers to occupy several lines.
@ -389,14 +389,27 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
// so stop "analyze headers" mode
reenter:
// put recipients specified on cmdline
check_hdr = 1;
while (*argv) {
char *t = sane_address(*argv);
rcptto(t);
//if (MAX_HEADERS && ++nheaders >= MAX_HEADERS)
// goto bail;
if (!has_to)
if (!has_to) {
const char *hdr;
if (check_hdr && argv[1])
hdr = "To: %s,";
else if (check_hdr)
hdr = "To: %s";
else if (argv[1])
hdr = "To: %s," + 3;
else
hdr = "To: %s" + 3;
llist_add_to_end(&list,
xasprintf("To: %s", t));
xasprintf(hdr, t));
check_hdr = 0;
}
argv++;
}
// enter "put message" mode