X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmain.c;h=54ebb0b08cb8f67b6996a5f52eaab9c8c276e73d;hb=e8bf3c88e3a80b791cee3c6207a36e82a2ac1029;hp=6d1fd7d55d834f5dca74e38e4416c1f26948f535;hpb=fe783b03419181bed69003ffdd73132426de246a;p=elogind.git diff --git a/src/main.c b/src/main.c index 6d1fd7d55..54ebb0b08 100644 --- a/src/main.c +++ b/src/main.c @@ -226,6 +226,8 @@ static int parse_proc_cmdline_word(const char *word) { static const char * const rlmap[] = { "emergency", SPECIAL_EMERGENCY_TARGET, + "-b", SPECIAL_EMERGENCY_TARGET, + "b", SPECIAL_EMERGENCY_TARGET, "single", SPECIAL_RESCUE_TARGET, "-s", SPECIAL_RESCUE_TARGET, "s", SPECIAL_RESCUE_TARGET, @@ -624,7 +626,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 1); assert(argv); - while ((c = getopt_long(argc, argv, "hD", options, NULL)) >= 0) + while ((c = getopt_long(argc, argv, "hDbsz:", options, NULL)) >= 0) switch (c) { @@ -800,19 +802,29 @@ static int parse_argv(int argc, char *argv[]) { log_set_max_level(LOG_DEBUG); break; - case '?': - return -EINVAL; + case 'b': + case 's': + case 'z': + /* Just to eat away the sysvinit kernel + * cmdline args without getopt() error + * messages that we'll parse in + * parse_proc_cmdline_word() or ignore. */ + case '?': default: - log_error("Unknown option code %c", c); - return -EINVAL; + if (getpid() != 1) { + log_error("Unknown option code %c", c); + return -EINVAL; + } + + break; } /* PID 1 will get the kernel arguments as parameters, which we * ignore and unconditionally read from * /proc/cmdline. However, we need to ignore those arguments * here. */ - if (arg_running_as != MANAGER_SYSTEM && optind < argc) { + if (getpid() != 1 && optind < argc) { log_error("Excess arguments."); return -EINVAL; } @@ -1039,7 +1051,7 @@ int main(int argc, char *argv[]) { /* If Plymouth is being run make sure we show the status, so * that there's something nice to see when people press Esc */ - if (access("/dev/.systemd/plymouth", F_OK) >= 0) + if (access("/dev/.run/initramfs/plymouth", F_OK) >= 0) arg_show_status = true; if (arg_action == ACTION_HELP) {