|
|
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 |
|