diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2013-05-23 13:14:09 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2013-05-23 13:14:09 +0100 |
commit | b63a2f1532d41ceb011fe8badbe7a7f1f23ec8a5 (patch) | |
tree | 3e8484a854ad7be9f96630958e18fff9086ca8fd /src | |
parent | c22cd245131fe9d59039d3d21029c205742156d9 (diff) | |
download | rspamd-b63a2f1532d41ceb011fe8badbe7a7f1f23ec8a5.tar.gz rspamd-b63a2f1532d41ceb011fe8badbe7a7f1f23ec8a5.zip |
Better support of ipv6 headers.
Diffstat (limited to 'src')
-rw-r--r-- | src/protocol.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/protocol.c b/src/protocol.c index ab9836e85..151b59a9f 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -565,20 +565,32 @@ parse_header (struct worker_task *task, f_str_t * line) if (g_ascii_strncasecmp (headern, IP_ADDR_HEADER, sizeof (IP_ADDR_HEADER) - 1) == 0) { tmp = memory_pool_fstrdup (task->task_pool, line); #ifdef HAVE_INET_PTON - if (inet_pton (AF_INET, tmp, &task->from_addr.d.in4) != 1) { - /* Try ipv6 */ - if (inet_pton (AF_INET6, tmp, &task->from_addr.d.in6) == 1) { + if (g_ascii_strncasecmp (tmp, "IPv6:", 5) == 0) { + if (inet_pton (AF_INET6, tmp + 6, &task->from_addr.d.in6) == 1) { task->from_addr.ipv6 = TRUE; } else { msg_info ("bad ip header: '%s'", tmp); return FALSE; } + task->from_addr.has_addr = TRUE; } else { - task->from_addr.ipv6 = FALSE; + if (inet_pton (AF_INET, tmp, &task->from_addr.d.in4) != 1) { + /* Try ipv6 */ + if (inet_pton (AF_INET6, tmp, &task->from_addr.d.in6) == 1) { + task->from_addr.ipv6 = TRUE; + } + else { + msg_info ("bad ip header: '%s'", tmp); + return FALSE; + } + } + else { + task->from_addr.ipv6 = FALSE; + } + task->from_addr.has_addr = TRUE; } - task->from_addr.has_addr = TRUE; #else if (!inet_aton (tmp, &task->from_addr)) { msg_info ("bad ip header: '%s'", tmp); |