|
|
9fa8e4 |
From 0b10f4d8e8ef2e6db519a1e5f8884e71c08403d9 Mon Sep 17 00:00:00 2001
|
|
|
9fa8e4 |
From: Ray Strode <rstrode@redhat.com>
|
|
|
9fa8e4 |
Date: Mon, 1 Aug 2016 11:25:47 -0400
|
|
|
9fa8e4 |
Subject: [PATCH] manager: don't try to activate session if session not on seat
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
If a session is not associated with a seat (because it's remote),
|
|
|
9fa8e4 |
then we shouldn't try to activate the session. Activating sessions,
|
|
|
9fa8e4 |
really only means anything on seat0 (where it means to change
|
|
|
9fa8e4 |
the active VT).
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
This prevents premature failure before unlock on XDMCP.
|
|
|
9fa8e4 |
---
|
|
|
9fa8e4 |
daemon/gdm-manager.c | 10 ++++++----
|
|
|
9fa8e4 |
1 file changed, 6 insertions(+), 4 deletions(-)
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
|
|
|
9fa8e4 |
index 72ea968..ed9a437 100644
|
|
|
9fa8e4 |
--- a/daemon/gdm-manager.c
|
|
|
9fa8e4 |
+++ b/daemon/gdm-manager.c
|
|
|
9fa8e4 |
@@ -851,64 +851,66 @@ get_display_and_details_for_bus_sender (GdmManager *self,
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
out:
|
|
|
9fa8e4 |
g_free (session_id);
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
static gboolean
|
|
|
9fa8e4 |
switch_to_compatible_user_session (GdmManager *manager,
|
|
|
9fa8e4 |
GdmSession *session,
|
|
|
9fa8e4 |
gboolean fail_if_already_switched)
|
|
|
9fa8e4 |
{
|
|
|
9fa8e4 |
gboolean res;
|
|
|
9fa8e4 |
gboolean ret;
|
|
|
9fa8e4 |
const char *username;
|
|
|
9fa8e4 |
const char *seat_id;
|
|
|
9fa8e4 |
const char *ssid_to_activate;
|
|
|
9fa8e4 |
GdmSession *existing_session;
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
ret = FALSE;
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
username = gdm_session_get_username (session);
|
|
|
9fa8e4 |
seat_id = gdm_session_get_display_seat_id (session);
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
if (!fail_if_already_switched) {
|
|
|
9fa8e4 |
session = NULL;
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
existing_session = find_session_for_user_on_seat (manager, username, seat_id, session);
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
if (existing_session != NULL) {
|
|
|
9fa8e4 |
ssid_to_activate = gdm_session_get_session_id (existing_session);
|
|
|
9fa8e4 |
- res = activate_session_id (manager, seat_id, ssid_to_activate);
|
|
|
9fa8e4 |
- if (! res) {
|
|
|
9fa8e4 |
- g_debug ("GdmManager: unable to activate session: %s", ssid_to_activate);
|
|
|
9fa8e4 |
- goto out;
|
|
|
9fa8e4 |
+ if (seat_id != NULL) {
|
|
|
9fa8e4 |
+ res = activate_session_id (manager, seat_id, ssid_to_activate);
|
|
|
9fa8e4 |
+ if (! res) {
|
|
|
9fa8e4 |
+ g_debug ("GdmManager: unable to activate session: %s", ssid_to_activate);
|
|
|
9fa8e4 |
+ goto out;
|
|
|
9fa8e4 |
+ }
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
res = session_unlock (manager, ssid_to_activate);
|
|
|
9fa8e4 |
if (!res) {
|
|
|
9fa8e4 |
/* this isn't fatal */
|
|
|
9fa8e4 |
g_debug ("GdmManager: unable to unlock session: %s", ssid_to_activate);
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
} else {
|
|
|
9fa8e4 |
goto out;
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
ret = TRUE;
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
out:
|
|
|
9fa8e4 |
return ret;
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
static GdmDisplay *
|
|
|
9fa8e4 |
get_display_for_user_session (GdmSession *session)
|
|
|
9fa8e4 |
{
|
|
|
9fa8e4 |
return g_object_get_data (G_OBJECT (session), "gdm-display");
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
static GdmSession *
|
|
|
9fa8e4 |
get_seed_session_for_display (GdmDisplay *display)
|
|
|
9fa8e4 |
{
|
|
|
9fa8e4 |
if (display == NULL) {
|
|
|
9fa8e4 |
return NULL;
|
|
|
9fa8e4 |
}
|
|
|
9fa8e4 |
|
|
|
9fa8e4 |
--
|
|
|
9fa8e4 |
2.7.4
|
|
|
9fa8e4 |
|