mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-28 20:25:25 +03:00
systemctl: switch-root - read init= from /proc/cmdline
If the path to init is not specified as an argumnt to systemctl, but init= is given on the kernel commandline, use that. This means the initrd does not need glue code to parse the kernel commandline before passing on init= to systemctl. Cc: Harald Hoyer <harald@redhat.com> Cc: Dave Reisner <dreisner@archlinux.org>
This commit is contained in:
parent
485507b8c0
commit
13068da8b0
@ -3324,7 +3324,8 @@ finish:
|
||||
|
||||
static int switch_root(DBusConnection *bus, char **args) {
|
||||
unsigned l;
|
||||
const char *root, *init;
|
||||
const char *root;
|
||||
_cleanup_free_ char *init = NULL;
|
||||
|
||||
l = strv_length(args);
|
||||
if (l < 2 || l > 3) {
|
||||
@ -3333,7 +3334,23 @@ static int switch_root(DBusConnection *bus, char **args) {
|
||||
}
|
||||
|
||||
root = args[1];
|
||||
init = l >= 3 ? args[2] : "";
|
||||
|
||||
if (l >= 3)
|
||||
init = strdup(args[2]);
|
||||
else {
|
||||
parse_env_file("/proc/cmdline", WHITESPACE,
|
||||
"init", &init,
|
||||
NULL);
|
||||
|
||||
if (!init)
|
||||
init = strdup("");
|
||||
|
||||
if (!init)
|
||||
return log_oom();
|
||||
|
||||
}
|
||||
|
||||
log_debug("switching root - root: %s; init: %s", root, init);
|
||||
|
||||
return bus_method_call_with_reply (
|
||||
bus,
|
||||
|
Loading…
Reference in New Issue
Block a user