sendmail: support addresses inside angle brackets
authorAaro Koskinen <aaro.koskinen@iki.fi>
Sun, 24 Feb 2013 22:45:08 +0000 (00:45 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 18 Mar 2013 17:45:14 +0000 (18:45 +0100)
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>
mailutils/sendmail.c

index 0f536ad..10a5a85 100644 (file)
@@ -117,6 +117,24 @@ static char *sane_address(char *str)
        return str;
 }
 
+// check for an address inside angle brackets, if not found fall back to normal
+static char *angle_address(char *str)
+{
+       char *s = str;
+       char *e = str + strlen(str);
+
+       while (e != str && (isspace(*e) || *e == '\0'))
+               e--;
+       if (*e != '>')
+               goto done;
+       *e = '\0';
+       e = strrchr(s, '<');
+       if (e != NULL)
+               s = e + 1;
+done:
+       return sane_address(s);
+}
+
 static void rcptto(const char *s)
 {
        if (!*s)
@@ -300,13 +318,13 @@ 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)) {
                                char *r = xstrdup(s+3);
-                               rcptto(sane_address(r));
+                               rcptto(angle_address(r));
                                free(r);
                                goto addheader;
                        }
                        // Bcc: header adds blind copy (hidden) recipient
                        if (0 == strncasecmp("Bcc:", s, 4)) {
-                               rcptto(sane_address(s+4));
+                               rcptto(angle_address(s+4));
                                free(s);
                                continue; // N.B. Bcc: vanishes from headers!
                        }