diff options
author | Harald Hoyer <harald@redhat.com> | 2013-04-08 14:05:24 +0200 |
---|---|---|
committer | Harald Hoyer <harald@redhat.com> | 2013-04-08 14:45:19 +0200 |
commit | b3680f49e20c51e31c8dea84a11207df7b8f0100 (patch) | |
tree | 400fa9847c6fe350078c08c01ab14737fd4112de /src/core/main.c | |
parent | 9735bd12ab7668cc1b7b518299797b101f16bd58 (diff) |
Do not serialize environment, when switching root
When switching root, i.e. LANG can be set to the locale of the initramfs
or "C", if it was unset. When systemd deserializes LANG in the real root
this would overwrite the setting previously gathered by locale_set().
To reproduce, boot with an initramfs without locale.conf or change
/etc/locale.conf to a different language than the initramfs and check a
daemon started by systemd:
$ tr "$\000" '\n' </proc/$(pidof sshd)/environ | grep LANG
LANG=C
To prevent that, serialization of environment variables is skipped, when
serializing for switching root.
https://bugzilla.redhat.com/show_bug.cgi?id=949525
Diffstat (limited to 'src/core/main.c')
-rw-r--r-- | src/core/main.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/core/main.c b/src/core/main.c index 921476a042..789976108a 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1088,7 +1088,7 @@ static int version(void) { return 0; } -static int prepare_reexecute(Manager *m, FILE **_f, FDSet **_fds, bool serialize_jobs) { +static int prepare_reexecute(Manager *m, FILE **_f, FDSet **_fds, bool switching_root) { FILE *f = NULL; FDSet *fds = NULL; int r; @@ -1113,7 +1113,7 @@ static int prepare_reexecute(Manager *m, FILE **_f, FDSet **_fds, bool serialize goto fail; } - r = manager_serialize(m, f, fds, serialize_jobs); + r = manager_serialize(m, f, fds, switching_root); if (r < 0) { log_error("Failed to serialize state: %s", strerror(-r)); goto fail; @@ -1780,7 +1780,7 @@ int main(int argc, char *argv[]) { case MANAGER_REEXECUTE: - if (prepare_reexecute(m, &serialization, &fds, true) < 0) + if (prepare_reexecute(m, &serialization, &fds, false) < 0) goto finish; reexecute = true; @@ -1794,7 +1794,7 @@ int main(int argc, char *argv[]) { m->switch_root = m->switch_root_init = NULL; if (!switch_root_init) - if (prepare_reexecute(m, &serialization, &fds, false) < 0) + if (prepare_reexecute(m, &serialization, &fds, true) < 0) goto finish; reexecute = true; |