diff options
-rw-r--r-- | src/manager.c | 4 | ||||
-rw-r--r-- | src/path-lookup.c | 25 | ||||
-rw-r--r-- | src/path-lookup.h | 2 | ||||
-rw-r--r-- | src/systemctl.c | 2 |
4 files changed, 26 insertions, 7 deletions
diff --git a/src/manager.c b/src/manager.c index 3291275d0a..c1242ae8b3 100644 --- a/src/manager.c +++ b/src/manager.c @@ -258,7 +258,7 @@ int manager_new(ManagerRunningAs running_as, Manager **_m) { if ((m->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) < 0) goto fail; - if ((r = lookup_paths_init(&m->lookup_paths, m->running_as)) < 0) + if ((r = lookup_paths_init(&m->lookup_paths, m->running_as, true)) < 0) goto fail; if ((r = manager_setup_signals(m)) < 0) @@ -2822,7 +2822,7 @@ int manager_reload(Manager *m) { /* Find new unit paths */ lookup_paths_free(&m->lookup_paths); - if ((q = lookup_paths_init(&m->lookup_paths, m->running_as)) < 0) + if ((q = lookup_paths_init(&m->lookup_paths, m->running_as, true)) < 0) r = q; manager_run_generators(m); diff --git a/src/path-lookup.c b/src/path-lookup.c index b45467c98d..84a9859254 100644 --- a/src/path-lookup.c +++ b/src/path-lookup.c @@ -163,7 +163,7 @@ fail: goto finish; } -int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as) { +int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as, bool personal) { const char *e; char *t; @@ -181,8 +181,27 @@ int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as) { strv_free(p->unit_path); if (running_as == MANAGER_USER) { - if (!(p->unit_path = user_dirs())) + + if (personal) + p->unit_path = user_dirs(); + else + p->unit_path = strv_new( + /* If you modify this you also want to modify + * systemduserunitpath= in systemd.pc.in, and + * the arrays in user_dirs() above! */ + "/run/systemd/user", + USER_CONFIG_UNIT_PATH, + "/etc/systemd/system", + "/usr/local/lib/systemd/user", + "/usr/local/share/systemd/user", + USER_DATA_UNIT_PATH, + "/usr/lib/systemd/user", + "/usr/share/systemd/user", + NULL); + + if (!p->unit_path) return -ENOMEM; + } else if (!(p->unit_path = strv_new( /* If you modify this you also want to modify @@ -192,8 +211,8 @@ int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as) { "/etc/systemd/system", "/usr/local/lib/systemd/system", "/usr/lib/systemd/system", - "/lib/systemd/system", SYSTEM_DATA_UNIT_PATH, + "/lib/systemd/system", NULL))) return -ENOMEM; } diff --git a/src/path-lookup.h b/src/path-lookup.h index e06f9793d2..fc2887d3c7 100644 --- a/src/path-lookup.h +++ b/src/path-lookup.h @@ -34,7 +34,7 @@ typedef struct LookupPaths { int user_config_home(char **config_home); -int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as); +int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as, bool personal); void lookup_paths_free(LookupPaths *p); #endif diff --git a/src/systemctl.c b/src/systemctl.c index 3767e22135..63eb3245d0 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -4139,7 +4139,7 @@ static int enable_unit(DBusConnection *bus, char **args, unsigned n) { dbus_error_init(&error); zero(paths); - if ((r = lookup_paths_init(&paths, arg_user ? MANAGER_USER : MANAGER_SYSTEM)) < 0) { + if ((r = lookup_paths_init(&paths, arg_user ? MANAGER_USER : MANAGER_SYSTEM, true)) < 0) { log_error("Failed to determine lookup paths: %s", strerror(-r)); goto finish; } |