summaryrefslogtreecommitdiffstats
path: root/debian/patches/debian/systemctl-do-not-shutdown-immediately-on-scheduled-shutdo.patch
blob: 68fca31b947101b4ffdcf83e0f112948a9ed9caf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
From: Ioanna Alifieraki <ioanna-maria.alifieraki@canonical.com>
Date: Thu, 17 Dec 2020 14:52:07 +0000
Subject: systemctl: do not shutdown immediately on scheduled shutdown

When, for whatever reason, a scheduled shutdown fails to be set, systemd
will proceed with immediate shutdown without allowing the user to react.
This is counterintuitive because when a scheduled shutdown is issued,
it means the user wants to shutdown at a specified time in the future,
not immediately. This patch prevents the immediate shutdown and informs
the user that no action will be taken.

Fixes: #17575
---
 src/systemctl/systemctl-compat-halt.c | 8 ++++----
 src/systemctl/systemctl-logind.c      | 3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/systemctl/systemctl-compat-halt.c b/src/systemctl/systemctl-compat-halt.c
index 8e41bd6..239a780 100644
--- a/src/systemctl/systemctl-compat-halt.c
+++ b/src/systemctl/systemctl-compat-halt.c
@@ -149,11 +149,11 @@ int halt_main(void) {
         if (r < 0)
                 return r;
 
-        /* Delayed shutdown requested, and was successful */
-        if (arg_when > 0 && logind_schedule_shutdown() == 0)
-                return 0;
+        /* Delayed shutdown requested */
+        if (arg_when > 0)
+                return logind_schedule_shutdown();
 
-        /* No delay, or logind failed or is not at all available */
+        /* No delay, or logind is not at all available */
         if (geteuid() != 0) {
                 if (arg_dry_run || arg_force > 0) {
                         (void) must_be_root();
diff --git a/src/systemctl/systemctl-logind.c b/src/systemctl/systemctl-logind.c
index 405f12a..fd0b143 100644
--- a/src/systemctl/systemctl-logind.c
+++ b/src/systemctl/systemctl-logind.c
@@ -315,8 +315,9 @@ int logind_schedule_shutdown(void) {
         (void) logind_set_wall_message();
 
         r = bus_call_method(bus, bus_login_mgr, "ScheduleShutdown", &error, NULL, "st", action, arg_when);
+        /* logind fails, cannot schedule reboot, do nothing */
         if (r < 0)
-                return log_warning_errno(r, "Failed to call ScheduleShutdown in logind, proceeding with immediate shutdown: %s", bus_error_message(&error, r));
+                return log_warning_errno(r, "Failed to call ScheduleShutdown in logind, no action will be taken: %s", bus_error_message(&error, r));
 
         if (!arg_quiet)
                 log_info("%s scheduled for %s, use 'shutdown -c' to cancel.", log_action, format_timestamp_style(date, sizeof(date), arg_when, arg_timestamp_style));