sendmail: don't add multiple To: headers
authorAaro Koskinen <aaro.koskinen@iki.fi>
Sun, 24 Feb 2013 22:45:12 +0000 (00:45 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 18 Mar 2013 17:46:31 +0000 (18:46 +0100)
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>
mailutils/sendmail.c

index 36a1b97cb8bcec5400fc0937108d6217cf468b94..d58f503a0a9632967cd42bce51c9ffa1292529d1 100644 (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