[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    [PATCH 5/7] sendmail: support long header fields for recipients
From:       Aaro Koskinen <aaro.koskinen () iki ! fi>
Date:       2013-02-24 22:45:10
Message-ID: 1361745912-9406-6-git-send-email-aaro.koskinen () iki ! fi
[Download RAW message or body]

Support long header fields in To:, Cc: and Bcc: headers.

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
---
 mailutils/sendmail.c |   19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c
index 12ca054..9c1c589 100644
--- a/mailutils/sendmail.c
+++ b/mailutils/sendmail.c
@@ -181,6 +181,12 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
 	char *host = sane_address(safe_gethostname());
 	unsigned nheaders = 0;
 	int code;
+	enum {
+		HDR_OTHER = 0,
+		HDR_TOCC,
+		HDR_BCC,
+	} last_hdr = 0;
+	int check_hdr;
 
 	enum {
 	//--- standard options
@@ -345,20 +351,31 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
 		if (opts & OPT_t) {
 			if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) {
 				rcptto_list(s+3);
+				last_hdr = HDR_TOCC;
 				goto addheader;
 			}
 			// Bcc: header adds blind copy (hidden) recipient
 			if (0 == strncasecmp("Bcc:", s, 4)) {
 				rcptto_list(s+4);
 				free(s);
+				last_hdr = HDR_BCC;
 				continue; // N.B. Bcc: vanishes from headers!
 			}
 		}
-		if (strchr(s, ':') || (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.
 			// Continuation is denoted by prefixing additional lines with whitespace(s).
 			// Thanks (stefan.seyfried at googlemail.com) for pointing this out.
+			if (check_hdr && last_hdr != HDR_OTHER) {
+				rcptto_list(s+1);
+				if (last_hdr == HDR_BCC)
+					continue;
+					// N.B. Bcc: vanishes from headers!
+			} else {
+				last_hdr = HDR_OTHER;
+			}
  addheader:
 			// N.B. we allow MAX_HEADERS generic headers at most to prevent attacks
 			if (MAX_HEADERS && ++nheaders >= MAX_HEADERS)
-- 
1.7.10.4

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic