]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
datasets: fix parsing of ip4 in ip6
authorEric Leblond <el@stamus-networks.com>
Fri, 19 Apr 2024 15:07:48 +0000 (17:07 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 30 Aug 2024 13:19:00 +0000 (15:19 +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

src/datasets.c

index cd61a35dc627aae92ad74a87b3789d0c91db8368..8d550494514bdd4dfc2ee42f26947301073f58cb 100644 (file)
@@ -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;