}
static char** user_dirs(void) {
+ const char * const config_unit_paths[] = {
+ "/run/systemd/user",
+ 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
+ };
+
const char *home, *e;
char *config_home = NULL, *data_home = NULL;
char **config_dirs = NULL, **data_dirs = NULL;
if ((e = getenv("XDG_DATA_DIRS")))
data_dirs = strv_split(e, ":");
else
- data_dirs = strv_new("/usr/local/share", "/usr/share", NULL);
+ data_dirs = strv_new("/usr/local/share",
+ "/usr/share",
+ NULL);
if (!data_dirs)
goto fail;
r = t;
}
- if (!(t = strv_merge_concat(r, config_dirs, "/systemd/user")))
- goto finish;
- strv_free(r);
- r = t;
+ if (!strv_isempty(config_dirs)) {
+ if (!(t = strv_merge_concat(r, config_dirs, "/systemd/user")))
+ goto finish;
+ strv_free(r);
+ r = t;
+ }
- if (!(t = strv_append(r, USER_CONFIG_UNIT_PATH)))
+ if (!(t = strv_merge(r, (char**) config_unit_paths)))
goto fail;
strv_free(r);
r = t;
r = t;
}
- if (!(t = strv_merge_concat(r, data_dirs, "/systemd/user")))
- goto fail;
- strv_free(r);
- r = t;
+ if (!strv_isempty(data_dirs)) {
+ if (!(t = strv_merge_concat(r, data_dirs, "/systemd/user")))
+ goto fail;
+ strv_free(r);
+ r = t;
+ }
- if (!(t = strv_append(r, USER_DATA_UNIT_PATH)))
+ if (!(t = strv_merge(r, (char**) data_unit_paths)))
goto fail;
strv_free(r);
r = t;
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;
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/user",
+ "/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
"/run/systemd/system",
SYSTEM_CONFIG_UNIT_PATH,
"/etc/systemd/system",
- "/usr/local/share/systemd/system",
- "/usr/share/systemd/system",
- "/lib/systemd/system",
+ "/usr/local/lib/systemd/system",
+ "/usr/lib/systemd/system",
SYSTEM_DATA_UNIT_PATH,
+ "/lib/systemd/system",
NULL)))
return -ENOMEM;
}
return -ENOMEM;
strv_uniq(p->unit_path);
+ strv_path_remove_empty(p->unit_path);
if (!strv_isempty(p->unit_path)) {
strv_uniq(p->sysvinit_path);
strv_uniq(p->sysvrcnd_path);
+ strv_path_remove_empty(p->sysvinit_path);
+ strv_path_remove_empty(p->sysvrcnd_path);
+
if (!strv_isempty(p->sysvinit_path)) {
if (!(t = strv_join(p->sysvinit_path, "\n\t")))