From d691e05395c93032d2062a689a9cbf710be37254 Mon Sep 17 00:00:00 2001 From: Nick Hainke Date: Sun, 23 Nov 2025 18:05:51 +0100 Subject: [PATCH] libsemanage: update to 3.9 Release Notes: https://github.com/SELinuxProject/selinux/wiki/Releases#release-39 Remove upstreamed: - 0001-libsemanage-create-semanage_basename-to-ensure-posix.patch Link: https://github.com/openwrt/openwrt/pull/20908 Signed-off-by: Nick Hainke --- package/libs/libsemanage/Makefile | 4 +- ...te-semanage_basename-to-ensure-posix.patch | 157 ------------------ 2 files changed, 2 insertions(+), 159 deletions(-) delete mode 100644 package/libs/libsemanage/patches/0001-libsemanage-create-semanage_basename-to-ensure-posix.patch diff --git a/package/libs/libsemanage/Makefile b/package/libs/libsemanage/Makefile index 87f3bb9518..c1bcbc6458 100644 --- a/package/libs/libsemanage/Makefile +++ b/package/libs/libsemanage/Makefile @@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libsemanage -PKG_VERSION:=3.8.1 +PKG_VERSION:=3.9 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/SELinuxProject/selinux/releases/download/$(PKG_VERSION) -PKG_HASH:=7b39127b219cc70bfd935a4af6b0f2ba83d4b35c916f253c7e942c23ab490f07 +PKG_HASH:=ec05850aef48bfb8e02135a7f4f3f7edba3670f63d5e67f2708d4bd80b9a4634 PKG_MAINTAINER:=Thomas Petazzoni PKG_LICENSE:=LGPL-2.1 PKG_LICENSE_FILES:=COPYING diff --git a/package/libs/libsemanage/patches/0001-libsemanage-create-semanage_basename-to-ensure-posix.patch b/package/libs/libsemanage/patches/0001-libsemanage-create-semanage_basename-to-ensure-posix.patch deleted file mode 100644 index 5240b3dabc..0000000000 --- a/package/libs/libsemanage/patches/0001-libsemanage-create-semanage_basename-to-ensure-posix.patch +++ /dev/null @@ -1,157 +0,0 @@ -From a339594da6f027aed5d66ec6798a3d732df235e4 Mon Sep 17 00:00:00 2001 -From: Rahul Sandhu -Date: Fri, 21 Feb 2025 09:39:10 +0000 -Subject: [PATCH] libsemanage: create semanage_basename to ensure posix - compliance - -Passing a const char * to basename(3) is a glibc-specific extension, so -create our own basename implementation. As it's a trivial 2 LOC, always -use our implementation of basename even if glibc is available to avoid -the complications of attaining the non-posix glibc implementation of -basename(3) as _GNU_SOURCE needs to be defined, but libgen.h also needs -to have not been included. - -Also fix a missing check for selinux_policy_root(3). From the man page: -On failure, selinux_policy_root returns NULL. - -As the glibc basename(3) (unlike posix basename(3)) does not support -having a nullptr passed to it, only pass the policy_root to basename(3) -if it is non-null. - -Signed-off-by: Rahul Sandhu -Acked-by: James Carter ---- - src/conf-parse.y | 13 ++++++++++--- - src/direct_api.c | 1 + - src/utilities.c | 9 +++++++++ - src/utilities.h | 13 +++++++++++++ - tests/test_utilities.c | 26 ++++++++++++++++++++++++++ - 5 files changed, 59 insertions(+), 3 deletions(-) - ---- a/src/conf-parse.y -+++ b/src/conf-parse.y -@@ -21,6 +21,7 @@ - %{ - - #include "semanage_conf.h" -+#include "utilities.h" - - #include - #include -@@ -382,7 +383,10 @@ external_opt: PROG_PATH '=' ARG { PAS - static int semanage_conf_init(semanage_conf_t * conf) - { - conf->store_type = SEMANAGE_CON_DIRECT; -- conf->store_path = strdup(basename(selinux_policy_root())); -+ const char *policy_root = selinux_policy_root(); -+ if (policy_root != NULL) { -+ conf->store_path = strdup(semanage_basename(policy_root)); -+ } - conf->ignoredirs = NULL; - conf->store_root_path = strdup("/var/lib/selinux"); - conf->compiler_directory_path = strdup("/usr/libexec/selinux/hll"); -@@ -544,8 +548,11 @@ static int parse_module_store(char *arg) - free(current_conf->store_path); - if (strcmp(arg, "direct") == 0) { - current_conf->store_type = SEMANAGE_CON_DIRECT; -- current_conf->store_path = -- strdup(basename(selinux_policy_root())); -+ const char *policy_root = selinux_policy_root(); -+ if (policy_root != NULL) { -+ current_conf->store_path = -+ strdup(semanage_basename(policy_root)); -+ } - current_conf->server_port = -1; - } else if (*arg == '/') { - current_conf->store_type = SEMANAGE_CON_POLSERV_LOCAL; ---- a/src/direct_api.c -+++ b/src/direct_api.c -@@ -26,6 +26,7 @@ - - #include - #include -+#include - #include - #include - #include ---- a/src/utilities.c -+++ b/src/utilities.c -@@ -349,3 +349,12 @@ int write_full(int fd, const void *buf, - - return 0; - } -+ -+#ifdef __GNUC__ -+__attribute__((nonnull)) -+#endif -+char *semanage_basename(const char *filename) -+{ -+ char *p = strrchr(filename, '/'); -+ return p ? p + 1 : (char *)filename; -+} ---- a/src/utilities.h -+++ b/src/utilities.h -@@ -156,4 +156,17 @@ semanage_list_t *semanage_slurp_file_fil - - int write_full(int fd, const void *buf, size_t len) WARN_UNUSED; - -+/** -+ * Portable implementation of the glibc version of basename(3). -+ * -+ * @param filename path to find basename of -+ * -+ * @return basename of filename -+ */ -+ -+#ifdef __GNUC__ -+__attribute__((nonnull)) -+#endif -+char *semanage_basename(const char *filename); -+ - #endif ---- a/tests/test_utilities.c -+++ b/tests/test_utilities.c -@@ -46,6 +46,7 @@ static void test_semanage_rtrim(void); - static void test_semanage_str_replace(void); - static void test_semanage_findval(void); - static void test_slurp_file_filter(void); -+static void test_semanage_basename(void); - - static char fname[] = { - 'T', 'E', 'S', 'T', '_', 'T', 'E', 'M', 'P', '_', 'X', 'X', 'X', 'X', -@@ -117,6 +118,10 @@ int semanage_utilities_add_tests(CU_pSui - test_slurp_file_filter)) { - goto err; - } -+ if (NULL == CU_add_test(suite, "semanage_basename", -+ test_semanage_basename)) { -+ goto err; -+ } - return 0; - err: - CU_cleanup_registry(); -@@ -346,3 +351,24 @@ static void test_slurp_file_filter(void) - - semanage_list_destroy(&data); - } -+ -+static void test_semanage_basename(void) -+{ -+ char *basename1 = semanage_basename("/foo/bar"); -+ CU_ASSERT_STRING_EQUAL(basename1, "bar"); -+ -+ char *basename2 = semanage_basename("/foo/bar/"); -+ CU_ASSERT_STRING_EQUAL(basename2, ""); -+ -+ char *basename3 = semanage_basename("/foo.bar"); -+ CU_ASSERT_STRING_EQUAL(basename3, "foo.bar"); -+ -+ char *basename5 = semanage_basename("."); -+ CU_ASSERT_STRING_EQUAL(basename5, "."); -+ -+ char *basename6 = semanage_basename(""); -+ CU_ASSERT_STRING_EQUAL(basename6, ""); -+ -+ char *basename7 = semanage_basename("/"); -+ CU_ASSERT_STRING_EQUAL(basename7, ""); -+} -- 2.30.2