X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fpath-lookup.c;h=b45467c98df35f6ce6476c50d6dd8d282e40fb8d;hp=c746e5e1ad5895076921a396b836fbc4e4c8cc0a;hb=b1bc08e599ae7760c7bcb29923ef5e1f92be2af7;hpb=37072578da23266e72e3b7846059a11ff35f412e diff --git a/src/path-lookup.c b/src/path-lookup.c index c746e5e1a..b45467c98 100644 --- a/src/path-lookup.c +++ b/src/path-lookup.c @@ -30,11 +30,11 @@ #include "path-lookup.h" -int session_config_home(char **config_home) { +int user_config_home(char **config_home) { const char *e; if ((e = getenv("XDG_CONFIG_HOME"))) { - if (asprintf(config_home, "%s/systemd/session", e) < 0) + if (asprintf(config_home, "%s/systemd/user", e) < 0) return -ENOMEM; return 1; @@ -42,7 +42,7 @@ int session_config_home(char **config_home) { const char *home; if ((home = getenv("HOME"))) { - if (asprintf(config_home, "%s/.config/systemd/session", home) < 0) + if (asprintf(config_home, "%s/.config/systemd/user", home) < 0) return -ENOMEM; return 1; @@ -52,7 +52,7 @@ int session_config_home(char **config_home) { return 0; } -static char** session_dirs(void) { +static char** user_dirs(void) { const char *home, *e; char *config_home = NULL, *data_home = NULL; char **config_dirs = NULL, **data_dirs = NULL; @@ -67,7 +67,7 @@ static char** session_dirs(void) { * as data, and allow overriding as configuration. */ - if (session_config_home(&config_home) < 0) + if (user_config_home(&config_home) < 0) goto fail; home = getenv("HOME"); @@ -81,11 +81,11 @@ static char** session_dirs(void) { * /etc/systemd/ anyway. */ if ((e = getenv("XDG_DATA_HOME"))) { - if (asprintf(&data_home, "%s/systemd/session", e) < 0) + if (asprintf(&data_home, "%s/systemd/user", e) < 0) goto fail; } else if (home) { - if (asprintf(&data_home, "%s/.local/share/systemd/session", home) < 0) + if (asprintf(&data_home, "%s/.local/share/systemd/user", home) < 0) goto fail; /* There is really no need for two unit dirs in $HOME, @@ -96,13 +96,17 @@ static char** session_dirs(void) { * one. */ mkdir_parents(data_home, 0777); - (void) symlink("../../../.config/systemd/session", data_home); + (void) symlink("../../../.config/systemd/user", data_home); } 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/local/lib", + "/usr/share", + "/usr/lib", + NULL); if (!data_dirs) goto fail; @@ -115,12 +119,12 @@ static char** session_dirs(void) { r = t; } - if (!(t = strv_merge_concat(r, config_dirs, "/systemd/session"))) + if (!(t = strv_merge_concat(r, config_dirs, "/systemd/user"))) goto finish; strv_free(r); r = t; - if (!(t = strv_append(r, SESSION_CONFIG_UNIT_PATH))) + if (!(t = strv_append(r, USER_CONFIG_UNIT_PATH))) goto fail; strv_free(r); r = t; @@ -132,12 +136,12 @@ static char** session_dirs(void) { r = t; } - if (!(t = strv_merge_concat(r, data_dirs, "/systemd/session"))) + if (!(t = strv_merge_concat(r, data_dirs, "/systemd/user"))) goto fail; strv_free(r); r = t; - if (!(t = strv_append(r, SESSION_DATA_UNIT_PATH))) + if (!(t = strv_append(r, USER_DATA_UNIT_PATH))) goto fail; strv_free(r); r = t; @@ -176,16 +180,18 @@ int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as) { /* Nothing is set, so let's figure something out. */ strv_free(p->unit_path); - if (running_as == MANAGER_SESSION) { - if (!(p->unit_path = session_dirs())) + if (running_as == MANAGER_USER) { + if (!(p->unit_path = user_dirs())) return -ENOMEM; } else if (!(p->unit_path = strv_new( - "/dev/.systemd/system", + /* If you modify this you also want to modify + * systemdsystemunitpath= in systemd.pc.in! */ + "/run/systemd/system", SYSTEM_CONFIG_UNIT_PATH, "/etc/systemd/system", - "/usr/local/share/systemd/system", - "/usr/share/systemd/system", + "/usr/local/lib/systemd/system", + "/usr/lib/systemd/system", "/lib/systemd/system", SYSTEM_DATA_UNIT_PATH, NULL))) @@ -197,6 +203,7 @@ int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as) { return -ENOMEM; strv_uniq(p->unit_path); + strv_path_remove_empty(p->unit_path); if (!strv_isempty(p->unit_path)) { @@ -251,6 +258,9 @@ int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as) { 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")))