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