From: Zbigniew Jędrzejewski-Szmek Date: Thu, 30 Jun 2022 10:13:49 +0000 (+0200) Subject: logind: log wall messages to the journal X-Git-Tag: v252-rc1~752 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=907506695549c689710cd267583f6fd439711dcf;p=thirdparty%2Fsystemd.git logind: log wall messages to the journal Currently kde installs a fake utmp session to listen for this. This provides an alternative mechanism as discussed in #23574. Example with 'shutdown 6 -r' and shutdown -c': PRIORITY=6 SYSLOG_FACILITY=4 SYSLOG_IDENTIFIER=systemd-logind ... CODE_FILE=src/login/logind-utmp.c CODE_LINE=90 CODE_FUNC=warn_wall MESSAGE_ID=9e7066279dc8403da79ce4b1a69064b2 OPERATOR=root MESSAGE=The system will reboot at Thu 2022-06-30 12:16:43 CEST! ACTION=reboot PRIORITY=5 SYSLOG_FACILITY=4 SYSLOG_IDENTIFIER=systemd-logind ... OPERATOR=root CODE_FILE=src/login/logind-dbus.c CODE_LINE=2407 CODE_FUNC=method_cancel_scheduled_shutdown MESSAGE=System shutdown has been cancelled MESSAGE_ID=249f6fb9e6e2428c96f3f0875681ffa3 ACTION=reboot --- diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 031b96e9f15..a426842bbb3 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -2347,7 +2347,6 @@ static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userd if (m->enable_wall_messages) { _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL; - _cleanup_free_ char *username = NULL; const char *tty = NULL; uid_t uid = 0; @@ -2357,7 +2356,14 @@ static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userd (void) sd_bus_creds_get_tty(creds, &tty); } - username = uid_to_name(uid); + _cleanup_free_ char *username = uid_to_name(uid); + + log_struct(LOG_INFO, + LOG_MESSAGE("System shutdown has been cancelled"), + "ACTION=%s", handle_action_to_string(a->handle), + "MESSAGE_ID=" SD_MESSAGE_LOGIND_SHUTDOWN_CANCELED_STR, + username ? "OPERATOR=%s" : NULL, username); + utmp_wall("System shutdown has been cancelled", username, tty, logind_wall_tty_filter, m); } diff --git a/src/login/logind-utmp.c b/src/login/logind-utmp.c index ccf959cd732..06b1bcf9b46 100644 --- a/src/login/logind-utmp.c +++ b/src/login/logind-utmp.c @@ -64,30 +64,37 @@ bool logind_wall_tty_filter(const char *tty, bool is_local, void *userdata) { } static int warn_wall(Manager *m, usec_t n) { - int r; - assert(m); - if (!m->enable_wall_messages || !m->scheduled_shutdown_action) + if (!m->scheduled_shutdown_action) return 0; - usec_t left = m->scheduled_shutdown_timeout > n; + bool left = m->scheduled_shutdown_timeout > n; - _cleanup_free_ char *l = NULL, *username = NULL; - - r = asprintf(&l, "%s%sThe system will %s %s%s!", + _cleanup_free_ char *l = NULL; + if (asprintf(&l, "%s%sThe system will %s %s%s!", strempty(m->wall_message), isempty(m->wall_message) ? "" : "\n", handle_action_verb_to_string(m->scheduled_shutdown_action->handle), left ? "at " : "now", - left ? FORMAT_TIMESTAMP(m->scheduled_shutdown_timeout) : ""); - if (r < 0) { + left ? FORMAT_TIMESTAMP(m->scheduled_shutdown_timeout) : "") < 0) { + log_oom(); - return 0; + return 1; /* We're out-of-memory for now, but let's try to print the message later */ } - username = uid_to_name(m->scheduled_shutdown_uid); - utmp_wall(l, username, m->scheduled_shutdown_tty, logind_wall_tty_filter, m); + _cleanup_free_ char *username = uid_to_name(m->scheduled_shutdown_uid); + + int level = left ? LOG_INFO : LOG_NOTICE; + + log_struct(level, + LOG_MESSAGE("%s", l), + "ACTION=%s", handle_action_to_string(m->scheduled_shutdown_action->handle), + "MESSAGE_ID=" SD_MESSAGE_LOGIND_SHUTDOWN_STR, + username ? "OPERATOR=%s" : NULL, username); + + if (m->enable_wall_messages) + utmp_wall(l, username, m->scheduled_shutdown_tty, logind_wall_tty_filter, m); return 1; } diff --git a/src/systemd/sd-messages.h b/src/systemd/sd-messages.h index 7238137e318..bafaa065f00 100644 --- a/src/systemd/sd-messages.h +++ b/src/systemd/sd-messages.h @@ -203,6 +203,14 @@ _SD_BEGIN_DECLARATIONS; #define SD_MESSAGE_TIME_SYNC SD_ID128_MAKE(7c,8a,41,f3,7b,76,49,41,a0,e1,78,0b,1b,e2,f0,37) #define SD_MESSAGE_TIME_SYNC_STR SD_ID128_MAKE_STR(7c,8a,41,f3,7b,76,49,41,a0,e1,78,0b,1b,e2,f0,37) +#define SD_MESSAGE_LOGIND_SHUTDOWN SD_ID128_MAKE(9e,70,66,27,9d,c8,40,3d,a7,9c,e4,b1,a6,90,64,b2) +#define SD_MESSAGE_LOGIND_SHUTDOWN_STR SD_ID128_MAKE_STR(9e,70,66,27,9d,c8,40,3d,a7,9c,e4,b1,a6,90,64,b2) + +#define SD_MESSAGE_LOGIND_SHUTDOWN_CANCELED \ + SD_ID128_MAKE(24,9f,6f,b9,e6,e2,42,8c,96,f3,f0,87,56,81,ff,a3) +#define SD_MESSAGE_LOGIND_SHUTDOWN_CANCELED_STR \ + SD_ID128_MAKE_STR(24,9f,6f,b9,e6,e2,42,8c,96,f3,f0,87,56,81,ff,a3) + _SD_END_DECLARATIONS; #endif