nftables: fix parsing date expressions
authorJo-Philipp Wich <jo@mein.io>
Mon, 8 Aug 2022 22:05:02 +0000 (00:05 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 25 Aug 2022 08:30:46 +0000 (10:30 +0200)
Musl libc does not support the non-POSIX "%F" format for strptime() so
replace all occurrences of it with an equivalent "%Y-%m-%d" format.

Fixes: #10419
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(backported from commit e6e4f979999393825370e9db9fe04d75cb01acf2)

package/network/utils/nftables/Makefile
package/network/utils/nftables/patches/0001-meta-don-t-use-non-POSIX-formats-in-strptime.patch [new file with mode: 0644]

index 8f0fddaa0ea400a0da4ca03413d76c9dae45c25a..b9e896a9f79f5fd142bdc1771190ee2ca4cbd23d 100644 (file)
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nftables
 PKG_VERSION:=1.0.2
-PKG_RELEASE:=2
+PKG_RELEASE:=2.1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=https://netfilter.org/projects/$(PKG_NAME)/files
diff --git a/package/network/utils/nftables/patches/0001-meta-don-t-use-non-POSIX-formats-in-strptime.patch b/package/network/utils/nftables/patches/0001-meta-don-t-use-non-POSIX-formats-in-strptime.patch
new file mode 100644 (file)
index 0000000..12cac8c
--- /dev/null
@@ -0,0 +1,44 @@
+From 1af8aabccd65e11caa397c4706353075f623cd01 Mon Sep 17 00:00:00 2001
+From: Jo-Philipp Wich <jo@mein.io>
+Date: Mon, 8 Aug 2022 23:57:03 +0200
+Subject: [PATCH] meta: don't use non-POSIX formats in strptime()
+
+The current strptime() invocations in meta.c use the `%F` format which
+is not specified by POSIX and thus unimplemented by some libc flavors
+such as musl libc.
+
+Replace all occurrences of `%F` with an equivalent `%Y-%m-%d` format
+in order to be able to properly parse user supplied dates in such
+environments.
+
+Signed-off-by: Jo-Philipp Wich <jo@mein.io>
+---
+ src/meta.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/src/meta.c
++++ b/src/meta.c
+@@ -399,7 +399,7 @@ static void date_type_print(const struct
+               tstamp += cur_tm->tm_gmtoff;
+       if ((tm = gmtime((time_t *) &tstamp)) != NULL &&
+-           strftime(timestr, sizeof(timestr) - 1, "%F %T", tm))
++           strftime(timestr, sizeof(timestr) - 1, "%Y-%m-%d %T", tm))
+               nft_print(octx, "\"%s\"", timestr);
+       else
+               nft_print(octx, "Error converting timestamp to printed time");
+@@ -412,11 +412,11 @@ static time_t parse_iso_date(const char
+       memset(&tm, 0, sizeof(struct tm));
+-      if (strptime(sym, "%F %T", &tm))
++      if (strptime(sym, "%Y-%m-%d %T", &tm))
+               goto success;
+-      if (strptime(sym, "%F %R", &tm))
++      if (strptime(sym, "%Y-%m-%d %R", &tm))
+               goto success;
+-      if (strptime(sym, "%F", &tm))
++      if (strptime(sym, "%Y-%m-%d", &tm))
+               goto success;
+       return -1;