From: Lennart Poettering Date: Fri, 22 Jul 2011 02:17:38 +0000 (+0200) Subject: path-lookup: make inclusion of user private units optional X-Git-Tag: v31~36 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=c800e483748a8bb68ed405094c265954c7e605dc path-lookup: make inclusion of user private units optional --- diff --git a/src/manager.c b/src/manager.c index 3291275d0..c1242ae8b 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 b45467c98..84a985925 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 e06f9793d..fc2887d3c 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 3767e2213..63eb3245d 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; }