diff options
-rw-r--r-- | src/shared/install.c | 11 | ||||
-rw-r--r-- | src/shared/path-lookup.c | 46 | ||||
-rw-r--r-- | src/shared/path-lookup.h | 2 |
3 files changed, 40 insertions, 19 deletions
diff --git a/src/shared/install.c b/src/shared/install.c index 4141e0402f..e14a869321 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -885,6 +885,7 @@ static int find_symlinks( } static int find_symlinks_in_scope( + UnitFileScope scope, const LookupPaths *paths, UnitFileInstallInfo *i, bool match_name, @@ -916,6 +917,12 @@ static int find_symlinks_in_scope( return 1; } + /* look for globally enablement of user units */ + if (scope == UNIT_FILE_USER && path_is_user_config_dir(*p)) { + *state = UNIT_FILE_ENABLED; + return 1; + } + r = path_is_runtime(paths, *p, false); if (r < 0) return r; @@ -2646,7 +2653,7 @@ static int unit_file_lookup_state( /* Check if any of the Alias= symlinks have been created. * We ignore other aliases, and only check those that would * be created by systemctl enable for this unit. */ - r = find_symlinks_in_scope(paths, i, true, &state); + r = find_symlinks_in_scope(scope, paths, i, true, &state); if (r < 0) return r; if (r > 0) @@ -2654,7 +2661,7 @@ static int unit_file_lookup_state( /* Check if the file is known under other names. If it is, * it might be in use. Report that as UNIT_FILE_INDIRECT. */ - r = find_symlinks_in_scope(paths, i, false, &state); + r = find_symlinks_in_scope(scope, paths, i, false, &state); if (r < 0) return r; if (r > 0) diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c index a289511be5..bf10acda94 100644 --- a/src/shared/path-lookup.c +++ b/src/shared/path-lookup.c @@ -115,6 +115,21 @@ static int user_data_dir(char **ret, const char *suffix) { return 1; } +static const char* const user_data_unit_paths[] = { + "/usr/local/lib/systemd/user", + "/usr/local/share/systemd/user", + USER_DATA_UNIT_PATH, + "/usr/lib/systemd/user", + "/usr/share/systemd/user", + NULL +}; + +static const char* const user_config_unit_paths[] = { + USER_CONFIG_UNIT_PATH, + "/etc/systemd/user", + NULL +}; + static char** user_dirs( const char *persistent_config, const char *runtime_config, @@ -125,21 +140,6 @@ static char** user_dirs( const char *persistent_control, const char *runtime_control) { - const char * const config_unit_paths[] = { - USER_CONFIG_UNIT_PATH, - "/etc/systemd/user", - NULL - }; - - const char * const data_unit_paths[] = { - "/usr/local/lib/systemd/user", - "/usr/local/share/systemd/user", - USER_DATA_UNIT_PATH, - "/usr/lib/systemd/user", - "/usr/share/systemd/user", - NULL - }; - _cleanup_strv_free_ char **config_dirs = NULL, **data_dirs = NULL; _cleanup_free_ char *data_home = NULL; _cleanup_strv_free_ char **res = NULL; @@ -196,7 +196,7 @@ static char** user_dirs( if (strv_extend(&res, persistent_config) < 0) return NULL; - if (strv_extend_strv(&res, (char**) config_unit_paths, false) < 0) + if (strv_extend_strv(&res, (char**) user_config_unit_paths, false) < 0) return NULL; if (strv_extend(&res, runtime_config) < 0) @@ -211,7 +211,7 @@ static char** user_dirs( if (strv_extend_strv_concat(&res, data_dirs, "/systemd/user") < 0) return NULL; - if (strv_extend_strv(&res, (char**) data_unit_paths, false) < 0) + if (strv_extend_strv(&res, (char**) user_data_unit_paths, false) < 0) return NULL; if (strv_extend(&res, generator_late) < 0) @@ -226,6 +226,18 @@ static char** user_dirs( return tmp; } +bool path_is_user_data_dir(const char *path) { + assert(path); + + return strv_contains((char**) user_data_unit_paths, path); +} + +bool path_is_user_config_dir(const char *path) { + assert(path); + + return strv_contains((char**) user_config_unit_paths, path); +} + static int acquire_generator_dirs( UnitFileScope scope, const char *tempdir, diff --git a/src/shared/path-lookup.h b/src/shared/path-lookup.h index 45fba64d2a..fc8b8ed8c7 100644 --- a/src/shared/path-lookup.h +++ b/src/shared/path-lookup.h @@ -67,6 +67,8 @@ struct LookupPaths { }; int lookup_paths_init(LookupPaths *p, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir); +bool path_is_user_data_dir(const char *path); +bool path_is_user_config_dir(const char *path); int lookup_paths_reduce(LookupPaths *p); |