From: Vsevolod Stakhov Date: Mon, 25 Apr 2016 09:10:16 +0000 (+0100) Subject: [Feature] Unescape and unquote smtp addresses X-Git-Tag: 1.3.0~638 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5ea8345fa3deb583cc99d9d7aa7659b90aad3743;p=rspamd.git [Feature] Unescape and unquote smtp addresses --- diff --git a/src/libmime/email_addr.c b/src/libmime/email_addr.c index 6dfc6f0c6..9305e4693 100644 --- a/src/libmime/email_addr.c +++ b/src/libmime/email_addr.c @@ -24,12 +24,44 @@ static void rspamd_email_addr_dtor (struct rspamd_email_address *addr) { - if (addr->flags & RSPAMD_EMAIL_ADDR_ALLOCATED) { + if (addr->flags & RSPAMD_EMAIL_ADDR_ADDR_ALLOCATED) { g_free ((void *)addr->addr); } + + if (addr->flags & RSPAMD_EMAIL_ADDR_USER_ALLOCATED) { + g_free ((void *)addr->user); + } + g_slice_free1 (sizeof (*addr), addr); } +static void +rspamd_email_address_unescape (struct rspamd_email_address *addr) +{ + const char *h, *end; + char *t, *d; + + if (addr->user_len == 0) { + return; + } + + d = g_malloc (addr->user_len); + t = d; + h = addr->user; + end = h + addr->user_len; + + while (h < end) { + if (*h != '\\') { + *t++ = *h; + } + h ++; + } + + addr->user = d; + addr->user_len = t - d; + addr->flags |= RSPAMD_EMAIL_ADDR_USER_ALLOCATED; +} + struct rspamd_email_address * rspamd_email_address_from_smtp (const gchar *str, guint len) { @@ -47,13 +79,18 @@ rspamd_email_address_from_smtp (const gchar *str, guint len) memcpy (ret, &addr, sizeof (addr)); if ((ret->flags & RSPAMD_EMAIL_ADDR_QUOTED) && ret->addr[0] == '"') { + if (ret->flags & RSPAMD_EMAIL_ADDR_HAS_BACKSLASH) { + /* We also need to unquote user */ + rspamd_email_address_unescape (ret); + } + /* We need to unquote addr */ nlen = ret->domain_len + ret->user_len + 2; ret->addr = g_malloc (nlen + 1); ret->addr_len = rspamd_snprintf ((char *)ret->addr, nlen, "%*s@%*s", (gint)ret->user_len, ret->user, (gint)ret->domain_len, ret->domain); - ret->flags |= RSPAMD_EMAIL_ADDR_ALLOCATED; + ret->flags |= RSPAMD_EMAIL_ADDR_ADDR_ALLOCATED; } REF_INIT_RETAIN (ret, rspamd_email_addr_dtor); diff --git a/src/libmime/email_addr.h b/src/libmime/email_addr.h index 7009c472d..98be33abe 100644 --- a/src/libmime/email_addr.h +++ b/src/libmime/email_addr.h @@ -28,7 +28,9 @@ enum rspamd_email_address_flags { RSPAMD_EMAIL_ADDR_QUOTED = (1 << 3), RSPAMD_EMAIL_ADDR_EMPTY = (1 << 4), RSPAMD_EMAIL_ADDR_SMTP = (1 << 5), - RSPAMD_EMAIL_ADDR_ALLOCATED = (1 << 6), + RSPAMD_EMAIL_ADDR_HAS_BACKSLASH = (1 << 6), + RSPAMD_EMAIL_ADDR_ADDR_ALLOCATED = (1 << 7), + RSPAMD_EMAIL_ADDR_USER_ALLOCATED = (1 << 8), }; /* diff --git a/src/libmime/parsers/smtp_addr_parser.c b/src/libmime/parsers/smtp_addr_parser.c index f5476054f..12cf5eecb 100644 --- a/src/libmime/parsers/smtp_addr_parser.c +++ b/src/libmime/parsers/smtp_addr_parser.c @@ -1,7 +1,7 @@ #line 1 "src/ragel/smtp_addr_parser.rl" -#line 76 "src/ragel/smtp_addr_parser.rl" +#line 80 "src/ragel/smtp_addr_parser.rl" @@ -10,26 +10,27 @@ static const char _smtp_addr_parser_trans_keys[] = { 0, 0, 9, 126, 33, 126, 33, 126, 48, 122, 48, 122, 48, 122, 48, 122, 46, 122, 48, 57, 46, 57, 48, 57, 46, 57, 48, 57, 48, 93, 48, 93, 93, 93, 46, 57, 46, 46, 46, 57, 46, 46, 46, 122, 46, 122, 48, 122, - 33, 126, 33, 126, 48, 122, 32, 126, 32, 126, 64, 64, 32, 126, 33, 126, - 33, 126, 33, 126, 48, 122, 46, 122, 48, 122, 48, 122, 48, 122, 46, 122, - 48, 57, 46, 57, 48, 57, 46, 57, 48, 57, 48, 93, 48, 93, 93, 93, - 62, 62, 46, 57, 46, 46, 46, 57, 46, 46, 46, 122, 46, 122, 48, 122, - 33, 126, 33, 126, 48, 122, 32, 126, 32, 126, 64, 64, 32, 126, 48, 122, - 44, 122, 64, 64, 33, 126, 48, 122, 48, 122, 44, 122, 64, 64, 33, 126, - 48, 122, 9, 122, 9, 32, 9, 32, 9, 32, 9, 32, 0 + 33, 126, 33, 126, 48, 122, 32, 126, 32, 126, 64, 64, 32, 126, 32, 126, + 33, 126, 33, 126, 33, 126, 48, 122, 46, 122, 48, 122, 48, 122, 48, 122, + 46, 122, 48, 57, 46, 57, 48, 57, 46, 57, 48, 57, 48, 93, 48, 93, + 93, 93, 62, 62, 46, 57, 46, 46, 46, 57, 46, 46, 46, 122, 46, 122, + 48, 122, 33, 126, 33, 126, 48, 122, 32, 126, 32, 126, 64, 64, 32, 126, + 32, 126, 48, 122, 44, 122, 64, 64, 33, 126, 48, 122, 48, 122, 44, 122, + 64, 64, 33, 126, 48, 122, 9, 122, 9, 32, 9, 32, 9, 32, 9, 32, + 0 }; static const char _smtp_addr_parser_key_spans[] = { 0, 118, 94, 94, 75, 75, 75, 75, 77, 10, 12, 10, 12, 10, 46, 46, 1, 12, 1, 12, 1, 77, 77, 75, - 94, 94, 75, 95, 95, 1, 95, 94, - 94, 94, 75, 77, 75, 75, 75, 77, - 10, 12, 10, 12, 10, 46, 46, 1, - 1, 12, 1, 12, 1, 77, 77, 75, - 94, 94, 75, 95, 95, 1, 95, 75, - 79, 1, 94, 75, 75, 79, 1, 94, - 75, 114, 24, 24, 24, 24 + 94, 94, 75, 95, 95, 1, 95, 95, + 94, 94, 94, 75, 77, 75, 75, 75, + 77, 10, 12, 10, 12, 10, 46, 46, + 1, 1, 12, 1, 12, 1, 77, 77, + 75, 94, 94, 75, 95, 95, 1, 95, + 95, 75, 79, 1, 94, 75, 75, 79, + 1, 94, 75, 114, 24, 24, 24, 24 }; static const short _smtp_addr_parser_index_offsets[] = { @@ -37,12 +38,12 @@ static const short _smtp_addr_parser_index_offsets[] = { 613, 691, 702, 715, 726, 739, 750, 797, 844, 846, 859, 861, 874, 876, 954, 1032, 1108, 1203, 1298, 1374, 1470, 1566, 1568, 1664, - 1759, 1854, 1949, 2025, 2103, 2179, 2255, 2331, - 2409, 2420, 2433, 2444, 2457, 2468, 2515, 2562, - 2564, 2566, 2579, 2581, 2594, 2596, 2674, 2752, - 2828, 2923, 3018, 3094, 3190, 3286, 3288, 3384, - 3460, 3540, 3542, 3637, 3713, 3789, 3869, 3871, - 3966, 4042, 4157, 4182, 4207, 4232 + 1760, 1855, 1950, 2045, 2121, 2199, 2275, 2351, + 2427, 2505, 2516, 2529, 2540, 2553, 2564, 2611, + 2658, 2660, 2662, 2675, 2677, 2690, 2692, 2770, + 2848, 2924, 3019, 3114, 3190, 3286, 3382, 3384, + 3480, 3576, 3652, 3732, 3734, 3829, 3905, 3981, + 4061, 4063, 4158, 4234, 4349, 4374, 4399, 4424 }; static const char _smtp_addr_parser_indicies[] = { @@ -242,321 +243,345 @@ static const char _smtp_addr_parser_indicies[] = { 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 1, 41, - 1, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 1, 42, 43, 42, 42, 42, 42, 42, - 1, 1, 42, 42, 1, 1, 1, 42, + 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 1, 1, 1, 42, 44, 42, - 45, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 1, 1, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 1, - 46, 1, 46, 46, 46, 46, 46, 1, - 1, 46, 46, 1, 1, 47, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 1, 1, 1, 46, 1, 46, 48, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 1, 1, 1, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 1, 46, - 1, 46, 46, 46, 46, 46, 1, 1, - 46, 46, 1, 1, 1, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 1, 1, 1, 46, 1, 46, 1, 46, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 1, 43, 43, 44, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 45, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 1, 46, 47, 46, 46, 46, 46, 46, + 1, 1, 46, 46, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 1, 1, 1, 46, 48, 46, + 49, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 1, 1, 1, 46, 46, 46, 46, + 46, 46, 46, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 1, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 1, 1, 1, 1, 1, 1, 1, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 50, 1, 1, 1, 1, 1, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 1, 51, 1, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 1, 1, - 1, 1, 53, 1, 1, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 1, - 1, 1, 1, 54, 1, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 1, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 1, 1, 1, 1, 1, 1, - 1, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 1, 1, 1, 1, 1, - 1, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 1, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 1, 1, - 1, 1, 1, 1, 1, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 1, - 1, 1, 1, 54, 1, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 1, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 1, 1, 1, 1, 1, 1, + 46, 46, 46, 46, 46, 46, 46, 1, + 50, 1, 50, 50, 50, 50, 50, 1, + 1, 50, 50, 1, 1, 51, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 1, 1, 1, 50, 1, 50, 52, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 1, 1, 1, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 1, 50, + 1, 50, 50, 50, 50, 50, 1, 1, + 50, 50, 1, 1, 1, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 1, 1, 1, 50, 1, 50, 1, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 1, 1, 1, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 1, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 1, 1, 1, 1, 1, 1, 1, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 54, 1, 1, 1, 1, 1, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 1, 55, 1, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 1, 1, + 1, 1, 57, 1, 1, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 1, + 1, 1, 1, 58, 1, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 1, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 1, 1, 1, 1, 1, 1, 1, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 1, 1, 1, 1, 57, + 56, 56, 56, 1, 1, 1, 1, 1, 1, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 1, 58, 1, 59, 59, + 56, 56, 56, 1, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 1, 1, + 1, 1, 1, 1, 1, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 1, + 1, 1, 1, 58, 1, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 1, 59, 59, 59, 59, 59, 59, 59, 59, - 60, 1, 1, 1, 1, 1, 1, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 1, 1, 1, 1, 62, 1, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 1, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 1, 64, 1, 65, + 59, 59, 1, 1, 1, 1, 1, 1, + 1, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 1, 1, 1, 1, 61, + 1, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 1, 62, 1, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 64, 1, 1, 1, 1, 1, 1, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 1, 1, 1, 1, 66, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 1, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 1, 67, 1, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 1, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 1, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 1, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 1, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 1, 68, 1, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 1, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 1, 71, 1, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 1, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 1, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 71, 1, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 1, 1, + 1, 1, 75, 1, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 71, 1, 71, 1, 73, 1, 67, - 1, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 1, 67, 1, 64, 1, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 1, 64, 1, 58, 1, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 60, 1, 1, 1, 1, 1, 1, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 1, 1, 1, 1, 62, 1, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 1, 58, 1, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 60, - 1, 1, 1, 1, 1, 1, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 1, 1, 1, 1, 62, 1, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 1, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 60, 1, 1, 1, 1, - 1, 1, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 1, 1, 1, 1, - 62, 1, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 1, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 1, - 1, 1, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 1, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 1, 1, - 71, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 1, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 1, 1, 1, - 1, 1, 1, 1, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 1, 1, - 1, 1, 62, 1, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 1, 78, - 78, 79, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 80, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 1, 81, - 81, 82, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, + 1, 75, 1, 75, 1, 77, 1, 71, + 1, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 1, 71, 1, 68, 1, + 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 1, 68, 1, 62, 1, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 64, 1, 1, 1, 1, 1, 1, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 1, 1, 1, 1, 66, 1, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 1, 62, 1, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 64, + 1, 1, 1, 1, 1, 1, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 1, 1, 1, 1, 66, 1, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 1, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 64, 1, 1, 1, 1, + 1, 1, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 1, 1, 1, 1, + 66, 1, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 83, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 1, + 1, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 1, 84, - 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 1, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 1, 1, + 75, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 1, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 1, 1, 1, 1, 1, - 1, 1, 85, 85, 85, 85, 85, 85, + 81, 81, 1, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 1, 1, 1, + 1, 1, 1, 1, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 1, 1, + 1, 1, 66, 1, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 1, 82, + 82, 83, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 84, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 1, 85, + 85, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 1, 1, 1, 1, - 1, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 1, 86, 1, 87, - 1, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 88, 1, 1, 1, 1, - 1, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 1, 1, 1, 1, - 89, 1, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 87, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 1, 87, 1, 90, - 91, 90, 90, 90, 90, 90, 1, 1, - 90, 90, 1, 1, 1, 90, 90, 90, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 1, 88, + 1, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, + 1, 90, 90, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 1, 1, 1, 90, 1, 90, 1, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 1, 1, 1, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 1, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 1, 1, 1, 1, 1, 1, 1, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 1, 1, 1, 1, 89, 1, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 1, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 1, 1, 1, 1, - 1, 1, 1, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 1, 1, 1, - 1, 1, 1, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 1, 93, 1, - 94, 1, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 95, 1, 1, 1, - 1, 1, 1, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 1, 1, 1, - 1, 96, 1, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 1, 94, 1, - 97, 98, 97, 97, 97, 97, 97, 1, - 1, 97, 97, 1, 1, 1, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, - 97, 1, 1, 1, 97, 1, 97, 1, - 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 1, 1, 1, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 1, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 1, 1, 1, 1, 1, 1, 1, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 1, 1, 1, 1, 96, 1, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 1, 99, 99, 99, 99, 99, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 1, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 1, 1, 1, 1, 1, + 1, 1, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 1, 1, 1, 1, + 1, 1, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 1, 94, 1, 95, + 1, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 96, 1, 1, 1, 1, + 1, 1, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 1, 1, 1, 1, + 97, 1, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 1, 95, 1, 98, + 99, 98, 98, 98, 98, 98, 1, 1, + 98, 98, 1, 1, 1, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 1, 1, 1, 98, 1, 98, 1, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 1, 1, 1, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 1, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 1, 1, 1, 1, 1, 1, 1, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 1, 1, 1, 1, 97, 1, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, + 93, 1, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 1, 1, 1, 1, + 1, 1, 1, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 1, 1, 1, + 1, 1, 1, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 1, 101, 1, + 102, 1, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 103, 1, 1, 1, + 1, 1, 1, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 1, 1, 1, + 1, 104, 1, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 1, 102, 1, + 105, 106, 105, 105, 105, 105, 105, 1, + 1, 105, 105, 1, 1, 1, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 1, 1, 1, 105, 1, 105, 1, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 1, 1, 1, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 1, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 1, 1, 1, 1, 1, 1, 1, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 1, 1, 1, 1, 104, 1, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 1, 107, 107, 107, 107, 107, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 99, 1, 1, 1, 1, 1, + 1, 1, 107, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 100, 1, 11, 11, 11, 11, 11, 11, + 108, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 1, 1, 1, 1, 1, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, @@ -565,37 +590,38 @@ static const char _smtp_addr_parser_indicies[] = { 1, 12, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 1, 101, 101, - 101, 101, 101, 1, 1, 1, 1, 1, + 11, 11, 11, 11, 11, 1, 109, 109, + 109, 109, 109, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 101, 1, 102, - 102, 102, 102, 102, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 109, 1, 110, + 110, 110, 110, 110, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 102, 1, - 103, 103, 103, 103, 103, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 110, 1, + 111, 111, 111, 111, 111, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 103, - 1, 104, 104, 104, 104, 104, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 111, + 1, 112, 112, 112, 112, 112, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 104, 1, 0 + 112, 1, 0 }; static const char _smtp_addr_parser_trans_targs[] = { - 1, 0, 2, 27, 31, 68, 2, 3, - 4, 73, 7, 73, 6, 8, 23, 26, + 1, 0, 2, 27, 32, 70, 2, 3, + 4, 75, 7, 75, 6, 8, 23, 26, 9, 21, 24, 23, 26, 10, 11, 19, - 12, 13, 17, 14, 15, 75, 16, 18, + 12, 13, 17, 14, 15, 77, 16, 18, 20, 22, 25, 28, 29, 30, 28, 29, - 30, 4, 32, 59, 77, 63, 32, 33, - 34, 35, 38, 36, 35, 76, 37, 39, - 55, 58, 40, 53, 56, 55, 58, 41, - 42, 51, 43, 44, 49, 45, 46, 48, - 47, 76, 50, 52, 54, 57, 60, 61, - 62, 60, 61, 62, 34, 64, 65, 63, - 66, 67, 32, 59, 69, 70, 68, 71, - 72, 2, 27, 74, 5, 74, 74, 74, - 74 + 30, 4, 31, 28, 29, 30, 33, 60, + 79, 65, 33, 34, 35, 36, 39, 37, + 36, 78, 38, 40, 56, 59, 41, 54, + 57, 56, 59, 42, 43, 52, 44, 45, + 50, 46, 47, 49, 48, 78, 51, 53, + 55, 58, 61, 62, 63, 61, 62, 63, + 35, 64, 61, 62, 63, 66, 67, 65, + 68, 69, 33, 60, 71, 72, 70, 73, + 74, 2, 27, 76, 5, 76, 76, 76, + 76 }; static const char _smtp_addr_parser_trans_actions[] = { @@ -604,15 +630,16 @@ static const char _smtp_addr_parser_trans_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 8, 7, 0, 3, - 0, 9, 10, 11, 0, 11, 0, 0, - 3, 4, 0, 0, 0, 12, 0, 5, - 5, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, - 0, 13, 0, 0, 0, 0, 7, 8, - 7, 0, 3, 0, 9, 0, 0, 0, + 0, 9, 0, 10, 11, 10, 12, 13, + 0, 13, 0, 0, 3, 4, 0, 0, + 0, 14, 0, 5, 5, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 0, 15, 0, 0, + 0, 0, 7, 8, 7, 0, 3, 0, + 9, 0, 10, 11, 10, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 7, 0, 14, 0, 0, 15, 16, - 17 + 0, 7, 0, 16, 0, 0, 17, 18, + 19 }; static const char _smtp_addr_parser_eof_actions[] = { @@ -625,17 +652,17 @@ static const char _smtp_addr_parser_eof_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 15, 16, 17 + 0, 0, 0, 16, 0, 17, 18, 19 }; static const int smtp_addr_parser_start = 1; -static const int smtp_addr_parser_first_final = 73; +static const int smtp_addr_parser_first_final = 75; static const int smtp_addr_parser_error = 0; static const int smtp_addr_parser_en_main = 1; -#line 79 "src/ragel/smtp_addr_parser.rl" +#line 83 "src/ragel/smtp_addr_parser.rl" static int rspamd_smtp_addr_parse (const char *data, size_t len, struct rspamd_email_address *addr) @@ -650,14 +677,14 @@ rspamd_smtp_addr_parse (const char *data, size_t len, struct rspamd_email_addres eof = pe; -#line 654 "src/libmime/parsers/smtp_addr_parser.c" +#line 681 "src/libmime/parsers/smtp_addr_parser.c" { cs = smtp_addr_parser_start; } -#line 93 "src/ragel/smtp_addr_parser.rl" +#line 97 "src/ragel/smtp_addr_parser.rl" -#line 661 "src/libmime/parsers/smtp_addr_parser.c" +#line 688 "src/libmime/parsers/smtp_addr_parser.c" { int _slen; int _trans; @@ -717,32 +744,38 @@ _resume: } } break; - case 9: + case 10: #line 36 "src/ragel/smtp_addr_parser.rl" { + addr->flags |= RSPAMD_EMAIL_ADDR_HAS_BACKSLASH; + } + break; + case 9: +#line 40 "src/ragel/smtp_addr_parser.rl" + { addr->flags |= RSPAMD_EMAIL_ADDR_QUOTED; } break; - case 16: -#line 47 "src/ragel/smtp_addr_parser.rl" + case 18: +#line 51 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 11: -#line 51 "src/ragel/smtp_addr_parser.rl" + case 13: +#line 55 "src/ragel/smtp_addr_parser.rl" { addr->addr = p; } break; case 2: -#line 55 "src/ragel/smtp_addr_parser.rl" +#line 59 "src/ragel/smtp_addr_parser.rl" { addr->addr = p; } break; - case 13: -#line 59 "src/ragel/smtp_addr_parser.rl" + case 15: +#line 63 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; if (addr->addr) { @@ -762,14 +795,14 @@ _resume: } } break; - case 12: + case 14: #line 19 "src/ragel/smtp_addr_parser.rl" { if (addr->domain) { addr->domain_len = p - addr->domain; } } -#line 59 "src/ragel/smtp_addr_parser.rl" +#line 63 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; if (addr->addr) { @@ -777,21 +810,33 @@ _resume: } } break; - case 17: -#line 40 "src/ragel/smtp_addr_parser.rl" + case 11: +#line 36 "src/ragel/smtp_addr_parser.rl" + { + addr->flags |= RSPAMD_EMAIL_ADDR_HAS_BACKSLASH; + } +#line 9 "src/ragel/smtp_addr_parser.rl" + { + if (addr->user) { + addr->user_len = p - addr->user; + } + } + break; + case 19: +#line 44 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_EMPTY; addr->addr = ""; addr->user = addr->addr; addr->domain = addr->addr; } -#line 47 "src/ragel/smtp_addr_parser.rl" +#line 51 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 10: -#line 51 "src/ragel/smtp_addr_parser.rl" + case 12: +#line 55 "src/ragel/smtp_addr_parser.rl" { addr->addr = p; } @@ -801,7 +846,7 @@ _resume: } break; case 1: -#line 55 "src/ragel/smtp_addr_parser.rl" +#line 59 "src/ragel/smtp_addr_parser.rl" { addr->addr = p; } @@ -810,39 +855,39 @@ _resume: addr->user = p; } break; - case 15: -#line 66 "src/ragel/smtp_addr_parser.rl" + case 17: +#line 70 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; if (addr->addr) { addr->addr_len = p - addr->addr; } } -#line 47 "src/ragel/smtp_addr_parser.rl" +#line 51 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 14: + case 16: #line 19 "src/ragel/smtp_addr_parser.rl" { if (addr->domain) { addr->domain_len = p - addr->domain; } } -#line 66 "src/ragel/smtp_addr_parser.rl" +#line 70 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; if (addr->addr) { addr->addr_len = p - addr->addr; } } -#line 47 "src/ragel/smtp_addr_parser.rl" +#line 51 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; -#line 846 "src/libmime/parsers/smtp_addr_parser.c" +#line 891 "src/libmime/parsers/smtp_addr_parser.c" } _again: @@ -854,65 +899,65 @@ _again: if ( p == eof ) { switch ( _smtp_addr_parser_eof_actions[cs] ) { - case 16: -#line 47 "src/ragel/smtp_addr_parser.rl" + case 18: +#line 51 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 17: -#line 40 "src/ragel/smtp_addr_parser.rl" + case 19: +#line 44 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_EMPTY; addr->addr = ""; addr->user = addr->addr; addr->domain = addr->addr; } -#line 47 "src/ragel/smtp_addr_parser.rl" +#line 51 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 15: -#line 66 "src/ragel/smtp_addr_parser.rl" + case 17: +#line 70 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; if (addr->addr) { addr->addr_len = p - addr->addr; } } -#line 47 "src/ragel/smtp_addr_parser.rl" +#line 51 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; - case 14: + case 16: #line 19 "src/ragel/smtp_addr_parser.rl" { if (addr->domain) { addr->domain_len = p - addr->domain; } } -#line 66 "src/ragel/smtp_addr_parser.rl" +#line 70 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_BRACED; if (addr->addr) { addr->addr_len = p - addr->addr; } } -#line 47 "src/ragel/smtp_addr_parser.rl" +#line 51 "src/ragel/smtp_addr_parser.rl" { addr->flags |= RSPAMD_EMAIL_ADDR_VALID; } break; -#line 909 "src/libmime/parsers/smtp_addr_parser.c" +#line 954 "src/libmime/parsers/smtp_addr_parser.c" } } _out: {} } -#line 94 "src/ragel/smtp_addr_parser.rl" +#line 98 "src/ragel/smtp_addr_parser.rl" return cs; } diff --git a/src/ragel/smtp_addr_parser.rl b/src/ragel/smtp_addr_parser.rl index 64e1ae4fb..55b8eefb0 100644 --- a/src/ragel/smtp_addr_parser.rl +++ b/src/ragel/smtp_addr_parser.rl @@ -33,6 +33,10 @@ } } + action User_has_backslash { + addr->flags |= RSPAMD_EMAIL_ADDR_HAS_BACKSLASH; + } + action Quoted_addr { addr->flags |= RSPAMD_EMAIL_ADDR_QUOTED; } diff --git a/src/ragel/smtp_address.rl b/src/ragel/smtp_address.rl index 3c2a86ee6..fddafe59d 100644 --- a/src/ragel/smtp_address.rl +++ b/src/ragel/smtp_address.rl @@ -24,7 +24,7 @@ Atom = atext+; Dot_string = Atom ("." Atom)*; - QcontentSMTP = qtextSMTP | quoted_pairSMTP; + QcontentSMTP = qtextSMTP | quoted_pairSMTP %User_has_backslash; Quoted_string = ( DQUOTE QcontentSMTP* >User_start %User_end DQUOTE ) %Quoted_addr; Local_part = Dot_string >User_start %User_end | Quoted_string; String = Atom | Quoted_string;