summaryrefslogtreecommitdiff
path: root/src/systemctl
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-09-29 15:09:10 +0200
committerLennart Poettering <lennart@poettering.net>2015-09-29 21:55:53 +0200
commit7f96539d45028650f2ba9452095473a9c455d84b (patch)
treeafaa1268b95252719da0828285589d5bac1388b9 /src/systemctl
parent19578bb26b10b766227cff4d5962521952aac369 (diff)
systemctl: when a shutdown is scheduled, always go via logind
Diffstat (limited to 'src/systemctl')
-rw-r--r--src/systemctl/systemctl.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 6b70d80da4..e0a69867d2 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -7524,10 +7524,11 @@ static int halt_main(void) {
if (r < 0)
return r;
+ if (arg_when > 0)
+ return logind_schedule_shutdown();
+
if (geteuid() != 0) {
- if (arg_when > 0 ||
- arg_dry ||
- arg_force > 0) {
+ if (arg_dry || arg_force > 0) {
log_error("Must be root.");
return -EPERM;
}
@@ -7535,25 +7536,19 @@ static int halt_main(void) {
/* Try logind if we are a normal user and no special
* mode applies. Maybe PolicyKit allows us to shutdown
* the machine. */
- if (IN_SET(arg_action,
- ACTION_POWEROFF,
- ACTION_REBOOT)) {
+ if (IN_SET(arg_action, ACTION_POWEROFF, ACTION_REBOOT)) {
r = logind_reboot(arg_action);
if (r >= 0)
return r;
if (IN_SET(r, -EOPNOTSUPP, -EINPROGRESS))
- /* requested operation is not supported or already in progress */
+ /* requested operation is not
+ * supported on the local system or
+ * already in progress */
return r;
/* on all other errors, try low-level operation */
}
}
- if (arg_when > 0) {
- r = logind_schedule_shutdown();
- if (r >= 0)
- return r;
- }
-
if (!arg_dry && !arg_force)
return start_with_fallback();
@@ -7573,7 +7568,6 @@ static int halt_main(void) {
return 0;
r = halt_now(arg_action);
-
return log_error_errno(r, "Failed to reboot: %m");
}