Blame SOURCES/fix-xdmcp-unlock.patch

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