From 546e9b5f2857df6efa693e2ca5c1130be6efe60a Mon Sep 17 00:00:00 2001 From: Anoop Saldanha Date: Wed, 27 Jan 2010 12:54:52 +0530 Subject: [PATCH] AddressCutNot fix for address engine ipv6 --- src/detect-engine-address-ipv6.c | 87 ++++++++++++++++---------------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/src/detect-engine-address-ipv6.c b/src/detect-engine-address-ipv6.c index 30f1d7882b..4a729dbdb8 100644 --- a/src/detect-engine-address-ipv6.c +++ b/src/detect-engine-address-ipv6.c @@ -800,11 +800,10 @@ int DetectAddressCutNotIPv6(DetectAddress *a, DetectAddress **b) /* default to NULL */ *b = NULL; - if (a_ip1[0] != 0x00000000 && a_ip1[1] != 0x00000000 && - a_ip1[2] != 0x00000000 && a_ip1[3] != 0x00000000 && - a_ip2[0] != 0xFFFFFFFF && a_ip2[1] != 0xFFFFFFFF && - a_ip2[2] != 0xFFFFFFFF && a_ip2[3] != 0xFFFFFFFF) - { + if (!(a_ip1[0] == 0x00000000 && a_ip1[1] == 0x00000000 && + a_ip1[2] == 0x00000000 && a_ip1[3] == 0x00000000) && + !(a_ip2[0] == 0xFFFFFFFF && a_ip2[1] == 0xFFFFFFFF && + a_ip2[2] == 0xFFFFFFFF && a_ip2[3] == 0xFFFFFFFF)) { AddressCutIPv6Copy(ip_nul, a->ip); AddressCutIPv6CopySubOne(a_ip1, a->ip2); @@ -816,18 +815,18 @@ int DetectAddressCutNotIPv6(DetectAddress *a, DetectAddress **b) AddressCutIPv6CopyAddOne(a_ip2, tmp_b->ip); AddressCutIPv6Copy(ip_max, tmp_b->ip2); *b = tmp_b; - } else if (a_ip1[0] == 0x00000000 && a_ip1[1] == 0x00000000 && - a_ip1[2] == 0x00000000 && a_ip1[3] == 0x00000000 && - a_ip2[0] != 0xFFFFFFFF && a_ip2[1] != 0xFFFFFFFF && - a_ip2[2] != 0xFFFFFFFF && a_ip2[3] != 0xFFFFFFFF) { + } else if ((a_ip1[0] == 0x00000000 && a_ip1[1] == 0x00000000 && + a_ip1[2] == 0x00000000 && a_ip1[3] == 0x00000000) && + !(a_ip2[0] == 0xFFFFFFFF && a_ip2[1] == 0xFFFFFFFF && + a_ip2[2] == 0xFFFFFFFF && a_ip2[3] == 0xFFFFFFFF)) { AddressCutIPv6CopyAddOne(a_ip2, a->ip); AddressCutIPv6Copy(ip_max, a->ip2); - } else if (a_ip1[0] != 0x00000000 && a_ip1[1] != 0x00000000 && - a_ip1[2] != 0x00000000 && a_ip1[3] != 0x00000000 && - a_ip2[0] == 0xFFFFFFFF && a_ip2[1] == 0xFFFFFFFF && - a_ip2[2] == 0xFFFFFFFF && a_ip2[3] == 0xFFFFFFFF) { + } else if (!(a_ip1[0] == 0x00000000 && a_ip1[1] == 0x00000000 && + a_ip1[2] == 0x00000000 && a_ip1[3] == 0x00000000) && + (a_ip2[0] == 0xFFFFFFFF && a_ip2[1] == 0xFFFFFFFF && + a_ip2[2] == 0xFFFFFFFF && a_ip2[3] == 0xFFFFFFFF)) { AddressCutIPv6Copy(ip_nul, a->ip); - AddressCutIPv6CopyAddOne(a_ip2, a->ip2); + AddressCutIPv6CopySubOne(a_ip1, a->ip2); } else { goto error; } @@ -2001,121 +2000,121 @@ static int AddressTestIPv6Join01(void) goto error; /* case 1 */ - if (inet_pton(AF_INET6, "128.51.61.124", &in6) < 0) + if (inet_pton(AF_INET6, "2000::10", &in6) < 0) goto error; memcpy(target->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(target->ip2, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(source->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000:20", &in6) < 0) goto error; memcpy(source->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result &= (DetectAddressJoinIPv6(NULL, target, source) == 0); - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(temp->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(temp->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result = (DetectAddressCmpIPv6(target, temp) == ADDRESS_EQ); /* case 2 */ - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(target->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(target->ip2, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "1.2.3.5", &in6) < 0) + if (inet_pton(AF_INET6, "2000::2", &in6) < 0) goto error; memcpy(source->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.1", &in6) < 0) + if (inet_pton(AF_INET6, "2000::19", &in6) < 0) goto error; memcpy(source->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result &= (DetectAddressJoinIPv6(NULL, target, source) == 0); - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(temp->ip2, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(temp->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result = (DetectAddressCmpIPv6(target, temp) == ADDRESS_EQ); /* case 3 */ - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(target->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::15", &in6) < 0) goto error; memcpy(target->ip2, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "128.1.5.15", &in6) < 0) + if (inet_pton(AF_INET6, "2000::10", &in6) < 0) goto error; memcpy(source->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "200.202.200.200", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(source->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result &= (DetectAddressJoinIPv6(NULL, target, source) == 0); - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(temp->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "200.202.200.200", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(temp->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result = (DetectAddressCmpIPv6(target, temp) == ADDRESS_EQ); /* case 4 */ - if (inet_pton(AF_INET6, "128.51.61.124", &in6) < 0) + if (inet_pton(AF_INET6, "2000::10", &in6) < 0) goto error; memcpy(target->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(target->ip2, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(source->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(source->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result &= (DetectAddressJoinIPv6(NULL, target, source) == 0); - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(temp->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(temp->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result = (DetectAddressCmpIPv6(target, temp) == ADDRESS_EQ); /* case 5 */ - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(target->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(target->ip2, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(source->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(source->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result &= (DetectAddressJoinIPv6(NULL, target, source) == 0); - if (inet_pton(AF_INET6, "1.2.3.4", &in6) < 0) + if (inet_pton(AF_INET6, "2000::1", &in6) < 0) goto error; memcpy(temp->ip, in6.s6_addr, sizeof(in6.s6_addr)); - if (inet_pton(AF_INET6, "192.168.1.2", &in6) < 0) + if (inet_pton(AF_INET6, "2000::20", &in6) < 0) goto error; memcpy(temp->ip2, in6.s6_addr, sizeof(in6.s6_addr)); result = (DetectAddressCmpIPv6(target, temp) == ADDRESS_EQ);