From 14a9fb7a8e35562746090d3ecbf6696558354149 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Wed, 12 Nov 2025 01:32:11 +0100 Subject: [PATCH 1/2] Revert "sd_path_lookup*() add new type SD_PATH_SEARCH_SYSCTL" --- man/sd_path_lookup.xml | 1 - src/libsystemd/sd-path/sd-path.c | 6 +----- src/path/path-tool.c | 1 - src/sysctl/sysctl.c | 19 ++++++------------- src/systemd/sd-path.h | 2 -- 5 files changed, 7 insertions(+), 22 deletions(-) diff --git a/man/sd_path_lookup.xml b/man/sd_path_lookup.xml index 8fe04ae8af..fc6bac640c 100644 --- a/man/sd_path_lookup.xml +++ b/man/sd_path_lookup.xml @@ -76,7 +76,6 @@ SD_PATH_SEARCH_CONFIGURATION_FACTORY, SD_PATH_SEARCH_STATE_FACTORY, SD_PATH_SEARCH_CONFIGURATION, - SD_PATH_SEARCH_SYSCTL, SD_PATH_SYSTEMD_UTIL, SD_PATH_SYSTEMD_SYSTEM_UNIT, diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c index e3877fff4a..0096997135 100644 --- a/src/libsystemd/sd-path/sd-path.c +++ b/src/libsystemd/sd-path/sd-path.c @@ -683,11 +683,7 @@ static int get_search(uint64_t type, char ***ret) { *ret = TAKE_PTR(l); return 0; - } - - case SD_PATH_SEARCH_SYSCTL: - return strv_from_nulstr(ret, CONF_PATHS_NULSTR("sysctl.d")); - } + }} return -EOPNOTSUPP; } diff --git a/src/path/path-tool.c b/src/path/path-tool.c index 92dbd3496b..3dc31832b3 100644 --- a/src/path/path-tool.c +++ b/src/path/path-tool.c @@ -66,7 +66,6 @@ static const char* const path_table[_SD_PATH_MAX] = { [SD_PATH_SEARCH_CONFIGURATION_FACTORY] = "search-configuration-factory", [SD_PATH_SEARCH_STATE_FACTORY] = "search-state-factory", [SD_PATH_SEARCH_CONFIGURATION] = "search-configuration", - [SD_PATH_SEARCH_SYSCTL] = "search-sysctl", [SD_PATH_SYSTEMD_UTIL] = "systemd-util", diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c index e90d6c3799..d761c7375a 100644 --- a/src/sysctl/sysctl.c +++ b/src/sysctl/sysctl.c @@ -4,8 +4,6 @@ #include #include -#include "sd-path.h" - #include "alloc-util.h" #include "build.h" #include "conf-files.h" @@ -281,10 +279,10 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool return 0; } -static int parse_file(OrderedHashmap **sysctl_options, const char *path, bool ignore_enoent, const char **search_paths) { +static int parse_file(OrderedHashmap **sysctl_options, const char *path, bool ignore_enoent) { return conf_file_read( /* root = */ NULL, - search_paths, + (const char**) CONF_PATHS_STRV("sysctl.d"), path, parse_line, sysctl_options, @@ -307,7 +305,7 @@ static int read_credential_lines(OrderedHashmap **sysctl_options) { if (!j) return log_oom(); - return parse_file(sysctl_options, j, /* ignore_enoent= */ true, /* search_paths= */ NULL); + return parse_file(sysctl_options, j, /* ignore_enoent= */ true); } static int cat_config(char **files) { @@ -442,13 +440,8 @@ static int parse_argv(int argc, char *argv[]) { static int run(int argc, char *argv[]) { _cleanup_ordered_hashmap_free_ OrderedHashmap *sysctl_options = NULL; - _cleanup_strv_free_ char **search_paths = NULL; int r; - r = sd_path_lookup_strv(SD_PATH_SEARCH_SYSCTL, /* suffix= */ NULL, &search_paths); - if (r < 0) - return log_error_errno(r, "Failed to get sysctl.d/ search paths: %m"); - r = parse_argv(argc, argv); if (r <= 0) return r; @@ -465,12 +458,12 @@ static int run(int argc, char *argv[]) { /* Use (argument):n, where n==1 for the first positional arg */ RET_GATHER(r, parse_line("(argument)", ++pos, *arg, /* invalid_config = */ NULL, &sysctl_options)); else - RET_GATHER(r, parse_file(&sysctl_options, *arg, /* ignore_enoent= */ false, (const char**) search_paths)); + RET_GATHER(r, parse_file(&sysctl_options, *arg, false)); } } else { _cleanup_strv_free_ char **files = NULL; - r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) search_paths); + r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("sysctl.d")); if (r < 0) return log_error_errno(r, "Failed to enumerate sysctl.d files: %m"); @@ -478,7 +471,7 @@ static int run(int argc, char *argv[]) { return cat_config(files); STRV_FOREACH(f, files) - RET_GATHER(r, parse_file(&sysctl_options, *f, /* ignore_enoent= */ true, /* search_paths= */ NULL)); + RET_GATHER(r, parse_file(&sysctl_options, *f, true)); RET_GATHER(r, read_credential_lines(&sysctl_options)); } diff --git a/src/systemd/sd-path.h b/src/systemd/sd-path.h index 3199996011..eb42e31a68 100644 --- a/src/systemd/sd-path.h +++ b/src/systemd/sd-path.h @@ -129,8 +129,6 @@ __extension__ enum { SD_PATH_USER_CREDENTIAL_STORE_ENCRYPTED, SD_PATH_USER_SEARCH_CREDENTIAL_STORE_ENCRYPTED, - SD_PATH_SEARCH_SYSCTL, - _SD_PATH_MAX, _SD_PATH_INVALID = UINT64_MAX }; From dc04a884e07796335fe0899c74f1c1a3635ce110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 13 Nov 2025 14:02:30 +0100 Subject: [PATCH 2/2] systemd-path: add 'system-search-configuration' This provides functionality to replace what was provided by the preceding revert: $ build/systemd-path system-search-configuration --suffix=sysctl.d /etc/sysctl.d:/run/sysctl.d:/usr/local/lib/sysctl.d:/usr/lib/sysctl.d The result is identical, but more generic, since by changing suffix we can also get the answer for sysusers.d, tmpfiles.d, and any other of the directories which follow the same general rule. --- man/sd_path_lookup.xml | 1 + src/libsystemd/sd-path/sd-path.c | 3 +++ src/path/path-tool.c | 2 ++ src/systemd/sd-path.h | 3 +++ test/units/TEST-74-AUX-UTILS.path.sh | 2 ++ 5 files changed, 11 insertions(+) diff --git a/man/sd_path_lookup.xml b/man/sd_path_lookup.xml index fc6bac640c..9190e6b00a 100644 --- a/man/sd_path_lookup.xml +++ b/man/sd_path_lookup.xml @@ -41,6 +41,7 @@ SD_PATH_SYSTEM_STATE_FACTORY, SD_PATH_SYSTEM_CONFIGURATION, + SD_PATH_SYSTEM_SEARCH_CONFIGURATION, SD_PATH_SYSTEM_RUNTIME, SD_PATH_SYSTEM_RUNTIME_LOGS, SD_PATH_SYSTEM_STATE_PRIVATE, diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c index 0096997135..b80b8ca68d 100644 --- a/src/libsystemd/sd-path/sd-path.c +++ b/src/libsystemd/sd-path/sd-path.c @@ -524,6 +524,9 @@ static int get_search(uint64_t type, char ***ret) { switch (type) { + case SD_PATH_SYSTEM_SEARCH_CONFIGURATION: + return strv_from_nulstr(ret, CONF_PATHS_NULSTR("")); + case SD_PATH_SEARCH_BINARIES: return search_from_environment(ret, NULL, diff --git a/src/path/path-tool.c b/src/path/path-tool.c index 3dc31832b3..227468dfe8 100644 --- a/src/path/path-tool.c +++ b/src/path/path-tool.c @@ -22,6 +22,8 @@ static const char* const path_table[_SD_PATH_MAX] = { [SD_PATH_TEMPORARY] = "temporary", [SD_PATH_TEMPORARY_LARGE] = "temporary-large", + [SD_PATH_SYSTEM_SEARCH_CONFIGURATION] = "system-search-configuration", + [SD_PATH_SYSTEM_BINARIES] = "system-binaries", [SD_PATH_SYSTEM_INCLUDE] = "system-include", [SD_PATH_SYSTEM_LIBRARY_PRIVATE] = "system-library-private", diff --git a/src/systemd/sd-path.h b/src/systemd/sd-path.h index eb42e31a68..2718cf8266 100644 --- a/src/systemd/sd-path.h +++ b/src/systemd/sd-path.h @@ -44,6 +44,9 @@ __extension__ enum { SD_PATH_SYSTEM_STATE_CACHE, SD_PATH_SYSTEM_STATE_SPOOL, + /* generic system configuration */ + SD_PATH_SYSTEM_SEARCH_CONFIGURATION, + /* Vendor supplied data */ SD_PATH_USER_BINARIES, SD_PATH_USER_LIBRARY_PRIVATE, diff --git a/test/units/TEST-74-AUX-UTILS.path.sh b/test/units/TEST-74-AUX-UTILS.path.sh index 79056a5b2b..4547f53e24 100755 --- a/test/units/TEST-74-AUX-UTILS.path.sh +++ b/test/units/TEST-74-AUX-UTILS.path.sh @@ -51,6 +51,8 @@ assert_eq "$(systemd-path --suffix='' system-runtime)" "/run" assert_eq "$(systemd-path --suffix='🤔' system-runtime)" "/run/🤔" assert_eq "$(systemd-path --suffix=hello system-runtime)" "/run/hello" +assert_eq "$(systemd-path system-search-configuration --suffix=sysctl.d)" "/etc/sysctl.d:/run/sysctl.d:/usr/local/lib/sysctl.d:/usr/lib/sysctl.d" + # Note for the stuff below: everything defaults to $HOME, only the desktop # directory defaults to $HOME/Desktop. #