From: Sven Eden Date: Mon, 26 Jun 2017 17:09:25 +0000 (+0200) Subject: Prep v231.2: Only check time and wall arguments for shutdown and reboot. X-Git-Tag: v231.3~14 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=44ed821f77c4925095eb8a3dc40f3b056bced3f7;hp=2969e7f1aa86fb3e95e5f2920dbb24874e3713fd Prep v231.2: Only check time and wall arguments for shutdown and reboot. --- diff --git a/src/login/eloginctl.c b/src/login/eloginctl.c index 1c5968cfa..0b4dc84b4 100644 --- a/src/login/eloginctl.c +++ b/src/login/eloginctl.c @@ -476,37 +476,40 @@ int start_special(int argc, char *argv[], void *userdata) { elogind_log_special(a); - /* No power off actions in chroot environments */ - if ( IN_SET(a, ACTION_POWEROFF, ACTION_REBOOT) - && (running_in_chroot() > 0) ) { - log_info("Running in chroot, ignoring request."); - return 0; - } + /* For poweroff and reboot, some extra checks are performed: */ + if ( IN_SET(a, ACTION_POWEROFF, ACTION_REBOOT) ) { - /* Check time arguments */ - if ( IN_SET(a, ACTION_POWEROFF, ACTION_REBOOT) - && (argc > 1) - && (arg_action != ACTION_CANCEL_SHUTDOWN) ) { - r = parse_shutdown_time_spec(argv[1], &arg_when); - if (r < 0) { - log_error("Failed to parse time specification: %s", argv[optind]); - return r; + /* No power off actions in chroot environments */ + if ( running_in_chroot() > 0 ) { + log_info("Running in chroot, ignoring request."); + return 0; + } + + /* Check time argument */ + if ( (argc > 1) && (ACTION_CANCEL_SHUTDOWN != arg_action)) { + r = parse_shutdown_time_spec(argv[1], &arg_when); + if (r < 0) { + log_error("Failed to parse time specification: %s", argv[optind]); + return r; + } + } + + /* The optional user wall message must be set */ + if ( (argc > 1) + && ( (arg_action == ACTION_CANCEL_SHUTDOWN) + || (0 == arg_when) ) ) + /* No time argument for shutdown cancel, or no + * time argument given. */ + wall = argv + 1; + else if (argc > 2) + /* We skip the time argument */ + wall = argv + 2; + + if (wall) { + arg_wall = strv_copy(wall); + if (!arg_wall) + return log_oom(); } - } else - arg_when = now(CLOCK_REALTIME) + USEC_PER_MINUTE; - - /* The optional user wall message must be set */ - if ((argc > 1) && (arg_action == ACTION_CANCEL_SHUTDOWN) ) - /* No time argument for shutdown cancel */ - wall = argv + 1; - else if (argc > 2) - /* We skip the time argument */ - wall = argv + 2; - - if (wall) { - arg_wall = strv_copy(wall); - if (!arg_wall) - return log_oom(); } /* Switch to cancel shutdown, if a shutdown action was requested,