From: Michal Schmidt Date: Sat, 2 Jul 2011 21:09:59 +0000 (+0200) Subject: shutdown: respect the dry run option '-k' X-Git-Tag: v30~63 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=52c002150a34c07a59369ee952bcd3a1f8f316ca;hp=1a63987788624a8819b94b199aa6748665f5e957 shutdown: respect the dry run option '-k' Don't do the actual power-off/reboot when '-k' is passed to shutdown. Related to: https://bugzilla.redhat.com/show_bug.cgi?id=624149 --- diff --git a/src/shutdownd.c b/src/shutdownd.c index 13819417c..7fd9573b2 100644 --- a/src/shutdownd.c +++ b/src/shutdownd.c @@ -348,7 +348,7 @@ finish: if (unlink_nologin) unlink("/run/nologin"); - if (exec_shutdown) { + if (exec_shutdown && !c.dry_run) { char sw[3]; sw[0] = '-'; diff --git a/src/shutdownd.h b/src/shutdownd.h index ed8a704b1..458164973 100644 --- a/src/shutdownd.h +++ b/src/shutdownd.h @@ -33,6 +33,7 @@ _packed_ struct shutdownd_command { char mode; /* H, P, r, i.e. the switches usually passed to * shutdown to select whether to halt, power-off or * reboot the machine */ + bool dry_run; bool warn_wall; /* Yepp, sometimes we are lazy and use fixed-size strings like diff --git a/src/systemctl.c b/src/systemctl.c index b584e7032..8f904c16c 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -5422,7 +5422,7 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError return verbs[i].dispatch(bus, argv + optind, left); } -static int send_shutdownd(usec_t t, char mode, bool warn, const char *message) { +static int send_shutdownd(usec_t t, char mode, bool dry_run, bool warn, const char *message) { int fd = -1; struct msghdr msghdr; struct iovec iovec; @@ -5432,6 +5432,7 @@ static int send_shutdownd(usec_t t, char mode, bool warn, const char *message) { zero(c); c.elapse = t; c.mode = mode; + c.dry_run = dry_run; c.warn_wall = warn; if (message) @@ -5527,6 +5528,7 @@ static int halt_main(DBusConnection *bus) { arg_action == ACTION_HALT ? 'H' : arg_action == ACTION_POWEROFF ? 'P' : 'r', + arg_dry, !arg_no_wall, m); free(m); @@ -5774,7 +5776,7 @@ int main(int argc, char*argv[]) { break; case ACTION_CANCEL_SHUTDOWN: - r = send_shutdownd(0, 0, false, NULL); + r = send_shutdownd(0, 0, false, false, NULL); break; case ACTION_INVALID: