From 1a545ba0744532f2936899806523214d3a067769 Mon Sep 17 00:00:00 2001 From: William Jon McCann Date: Tue, 29 Jan 2008 14:06:45 -0500 Subject: add support for logging start/stop/restart Also enable reporting this information with ck-history. --- src/ck-manager.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 4 deletions(-) (limited to 'src/ck-manager.c') diff --git a/src/ck-manager.c b/src/ck-manager.c index c7c045b..9d9c786 100644 --- a/src/ck-manager.c +++ b/src/ck-manager.c @@ -434,6 +434,50 @@ log_seat_removed_event (CkManager *manager, g_free (sid); } +static void +log_system_stop_event (CkManager *manager) +{ + CkLogEvent event; + gboolean res; + GError *error; + + memset (&event, 0, sizeof (CkLogEvent)); + + event.type = CK_LOG_EVENT_SYSTEM_STOP; + g_get_current_time (&event.timestamp); + + error = NULL; + res = ck_event_logger_queue_event (manager->priv->logger, &event, &error); + if (! res) { + g_debug ("Unable to log event: %s", error->message); + g_error_free (error); + } + + /* FIXME: in this case we should block and wait for log to flush */ +} + +static void +log_system_restart_event (CkManager *manager) +{ + CkLogEvent event; + gboolean res; + GError *error; + + memset (&event, 0, sizeof (CkLogEvent)); + + event.type = CK_LOG_EVENT_SYSTEM_RESTART; + g_get_current_time (&event.timestamp); + + error = NULL; + res = ck_event_logger_queue_event (manager->priv->logger, &event, &error); + if (! res) { + g_debug ("Unable to log event: %s", error->message); + g_error_free (error); + } + + /* FIXME: in this case we should block and wait for log to flush */ +} + static void log_seat_session_added_event (CkManager *manager, CkSeat *seat, @@ -1214,7 +1258,7 @@ get_system_num_users (CkManager *manager) #ifdef ENABLE_RBAC_SHUTDOWN static gboolean -check_rbac_permissions (CkManager *manager, +check_rbac_permissions (CkManager *manager, DBusGMethodInvocation *context) { const char *sender; @@ -1243,10 +1287,11 @@ check_rbac_permissions (CkManager *manager, out: - if (res == TRUE) + if (res == TRUE) { g_debug ("User %s has RBAC permission to stop/restart", username); - else + } else { g_debug ("User %s does not have RBAC permission to stop/restart", username); + } g_free (username); return res; @@ -1287,12 +1332,15 @@ ck_manager_restart (CkManager *manager, #endif #ifdef ENABLE_RBAC_SHUTDOWN - if (!check_rbac_permissions (manager, context)) + if (! check_rbac_permissions (manager, context)) { goto out; + } #endif g_debug ("ConsoleKit preforming Restart: %s", action); + log_system_restart_event (manager); + error = NULL; res = g_spawn_command_line_async (LIBDIR "/ConsoleKit/scripts/ck-system-restart", &error); @@ -1348,6 +1396,9 @@ ck_manager_stop (CkManager *manager, #endif g_debug ("Stopping system"); + + log_system_stop_event (manager); + error = NULL; res = g_spawn_command_line_async (LIBDIR "/ConsoleKit/scripts/ck-system-stop", &error); -- cgit