aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2013-05-23 13:14:09 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2013-05-23 13:14:09 +0100
commitb63a2f1532d41ceb011fe8badbe7a7f1f23ec8a5 (patch)
tree3e8484a854ad7be9f96630958e18fff9086ca8fd /src
parentc22cd245131fe9d59039d3d21029c205742156d9 (diff)
downloadrspamd-b63a2f1532d41ceb011fe8badbe7a7f1f23ec8a5.tar.gz
rspamd-b63a2f1532d41ceb011fe8badbe7a7f1f23ec8a5.zip
Better support of ipv6 headers.
Diffstat (limited to 'src')
-rw-r--r--src/protocol.c22
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);