From 4668c955134082c079ea7b54ac6a029b7321641e Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Fri, 19 Apr 2024 17:07:48 +0200 Subject: [PATCH] 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 --- src/datasets.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/datasets.c b/src/datasets.c index cd61a35dc6..8d55049451 100644 --- a/src/datasets.c +++ b/src/datasets.c @@ -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;