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

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

Headers To:, Cc: and Bcc: may have a list of comma-separated
addresses. Add support for that. Commas inside double quotes are ignored.

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

diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c
index 10a5a85..12ca054 100644
--- a/mailutils/sendmail.c
+++ b/mailutils/sendmail.c
@@ -144,6 +144,33 @@ static void rcptto(const char *s)
 		bb_error_msg("Bad recipient: <%s>", s);
 }
 
+// send to a list of comma separated addresses
+static void rcptto_list(const char *_str)
+{
+	char *str = xstrdup(_str);
+	int len = strlen(str);
+	int in_quote = 0;
+	char *s = str;
+	char prev = 0;
+	int pos;
+
+	for (pos = 0; pos < len; pos++) {
+		char ch = str[pos];
+
+		if (ch == 0x22 && prev != 0x5c) {
+			in_quote = !in_quote;
+		} else if (!in_quote && ch == ',') {
+			str[pos] = '\0';
+			rcptto(angle_address(s));
+			s = str + pos + 1;
+		}
+		prev = ch;
+	}
+	if (prev != ',')
+		rcptto(angle_address(s));
+	free(str);
+}
+
 int sendmail_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int sendmail_main(int argc UNUSED_PARAM, char **argv)
 {
@@ -317,14 +344,12 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
 		// To: or Cc: headers add recipients
 		if (opts & OPT_t) {
 			if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) {
-				char *r = xstrdup(s+3);
-				rcptto(angle_address(r));
-				free(r);
+				rcptto_list(s+3);
 				goto addheader;
 			}
 			// Bcc: header adds blind copy (hidden) recipient
 			if (0 == strncasecmp("Bcc:", s, 4)) {
-				rcptto(angle_address(s+4));
+				rcptto_list(s+4);
 				free(s);
 				continue; // N.B. Bcc: vanishes from 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