generator: improve scope check (#37761)

Fixes: #35723
This commit is contained in:
Lennart Poettering
2025-06-06 12:02:25 +02:00
committed by GitHub
5 changed files with 31 additions and 21 deletions

View File

@@ -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);

View File

@@ -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,

View File

@@ -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;
}

View File

@@ -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");

View File

@@ -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);