summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/manager.c4
-rw-r--r--src/path-lookup.c25
-rw-r--r--src/path-lookup.h2
-rw-r--r--src/systemctl.c2
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;
}