datasets: fix parsing of ip4 in ip6

The lookup function was not taking into account that we can have
an IPv4 or an IPv6 address as parameters and that this addresses
need to be converted to Suricata internal storage.
By using the already defined dedicated parsing function, we are
fixing the issue.

Issue: #6969
pull/11683/head
Eric Leblond 11 months ago committed by Victor Julien
parent a32b68985f
commit 4668c95513

@ -240,7 +240,7 @@ static int DatasetLoadIPv4(Dataset *set)
return 0;
}
static int ParseIpv6String(Dataset *set, char *line, struct in6_addr *in6)
static int ParseIpv6String(Dataset *set, const char *line, struct in6_addr *in6)
{
/* Checking IPv6 case */
char *got_colon = strchr(line, ':');
@ -1642,10 +1642,12 @@ static int DatasetOpSerialized(Dataset *set, const char *string, DatasetOpFunc D
return DatasetOpIPv4(set, (uint8_t *)&in.s_addr, 4);
}
case DATASET_TYPE_IPV6: {
struct in6_addr in;
if (inet_pton(AF_INET6, string, &in) != 1)
struct in6_addr in6;
if (ParseIpv6String(set, string, &in6) != 0) {
SCLogError("Dataset failed to import %s as IPv6", string);
return -2;
return DatasetOpIPv6(set, (uint8_t *)&in.s6_addr, 16);
}
return DatasetOpIPv6(set, (uint8_t *)&in6.s6_addr, 16);
}
}
return -1;

Loading…
Cancel
Save