Blame SOURCES/0003-xdmcp-display-factory-Set-supported-session-types-fo.patch

6b1540
From b5472a30b1a71aec537ac309e2985cbac61b3136 Mon Sep 17 00:00:00 2001
6b1540
From: Ray Strode <rstrode@redhat.com>
6b1540
Date: Tue, 14 Sep 2021 11:00:33 -0400
6b1540
Subject: [PATCH 3/4] xdmcp-display-factory: Set supported session types for
6b1540
 XDMCP displays
6b1540
6b1540
The lower levels of GDM now expect the session types supported by a
6b1540
display to be specified up front.
6b1540
6b1540
This commit makes sure XDMCP displays do that.
6b1540
---
6b1540
 daemon/gdm-xdmcp-display-factory.c | 6 ++++++
6b1540
 1 file changed, 6 insertions(+)
6b1540
6b1540
diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c
6b1540
index ce8f026e..abb58fae 100644
6b1540
--- a/daemon/gdm-xdmcp-display-factory.c
6b1540
+++ b/daemon/gdm-xdmcp-display-factory.c
6b1540
@@ -2104,94 +2104,100 @@ on_display_status_changed (GdmDisplay             *display,
6b1540
                 break;
6b1540
         case GDM_DISPLAY_MANAGED:
6b1540
                 if (session != NULL) {
6b1540
                         g_signal_connect_object (G_OBJECT (session),
6b1540
                                                  "client-disconnected",
6b1540
                                                  G_CALLBACK (on_client_disconnected),
6b1540
                                                  display, G_CONNECT_SWAPPED);
6b1540
                         g_signal_connect_object (G_OBJECT (session),
6b1540
                                                  "disconnected",
6b1540
                                                  G_CALLBACK (on_client_disconnected),
6b1540
                                                  display, G_CONNECT_SWAPPED);
6b1540
                 }
6b1540
                 break;
6b1540
         default:
6b1540
                 g_assert_not_reached ();
6b1540
                 break;
6b1540
         }
6b1540
 
6b1540
         g_clear_object (&launch_environment);
6b1540
 }
6b1540
 
6b1540
 static GdmDisplay *
6b1540
 gdm_xdmcp_display_create (GdmXdmcpDisplayFactory *factory,
6b1540
                           const char             *hostname,
6b1540
                           GdmAddress             *address,
6b1540
                           int                     displaynum)
6b1540
 {
6b1540
         GdmDisplay      *display;
6b1540
         GdmDisplayStore *store;
6b1540
         gboolean         use_chooser;
6b1540
+        const char      *session_types[] = { "x11", NULL };
6b1540
 
6b1540
         g_debug ("GdmXdmcpDisplayFactory: Creating xdmcp display for %s:%d",
6b1540
                 hostname ? hostname : "(null)", displaynum);
6b1540
 
6b1540
         use_chooser = FALSE;
6b1540
         if (factory->honor_indirect) {
6b1540
                 IndirectClient *ic;
6b1540
 
6b1540
                 ic = indirect_client_lookup (factory, address);
6b1540
 
6b1540
                 /* This was an indirect thingie and nothing was yet chosen,
6b1540
                  * use a chooser */
6b1540
                 if (ic != NULL && ic->chosen_address == NULL) {
6b1540
                         use_chooser = TRUE;
6b1540
                 }
6b1540
         }
6b1540
 
6b1540
         if (use_chooser) {
6b1540
                 display = gdm_xdmcp_chooser_display_new (hostname,
6b1540
                                                          displaynum,
6b1540
                                                          address,
6b1540
                                                          get_next_session_serial (factory));
6b1540
                 g_signal_connect (display, "hostname-selected", G_CALLBACK (on_hostname_selected), factory);
6b1540
         } else {
6b1540
                 display = gdm_xdmcp_display_new (hostname,
6b1540
                                                  displaynum,
6b1540
                                                  address,
6b1540
                                                  get_next_session_serial (factory));
6b1540
         }
6b1540
 
6b1540
         if (display == NULL) {
6b1540
                 goto out;
6b1540
         }
6b1540
 
6b1540
+        g_object_set (G_OBJECT (display),
6b1540
+                      "session-type", session_types[0],
6b1540
+                      "supported-session-types", session_types,
6b1540
+                      NULL);
6b1540
+
6b1540
         if (! gdm_display_prepare (display)) {
6b1540
                 gdm_display_unmanage (display);
6b1540
                 g_object_unref (display);
6b1540
                 display = NULL;
6b1540
                 goto out;
6b1540
         }
6b1540
 
6b1540
         g_signal_connect_after (display,
6b1540
                                 "notify::status",
6b1540
                                 G_CALLBACK (on_display_status_changed),
6b1540
                                 factory);
6b1540
 
6b1540
         store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
6b1540
         gdm_display_store_add (store, display);
6b1540
 
6b1540
         factory->num_pending_sessions++;
6b1540
  out:
6b1540
 
6b1540
         return display;
6b1540
 }
6b1540
 
6b1540
 static void
6b1540
 gdm_xdmcp_send_accept (GdmXdmcpDisplayFactory *factory,
6b1540
                        GdmAddress             *address,
6b1540
                        CARD32                  session_id,
6b1540
                        ARRAY8Ptr               authentication_name,
6b1540
                        ARRAY8Ptr               authentication_data,
6b1540
                        ARRAY8Ptr               authorization_name,
6b1540
                        ARRAY8Ptr               authorization_data)
6b1540
 {
6b1540
-- 
6b1540
2.34.1
6b1540