X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Flogind-dbus.c;h=1ab874537506b5174571ba19a9f5f06d32a01ba8;hb=44ed821f77c4925095eb8a3dc40f3b056bced3f7;hp=cb67c668fa9982d262ab68ecf361017b8cc7bcab;hpb=a0b00cabbb5943c0b777eb22f7d20e8b90b290b0;p=elogind.git diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index cb67c668f..1ab874537 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -1776,6 +1776,10 @@ int bus_manager_shutdown_or_sleep_now_or_later( m->inhibit_delay_max > 0 && manager_is_inhibited(m, w, INHIBIT_DELAY, NULL, false, false, 0, NULL); + log_debug_elogind("%s called for %s (%sdelayed)", __FUNCTION__, + handle_action_to_string(action), + delayed ? "" : "NOT "); + if (delayed) /* Shutdown is delayed, keep in mind what we * want to do, and start a timeout */ @@ -1872,6 +1876,10 @@ static int method_do_shutdown_or_sleep( if (r < 0) return r; + log_debug_elogind("%s called with action '%s', sleep '%s' (%sinteractive)", + __FUNCTION__, action, sleep_verb, + interactive ? "" : "NOT "); + /* Don't allow multiple jobs being executed at the same time */ if (m->action_what) return sd_bus_error_setf(error, BUS_ERROR_OPERATION_IN_PROGRESS, "There's already a shutdown or sleep operation in progress"); @@ -1887,6 +1895,7 @@ static int method_do_shutdown_or_sleep( r = verify_shutdown_creds(m, message, w, interactive, action, action_multiple_sessions, action_ignore_inhibit, error); + log_debug_elogind("verify_shutdown_creds() returned %d", r); if (r != 0) return r; @@ -1900,6 +1909,8 @@ static int method_do_shutdown_or_sleep( static int method_poweroff(sd_bus_message *message, void *userdata, sd_bus_error *error) { Manager *m = userdata; + log_debug_elogind("%s called", __FUNCTION__); + return method_do_shutdown_or_sleep( m, message, HANDLE_POWEROFF, @@ -1914,6 +1925,8 @@ static int method_poweroff(sd_bus_message *message, void *userdata, sd_bus_error static int method_reboot(sd_bus_message *message, void *userdata, sd_bus_error *error) { Manager *m = userdata; + log_debug_elogind("%s called", __FUNCTION__); + return method_do_shutdown_or_sleep( m, message, HANDLE_REBOOT, @@ -1928,6 +1941,8 @@ static int method_reboot(sd_bus_message *message, void *userdata, sd_bus_error * static int method_suspend(sd_bus_message *message, void *userdata, sd_bus_error *error) { Manager *m = userdata; + log_debug_elogind("%s called", __FUNCTION__); + return method_do_shutdown_or_sleep( m, message, HANDLE_SUSPEND, @@ -2055,6 +2070,8 @@ static int method_schedule_shutdown(sd_bus_message *message, void *userdata, sd_ assert(m); assert(message); + log_debug_elogind("%s called", __FUNCTION__); + r = sd_bus_message_read(message, "st", &type, &elapse); if (r < 0) return r; @@ -2153,10 +2170,15 @@ static int method_schedule_shutdown(sd_bus_message *message, void *userdata, sd_ static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userdata, sd_bus_error *error) { Manager *m = userdata; bool cancelled; +#if 1 /// elogind needs to construct the message to allow extra wall messages + _cleanup_free_ char *l = NULL; +#endif // 1 assert(m); assert(message); + log_debug_elogind("%s called", __FUNCTION__); + cancelled = m->scheduled_shutdown_type != NULL; reset_scheduled_shutdown(m); @@ -2172,8 +2194,20 @@ static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userd (void) sd_bus_creds_get_tty(creds, &tty); } +#if 0 /// elogind wants to allow extra cancellation messages utmp_wall("The system shutdown has been cancelled", uid_to_name(uid), tty, logind_wall_tty_filter, m); +#else + r = asprintf(&l, "%s%sThe system shutdown has been cancelled!", + strempty(m->wall_message), + isempty(m->wall_message) ? "" : "\n"); + if (r < 0) { + log_oom(); + return 0; + } + + utmp_wall(l, uid_to_name(uid), tty, logind_wall_tty_filter, m); +#endif // 0 } return sd_bus_reply_method_return(message, "b", cancelled); @@ -2182,6 +2216,8 @@ static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userd static int method_hibernate(sd_bus_message *message, void *userdata, sd_bus_error *error) { Manager *m = userdata; + log_debug_elogind("%s called", __FUNCTION__); + return method_do_shutdown_or_sleep( m, message, HANDLE_HIBERNATE, @@ -2196,6 +2232,8 @@ static int method_hibernate(sd_bus_message *message, void *userdata, sd_bus_erro static int method_hybrid_sleep(sd_bus_message *message, void *userdata, sd_bus_error *error) { Manager *m = userdata; + log_debug_elogind("%s called", __FUNCTION__); + return method_do_shutdown_or_sleep( m, message, HANDLE_HYBRID_SLEEP,