--- src/core/unit.c | 14 ++++++++++---- src/shared/path-lookup.c | 34 ++++++++++++++++++++++++++++++++++ src/shared/path-lookup.h | 2 ++ 3 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/src/core/unit.c b/src/core/unit.c index c963870..029f7ee 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -2727,7 +2727,10 @@ static int drop_in_file(Unit *u, UnitSetPropertiesMode mode, const char *name, c if (u->manager->running_as == SYSTEMD_USER) { _cleanup_free_ char *c = NULL; - r = user_config_home(&c); + if (mode & UNIT_PERSISTENT) + r = user_config_home(&c); + else + r = user_path_transient(&c); if (r < 0) return r; if (r == 0) @@ -2737,7 +2740,10 @@ static int drop_in_file(Unit *u, UnitSetPropertiesMode mode, const char *name, c } else if (u->manager->running_as == SYSTEMD_SESSION) { _cleanup_free_ char *c = NULL; - r = session_config_home(&c); + if (mode & UNIT_PERSISTENT) + r = session_config_home(&c); + else + r = session_path_transient(&c); if (r < 0) return r; if (r == 0) @@ -2882,7 +2888,7 @@ int unit_make_transient(Unit *u) { if (u->manager->running_as == SYSTEMD_USER) { _cleanup_free_ char *c = NULL; - r = user_config_home(&c); + r = user_path_transient(&c); if (r < 0) return r; if (r == 0) @@ -2896,7 +2902,7 @@ int unit_make_transient(Unit *u) { } else if (u->manager->running_as == SYSTEMD_SESSION) { _cleanup_free_ char *c = NULL; - r = session_config_home(&c); + r = session_path_transient(&c); if (r < 0) return r; if (r == 0) diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c index 58b1315..e7c9c7d 100644 --- a/src/shared/path-lookup.c +++ b/src/shared/path-lookup.c @@ -69,6 +69,23 @@ int user_config_home(char **config_home) { return 0; } +int user_path_transient(char **path) { + const char *e; + char *r; + + e = getenv("XDG_RUNTIME_DIR"); + if (!e) { + return 0; + } + r = strappend(e, "/systemd/user"); + if (!r) + return -ENOMEM; + + *path = r; + + return 1; +} + int session_config_home(char **config_home) { const char *e; char *r; @@ -98,6 +115,23 @@ int session_config_home(char **config_home) { return 0; } +int session_path_transient(char **path) { + const char *e; + char *r; + + e = getenv("XDG_SESSION_DIR"); + if (!e) { + return 0; + } + r = strappend(e, "/systemd/session"); + if (!r) + return -ENOMEM; + + *path = r; + + return 1; +} + static char** user_dirs( const char *generator, const char *generator_early, diff --git a/src/shared/path-lookup.h b/src/shared/path-lookup.h index b1341aa..3d95fe2 100644 --- a/src/shared/path-lookup.h +++ b/src/shared/path-lookup.h @@ -43,7 +43,9 @@ const char* systemd_running_as_to_string(SystemdRunningAs i) _const_; SystemdRunningAs systemd_running_as_from_string(const char *s) _pure_; int user_config_home(char **config_home); +int user_path_transient(char **path); int session_config_home(char **config_home); +int session_path_transient(char **path); int lookup_paths_init(LookupPaths *p, SystemdRunningAs running_as, bool personal, const char *generator, const char *generator_early, const char *generator_late); void lookup_paths_free(LookupPaths *p); -- 1.8.4.4 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel