summaryrefslogtreecommitdiff
path: root/mate-session
diff options
context:
space:
mode:
authorinfirit <[email protected]>2014-11-04 20:38:26 +0100
committerinfirit <[email protected]>2014-11-04 22:08:50 +0100
commitf3ad046b9abf2d52514527e483c92c4b791ab94c (patch)
tree59152c98ad943b936cf24eb0dc789d0891b3e690 /mate-session
parent5fe70eb9aa653c1218d9e420d369819e7d54a9c8 (diff)
downloadmate-session-manager-f3ad046b9abf2d52514527e483c92c4b791ab94c.tar.bz2
mate-session-manager-f3ad046b9abf2d52514527e483c92c4b791ab94c.tar.xz
gsm: Also support disable-log-out for Shutdown/CanShutdown dbus methods
On top of that, be a bit paranoid and ensure we don't log out in end_phase() by checking the lockdown setting there too. Based on gnome-session-commit: 107cfa7a4f6f43698407772e31472d742bdb219f From: Vincent Untz <[email protected]>
Diffstat (limited to 'mate-session')
-rw-r--r--mate-session/gsm-manager.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c
index a880fb3..c8af33a 100644
--- a/mate-session/gsm-manager.c
+++ b/mate-session/gsm-manager.c
@@ -175,6 +175,8 @@ static void gsm_manager_class_init (GsmManagerClass *klass);
static void gsm_manager_init (GsmManager *manager);
static void gsm_manager_finalize (GObject *object);
+static gboolean _log_out_is_locked_down (GsmManager *manager);
+
static void _handle_client_end_session_response (GsmManager *manager,
GsmClient *client,
gboolean is_ok,
@@ -523,6 +525,8 @@ gsm_manager_quit (GsmManager *manager)
static void
end_phase (GsmManager *manager)
{
+ gboolean start_next_phase = TRUE;
+
g_debug ("GsmManager: ending phase %s\n",
phase_num_to_name (manager->priv->phase));
@@ -547,25 +551,32 @@ end_phase (GsmManager *manager)
case GSM_MANAGER_PHASE_PANEL:
case GSM_MANAGER_PHASE_DESKTOP:
case GSM_MANAGER_PHASE_APPLICATION:
+ break;
case GSM_MANAGER_PHASE_RUNNING:
+ if (_log_out_is_locked_down (manager)) {
+ g_warning ("Unable to logout: Logout has been locked down");
+ start_next_phase = FALSE;
+ }
+ break;
case GSM_MANAGER_PHASE_QUERY_END_SESSION:
- manager->priv->phase++;
- start_phase (manager);
break;
case GSM_MANAGER_PHASE_END_SESSION:
- if (auto_save_is_enabled (manager)) {
+ if (auto_save_is_enabled (manager))
maybe_save_session (manager);
- }
- manager->priv->phase++;
- start_phase (manager);
break;
case GSM_MANAGER_PHASE_EXIT:
+ start_next_phase = FALSE;
gsm_manager_quit (manager);
break;
default:
g_assert_not_reached ();
break;
}
+
+ if (start_next_phase) {
+ manager->priv->phase++;
+ start_phase (manager);
+ }
}
static void
@@ -3327,6 +3338,14 @@ gsm_manager_shutdown (GsmManager *manager,
return FALSE;
}
+ if (_log_out_is_locked_down (manager)) {
+ g_set_error (error,
+ GSM_MANAGER_ERROR,
+ GSM_MANAGER_ERROR_LOCKED_DOWN,
+ "Logout has been locked down");
+ return FALSE;
+ }
+
show_shutdown_dialog (manager);
return TRUE;
@@ -3365,10 +3384,11 @@ gsm_manager_can_shutdown (GsmManager *manager,
else {
#endif
consolekit = gsm_get_consolekit ();
- *shutdown_available = gsm_consolekit_can_stop (consolekit)
- || gsm_consolekit_can_restart (consolekit)
- || can_suspend
- || can_hibernate;
+ *shutdown_available = !_log_out_is_locked_down (manager) &&
+ (gsm_consolekit_can_stop (consolekit)
+ || gsm_consolekit_can_restart (consolekit)
+ || can_suspend
+ || can_hibernate);
g_object_unref (consolekit);
#ifdef HAVE_SYSTEMD
}