diff options
author | Steven Allen <steven@stebalien.com> | 2014-09-28 14:54:25 -0700 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2014-10-02 10:37:30 -0400 |
commit | 718880ba0d557a045e2f969e141cbd59e78c76f4 (patch) | |
tree | 24adb053b3e39a34f441a0b834013e6c0d28e03c /src/shared/path-lookup.c | |
parent | 9fd290443f5f99fca0dcd4216b1de70f7d3b8db1 (diff) |
add a transient user unit directory
This patch adds a transient user unit directory under
`$XDG_RUNTIME_DIR/systemd/user/` and stores transient user-instance
units (such as those created by `systemd-run --user`) under there
instead of putting them in $XDG_CONFIG_HOME/systemd/user/.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=67331
Diffstat (limited to 'src/shared/path-lookup.c')
-rw-r--r-- | src/shared/path-lookup.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c index 40fb0b8b4a..3a6e117d28 100644 --- a/src/shared/path-lookup.c +++ b/src/shared/path-lookup.c @@ -61,6 +61,23 @@ int user_config_home(char **config_home) { return 0; } +int user_runtime(char **user_runtime_path) { + const char *e; + char *r; + + e = getenv("XDG_RUNTIME_DIR"); + if (e) { + r = strappend(e, "/systemd/user"); + if (!r) + return -ENOMEM; + + *user_runtime_path = r; + return 1; + } + + return 0; +} + static char** user_dirs( const char *generator, const char *generator_early, @@ -69,10 +86,11 @@ static char** user_dirs( const char * const config_unit_paths[] = { USER_CONFIG_UNIT_PATH, "/etc/systemd/user", - "/run/systemd/user", NULL }; + const char * const runtime_unit_path = "/run/systemd/user"; + const char * const data_unit_paths[] = { "/usr/local/lib/systemd/user", "/usr/local/share/systemd/user", @@ -83,7 +101,7 @@ static char** user_dirs( }; const char *home, *e; - _cleanup_free_ char *config_home = NULL, *data_home = NULL; + _cleanup_free_ char *config_home = NULL, *user_runtime_dir = NULL, *data_home = NULL; _cleanup_strv_free_ char **config_dirs = NULL, **data_dirs = NULL; char **r = NULL; @@ -99,6 +117,9 @@ static char** user_dirs( if (user_config_home(&config_home) < 0) goto fail; + if (user_runtime(&user_runtime_dir) < 0) + goto fail; + home = getenv("HOME"); e = getenv("XDG_CONFIG_DIRS"); @@ -141,6 +162,13 @@ static char** user_dirs( if (strv_extend(&r, config_home) < 0) goto fail; + if (user_runtime_dir) + if (strv_extend(&r, user_runtime_dir) < 0) + goto fail; + + if (strv_extend(&r, runtime_unit_path) < 0) + goto fail; + if (!strv_isempty(config_dirs)) if (strv_extend_strv_concat(&r, config_dirs, "/systemd/user") < 0) goto fail; |