aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaro Koskinen <aaro.koskinen@iki.fi>2013-02-25 00:45:08 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2013-03-18 18:45:14 +0100
commit06ad964ae61591ef74313d7c1746367430d0d82b (patch)
treeade2d7da2e7fa06227d41deed11ab2456965d3b8
parent95e99e5271cb15247ba8926f0352387643164528 (diff)
downloadbusybox-w32-06ad964ae61591ef74313d7c1746367430d0d82b.tar.gz
busybox-w32-06ad964ae61591ef74313d7c1746367430d0d82b.tar.bz2
busybox-w32-06ad964ae61591ef74313d7c1746367430d0d82b.zip
sendmail: support addresses inside angle brackets
When we extract addresses from the e-mail, try to first check for an address inside angle brackets. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--mailutils/sendmail.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c
index 0f536adae..10a5a85d4 100644
--- a/mailutils/sendmail.c
+++ b/mailutils/sendmail.c
@@ -117,6 +117,24 @@ static char *sane_address(char *str)
117 return str; 117 return str;
118} 118}
119 119
120// check for an address inside angle brackets, if not found fall back to normal
121static char *angle_address(char *str)
122{
123 char *s = str;
124 char *e = str + strlen(str);
125
126 while (e != str && (isspace(*e) || *e == '\0'))
127 e--;
128 if (*e != '>')
129 goto done;
130 *e = '\0';
131 e = strrchr(s, '<');
132 if (e != NULL)
133 s = e + 1;
134done:
135 return sane_address(s);
136}
137
120static void rcptto(const char *s) 138static void rcptto(const char *s)
121{ 139{
122 if (!*s) 140 if (!*s)
@@ -300,13 +318,13 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
300 if (opts & OPT_t) { 318 if (opts & OPT_t) {
301 if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) { 319 if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) {
302 char *r = xstrdup(s+3); 320 char *r = xstrdup(s+3);
303 rcptto(sane_address(r)); 321 rcptto(angle_address(r));
304 free(r); 322 free(r);
305 goto addheader; 323 goto addheader;
306 } 324 }
307 // Bcc: header adds blind copy (hidden) recipient 325 // Bcc: header adds blind copy (hidden) recipient
308 if (0 == strncasecmp("Bcc:", s, 4)) { 326 if (0 == strncasecmp("Bcc:", s, 4)) {
309 rcptto(sane_address(s+4)); 327 rcptto(angle_address(s+4));
310 free(s); 328 free(s);
311 continue; // N.B. Bcc: vanishes from headers! 329 continue; // N.B. Bcc: vanishes from headers!
312 } 330 }