aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 }