aboutsummaryrefslogtreecommitdiff
path: root/mailutils
diff options
context:
space:
mode:
authorAaro Koskinen <aaro.koskinen@iki.fi>2013-02-25 00:45:06 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2013-03-18 18:45:13 +0100
commit14285d14a5826eb172e02cf2f6f1ec096add01b0 (patch)
treec40eb0c4810455b84bd9035444e16f89a4486862 /mailutils
parent7c6f2d4207e11ca60964132deb3bd1c4cb583aba (diff)
downloadbusybox-w32-14285d14a5826eb172e02cf2f6f1ec096add01b0.tar.gz
busybox-w32-14285d14a5826eb172e02cf2f6f1ec096add01b0.tar.bz2
busybox-w32-14285d14a5826eb172e02cf2f6f1ec096add01b0.zip
sendmail: avoid sending mail to wrong addresses
If we get an address we cannot parse properly, we currently just strip the unknown characters and still try to send it. This is considered harmful as the resulting address may still be valid but different from what the user originally intended. Instead, skip sending to an address we cannot fully understand and print the characters what we have scanned so far. Leading and trailing whitespace is allowed and silently stripped. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'mailutils')
-rw-r--r--mailutils/sendmail.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c
index c426e9d85..4f73512e9 100644
--- a/mailutils/sendmail.c
+++ b/mailutils/sendmail.c
@@ -94,9 +94,22 @@ static char *sane_address(char *str)
94{ 94{
95 char *s = str; 95 char *s = str;
96 char *p = s; 96 char *p = s;
97 int leading_space = 1;
98 int trailing_space = 0;
99
97 while (*s) { 100 while (*s) {
98 if (isalnum(*s) || '_' == *s || '-' == *s || '.' == *s || '@' == *s) { 101 if (isspace(*s)) {
102 trailing_space = !leading_space;
103 } else {
99 *p++ = *s; 104 *p++ = *s;
105 if ((!isalnum(*s) && !strchr("_-.@", *s)) ||
106 trailing_space) {
107 *p = '\0';
108 bb_error_msg("Bad address: %s", str);
109 *str = '\0';
110 return str;
111 }
112 leading_space = 0;
100 } 113 }
101 s++; 114 s++;
102 } 115 }
@@ -106,6 +119,8 @@ static char *sane_address(char *str)
106 119
107static void rcptto(const char *s) 120static void rcptto(const char *s)
108{ 121{
122 if (!*s)
123 return;
109 // N.B. we don't die if recipient is rejected, for the other recipients may be accepted 124 // N.B. we don't die if recipient is rejected, for the other recipients may be accepted
110 if (250 != smtp_checkp("RCPT TO:<%s>", s, -1)) 125 if (250 != smtp_checkp("RCPT TO:<%s>", s, -1))
111 bb_error_msg("Bad recipient: <%s>", s); 126 bb_error_msg("Bad recipient: <%s>", s);