summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.c2
-rw-r--r--src/manager.c15
-rw-r--r--src/manager.h2
3 files changed, 13 insertions, 6 deletions
diff --git a/src/main.c b/src/main.c
index d3c01b4a67..aaddce86e0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -773,7 +773,7 @@ static int prepare_reexecute(Manager *m, FILE **_f, FDSet **_fds) {
assert(_f);
assert(_fds);
- if ((r = manager_open_serialization(&f)) < 0) {
+ if ((r = manager_open_serialization(m, &f)) < 0) {
log_error("Failed to create serialization faile: %s", strerror(-r));
goto fail;
}
diff --git a/src/manager.c b/src/manager.c
index 8a9b9dd44e..bdb2b8ba3e 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -2279,7 +2279,7 @@ void manager_dispatch_bus_query_pid_done(
UNIT_VTABLE(u)->bus_query_pid_done(u, name, pid);
}
-int manager_open_serialization(FILE **_f) {
+int manager_open_serialization(Manager *m, FILE **_f) {
char *path;
mode_t saved_umask;
int fd;
@@ -2287,8 +2287,15 @@ int manager_open_serialization(FILE **_f) {
assert(_f);
- if (asprintf(&path, "/dev/shm/systemd-%u.dump-XXXXXX", (unsigned) getpid()) < 0)
- return -ENOMEM;
+ if (m->running_as == MANAGER_SYSTEM) {
+ mkdir_p("/dev/.systemd", 0755);
+
+ if (asprintf(&path, "/dev/.systemd/dump-%lu-XXXXXX", (unsigned long) getpid()) < 0)
+ return -ENOMEM;
+ } else {
+ if (asprintf(&path, "/tmp/systemd-dump-%lu-XXXXXX", (unsigned long) getpid()) < 0)
+ return -ENOMEM;
+ }
saved_umask = umask(0077);
fd = mkostemp(path, O_RDWR|O_CLOEXEC);
@@ -2396,7 +2403,7 @@ int manager_reload(Manager *m) {
assert(m);
- if ((r = manager_open_serialization(&f)) < 0)
+ if ((r = manager_open_serialization(m, &f)) < 0)
return r;
if (!(fds = fdset_new())) {
diff --git a/src/manager.h b/src/manager.h
index 7328724b09..a5bc9202ff 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -239,7 +239,7 @@ void manager_write_utmp_runlevel(Manager *m, Unit *t);
void manager_dispatch_bus_name_owner_changed(Manager *m, const char *name, const char* old_owner, const char *new_owner);
void manager_dispatch_bus_query_pid_done(Manager *m, const char *name, pid_t pid);
-int manager_open_serialization(FILE **_f);
+int manager_open_serialization(Manager *m, FILE **_f);
int manager_serialize(Manager *m, FILE *f, FDSet *fds);
int manager_deserialize(Manager *m, FILE *f, FDSet *fds);