]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
datasets: fix parsing of ip4 in ip6 11698/head
authorEric Leblond <el@stamus-networks.com>
Fri, 19 Apr 2024 15:07:48 +0000 (17:07 +0200)
committerVictor Julien <victor@inliniac.net>
Mon, 2 Sep 2024 14:39:29 +0000 (16:39 +0200)
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
(cherry picked from commit 4668c955134082c079ea7b54ac6a029b7321641e)

src/datasets.c

index 01ef5bb47c90a337139d97c593227f2ebfadf3cb..0a288bb980c19d4ede3364c6680a055f9d85cb1a 100644 (file)
@@ -239,7 +239,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, ':');
@@ -1636,10 +1636,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;