Blame SOURCES/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch

f66be3
From ef789e1e30c8682ac04e9ed29d40352992bf8aa9 Mon Sep 17 00:00:00 2001
f66be3
From: rpm-build <rpm-build>
f66be3
Date: Thu, 20 Dec 2018 14:51:38 -0500
f66be3
Subject: [PATCH] manager: allow multiple xdmcp logins for the same user
f66be3
f66be3
---
f66be3
 common/gdm-settings-keys.h |  1 +
f66be3
 daemon/gdm-manager.c       | 27 +++++++++++++++++++++++++++
f66be3
 data/gdm.schemas           |  5 +++++
f66be3
 data/gdm.schemas.in.in     |  5 +++++
f66be3
 4 files changed, 38 insertions(+)
f66be3
f66be3
diff --git a/common/gdm-settings-keys.h b/common/gdm-settings-keys.h
f66be3
index f0059b5..33676a8 100644
f66be3
--- a/common/gdm-settings-keys.h
f66be3
+++ b/common/gdm-settings-keys.h
f66be3
@@ -55,6 +55,7 @@ G_BEGIN_DECLS
f66be3
 #define GDM_KEY_MAX_WAIT_INDIRECT "xdmcp/MaxWaitIndirect"
f66be3
 #define GDM_KEY_PING_INTERVAL "xdmcp/PingIntervalSeconds"
f66be3
 #define GDM_KEY_WILLING "xdmcp/Willing"
f66be3
+#define GDM_KEY_ALLOW_MULTIPLE_SESSIONS_PER_USER "xdmcp/AllowMultipleSessionsPerUser"
f66be3
 
f66be3
 #define GDM_KEY_MULTICAST "chooser/Multicast"
f66be3
 #define GDM_KEY_MULTICAST_ADDR "chooser/MulticastAddr"
f66be3
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
f66be3
index 031c61c..225de1d 100644
f66be3
--- a/daemon/gdm-manager.c
f66be3
+++ b/daemon/gdm-manager.c
f66be3
@@ -612,6 +612,11 @@ switch_to_compatible_user_session (GdmManager *manager,
f66be3
         username = gdm_session_get_username (session);
f66be3
         seat_id = gdm_session_get_display_seat_id (session);
f66be3
 
f66be3
+        if (!seat_id || !sd_seat_can_multi_session (seat_id)) {
f66be3
+                g_debug ("GdmManager: unable to activate existing sessions unless on seat0");
f66be3
+                goto out;
f66be3
+        }
f66be3
+
f66be3
         if (!fail_if_already_switched) {
f66be3
                 session = NULL;
f66be3
         }
f66be3
@@ -1091,6 +1096,20 @@ open_temporary_reauthentication_channel (GdmManager            *self,
f66be3
 }
f66be3
 
f66be3
 static gboolean
f66be3
+remote_users_can_log_in_more_than_once (GdmManager *manager)
f66be3
+{
f66be3
+        gboolean enabled;
f66be3
+
f66be3
+        enabled = FALSE;
f66be3
+
f66be3
+        gdm_settings_direct_get_boolean (GDM_KEY_ALLOW_MULTIPLE_SESSIONS_PER_USER, &enabled);
f66be3
+
f66be3
+	g_debug ("GdmDisplay: Remote users allowed to log in more than once: %s", enabled? "yes" : "no");
f66be3
+
f66be3
+        return enabled;
f66be3
+}
f66be3
+
f66be3
+static gboolean
f66be3
 gdm_manager_handle_open_reauthentication_channel (GdmDBusManager        *manager,
f66be3
                                                   GDBusMethodInvocation *invocation,
f66be3
                                                   const char            *username)
f66be3
@@ -1122,6 +1141,14 @@ gdm_manager_handle_open_reauthentication_channel (GdmDBusManager        *manager
f66be3
                 return TRUE;
f66be3
         }
f66be3
 
f66be3
+        if (is_login_screen && is_remote && remote_users_can_log_in_more_than_once (self)) {
f66be3
+                g_dbus_method_invocation_return_error_literal (invocation,
f66be3
+                                                               G_DBUS_ERROR,
f66be3
+                                                               G_DBUS_ERROR_ACCESS_DENIED,
f66be3
+                                                               "Login screen creates new sessions for remote connections");
f66be3
+		return TRUE;
f66be3
+        }
f66be3
+
f66be3
         if (is_login_screen) {
f66be3
                 session = find_session_for_user_on_seat (self,
f66be3
                                                          username,
f66be3
diff --git a/data/gdm.schemas.in.in b/data/gdm.schemas.in.in
f66be3
index 8ad2031..003f92c 100644
f66be3
--- a/data/gdm.schemas.in.in
f66be3
+++ b/data/gdm.schemas.in.in
f66be3
@@ -129,5 +129,10 @@
f66be3
       <signature>s</signature>
f66be3
       <default>@gdmconfdir@/Xwilling</default>
f66be3
     </schema>
f66be3
+    <schema>
f66be3
+      <key>xdmcp/AllowMultipleSessionsPerUser</key>
f66be3
+      <signature>b</signature>
f66be3
+      <default>false</default>
f66be3
+    </schema>
f66be3
   </schemalist>
f66be3
 </gdmschemafile>
f66be3
-- 
f66be3
1.8.3.1
f66be3