From 1de31f23a0f9a11d483728dadb2e6897b98b318b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 6 Jun 2025 08:33:31 +0200 Subject: [PATCH 1/3] conf-files: use proper enum for flags parameters --- src/basic/conf-files.c | 14 +++++++------- src/basic/conf-files.h | 16 ++++++++-------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c index 2461235fe8..644bd170ca 100644 --- a/src/basic/conf-files.c +++ b/src/basic/conf-files.c @@ -26,7 +26,7 @@ static int files_add( Hashmap **files, Set **masked, const char *suffix, - unsigned flags) { + ConfFilesFlags flags) { int r; @@ -141,7 +141,7 @@ int conf_files_list_strv( char ***ret, const char *suffix, const char *root, - unsigned flags, + ConfFilesFlags flags, const char * const *dirs) { _cleanup_hashmap_free_ Hashmap *fh = NULL; @@ -175,7 +175,7 @@ int conf_files_list_strv_at( char ***ret, const char *suffix, int rfd, - unsigned flags, + ConfFilesFlags flags, const char * const *dirs) { _cleanup_hashmap_free_ Hashmap *fh = NULL; @@ -274,15 +274,15 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p return r; } -int conf_files_list(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dir) { +int conf_files_list(char ***ret, const char *suffix, const char *root, ConfFilesFlags flags, const char *dir) { return conf_files_list_strv(ret, suffix, root, flags, STRV_MAKE_CONST(dir)); } -int conf_files_list_at(char ***ret, const char *suffix, int rfd, unsigned flags, const char *dir) { +int conf_files_list_at(char ***ret, const char *suffix, int rfd, ConfFilesFlags flags, const char *dir) { return conf_files_list_strv_at(ret, suffix, rfd, flags, STRV_MAKE_CONST(dir)); } -int conf_files_list_nulstr(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dirs) { +int conf_files_list_nulstr(char ***ret, const char *suffix, const char *root, ConfFilesFlags flags, const char *dirs) { _cleanup_strv_free_ char **d = NULL; assert(ret); @@ -294,7 +294,7 @@ int conf_files_list_nulstr(char ***ret, const char *suffix, const char *root, un return conf_files_list_strv(ret, suffix, root, flags, (const char**) d); } -int conf_files_list_nulstr_at(char ***ret, const char *suffix, int rfd, unsigned flags, const char *dirs) { +int conf_files_list_nulstr_at(char ***ret, const char *suffix, int rfd, ConfFilesFlags flags, const char *dirs) { _cleanup_strv_free_ char **d = NULL; assert(ret); diff --git a/src/basic/conf-files.h b/src/basic/conf-files.h index fb479cabf9..2bee1448e4 100644 --- a/src/basic/conf-files.h +++ b/src/basic/conf-files.h @@ -3,20 +3,20 @@ #include "forward.h" -enum { +typedef enum ConfFilesFlags { CONF_FILES_EXECUTABLE = 1 << 0, CONF_FILES_REGULAR = 1 << 1, CONF_FILES_DIRECTORY = 1 << 2, CONF_FILES_BASENAME = 1 << 3, CONF_FILES_FILTER_MASKED = 1 << 4, -}; +} ConfFilesFlags; -int conf_files_list(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dir); -int conf_files_list_at(char ***ret, const char *suffix, int rfd, unsigned flags, const char *dir); -int conf_files_list_strv(char ***ret, const char *suffix, const char *root, unsigned flags, const char* const* dirs); -int conf_files_list_strv_at(char ***ret, const char *suffix, int rfd, unsigned flags, const char * const *dirs); -int conf_files_list_nulstr(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dirs); -int conf_files_list_nulstr_at(char ***ret, const char *suffix, int rfd, unsigned flags, const char *dirs); +int conf_files_list(char ***ret, const char *suffix, const char *root, ConfFilesFlags flags, const char *dir); +int conf_files_list_at(char ***ret, const char *suffix, int rfd, ConfFilesFlags flags, const char *dir); +int conf_files_list_strv(char ***ret, const char *suffix, const char *root, ConfFilesFlags flags, const char* const* dirs); +int conf_files_list_strv_at(char ***ret, const char *suffix, int rfd, ConfFilesFlags flags, const char * const *dirs); +int conf_files_list_nulstr(char ***ret, const char *suffix, const char *root, ConfFilesFlags flags, const char *dirs); +int conf_files_list_nulstr_at(char ***ret, const char *suffix, int rfd, ConfFilesFlags flags, const char *dirs); int conf_files_insert(char ***strv, const char *root, char **dirs, const char *path); int conf_files_list_with_replacement( const char *root, From d65dc4c59377ac95cc51492528c2efc5a34f102a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 6 Jun 2025 08:59:19 +0200 Subject: [PATCH 2/3] core: break lines in some overly long function calls --- src/core/manager.c | 11 ++++++++--- src/shared/exec-util.c | 7 ++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/core/manager.c b/src/core/manager.c index 818321702e..d794a2518f 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -3909,9 +3909,14 @@ static int manager_run_environment_generators(Manager *m) { }; WITH_UMASK(0022) - r = execute_directories((const char* const*) paths, DEFAULT_TIMEOUT_USEC, gather_environment, - args, NULL, m->transient_environment, - EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS | EXEC_DIR_SET_SYSTEMD_EXEC_PID); + r = execute_directories( + (const char* const*) paths, + DEFAULT_TIMEOUT_USEC, + gather_environment, + args, + /* argv[]= */ NULL, + m->transient_environment, + EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS | EXEC_DIR_SET_SYSTEMD_EXEC_PID); return r; } diff --git a/src/shared/exec-util.c b/src/shared/exec-util.c index 771bbb762e..a64bcfe125 100644 --- a/src/shared/exec-util.c +++ b/src/shared/exec-util.c @@ -307,7 +307,12 @@ int execute_directories( assert(!strv_isempty((char* const*) directories)); - r = conf_files_list_strv(&paths, NULL, NULL, CONF_FILES_EXECUTABLE|CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, directories); + r = conf_files_list_strv( + &paths, + /* suffix= */ NULL, + /* root= */ NULL, + CONF_FILES_EXECUTABLE|CONF_FILES_REGULAR|CONF_FILES_FILTER_MASKED, + directories); if (r < 0) return log_error_errno(r, "Failed to enumerate executables: %m"); From da12ce285b983af6f7f48fc89ef59384382d99a0 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 6 Jun 2025 08:59:31 +0200 Subject: [PATCH 3/3] generator: check $SYSTEMD_SCOPE rather than cgroup membership This is more explicit and ensures that even in testing environments we operate the same way. As side effect it also avoids the mess around SELinux blocking access to cgroupfs. Fixes: #35723 --- src/shared/generator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shared/generator.c b/src/shared/generator.c index 3a9d10ad69..ea665a6c33 100644 --- a/src/shared/generator.c +++ b/src/shared/generator.c @@ -1054,10 +1054,10 @@ int generator_write_veritysetup_service_section( void log_setup_generator(void) { if (invoked_by_systemd()) { /* Disable talking to syslog/journal (i.e. the two IPC-based loggers) if we run in system context. */ - if (cg_pid_get_owner_uid(0, NULL) == -ENXIO /* not running in a per-user slice */) + if (streq_ptr(getenv("SYSTEMD_SCOPE"), "system")) log_set_prohibit_ipc(true); - /* This effectively means: journal for per-user generators, kmsg otherwise */ + /* This effectively means: journal for per-user service manager generators, kmsg for per-system service manager generators */ log_set_target(LOG_TARGET_JOURNAL_OR_KMSG); } else log_set_target(LOG_TARGET_AUTO);