From: Lennart Poettering Date: Fri, 11 Jan 2013 23:09:22 +0000 (+0100) Subject: systemctl: honour inhibitors only when running unprivileged X-Git-Tag: v198~557 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=748ebafa7a10d4e1f168dd8ae0193124cdf4226e systemctl: honour inhibitors only when running unprivileged --- 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