X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsystemctl%2Fsystemctl.c;h=91467cc0855835551f0ed48cc2a072a51fbcae04;hp=bfa4d45fc2d8c5ed7ad479314c200a9cef73c2ba;hb=748ebafa7a10d4e1f168dd8ae0193124cdf4226e;hpb=d255133d8edc84662d2370a77414505a800d1922 diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index bfa4d45fc..91467cc08 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -1791,7 +1791,16 @@ static int check_inhibitors(DBusConnection *bus, enum action a) { int r; unsigned c = 0; - if (arg_ignore_inhibitors) + if (!bus) + return 0; + + if (arg_ignore_inhibitors || arg_force > 0) + return 0; + + if (arg_when > 0) + return 0; + + if (geteuid() == 0) return 0; if (!on_tty()) @@ -1890,6 +1899,10 @@ static int start_special(DBusConnection *bus, char **args) { a = verb_to_action(args[0]); + r = check_inhibitors(bus, a); + if (r < 0) + return r; + if (arg_force >= 2 && geteuid() != 0) { log_error("Must be root."); return -EPERM; @@ -1909,12 +1922,6 @@ static int start_special(DBusConnection *bus, char **args) { a == ACTION_EXIT)) return daemon_reload(bus, args); - if (arg_force <= 0) { - r = check_inhibitors(bus, a); - if (r < 0) - return r; - } - /* first try logind, to allow authentication with polkit */ if (geteuid() != 0 && (a == ACTION_POWEROFF || @@ -5304,11 +5311,9 @@ static _noreturn_ void halt_now(enum action a) { static int halt_main(DBusConnection *bus) { int r; - if (arg_when <= 0 && arg_force <= 0) { - r = check_inhibitors(bus, arg_action); - if (r < 0) - return r; - } + r = check_inhibitors(bus, arg_action); + if (r < 0) + return r; if (geteuid() != 0) { /* Try logind if we are a normal user and no special