From b63a2f1532d41ceb011fe8badbe7a7f1f23ec8a5 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 23 May 2013 13:14:09 +0100 Subject: [PATCH] Better support of ipv6 headers. --- src/protocol.c | 22 +++++++++++++++++----- 1 file 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); -- 2.39.5