Keep register display method
Fixes abidiff error from last commit where GDM manager doesn't have RegisterDisplay method. Keeps ABI compatibility. Related: https://issues.redhat.com/browse/RHEL-86140
This commit is contained in:
parent
be9e87f983
commit
d3830ea866
134
0001-manager-Keep-register-display-method.patch
Normal file
134
0001-manager-Keep-register-display-method.patch
Normal file
@ -0,0 +1,134 @@
|
||||
From 361a0a7d069e7c2bb83f9df8a57fb888ec7826ea Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Thu, 8 Jan 2026 01:00:00 +0100
|
||||
Subject: [PATCH] manager: Keep register display method
|
||||
|
||||
The use of register session combines the old register display and register
|
||||
session methods. This is the new behaviour.
|
||||
|
||||
To keep ABI compatibility, keep the register display method, which
|
||||
internally calls register session.
|
||||
|
||||
---
|
||||
daemon/gdm-manager.c | 51 +++++++++++++++++++++++++++++++++++++-----
|
||||
daemon/gdm-manager.xml | 3 +++
|
||||
2 files changed, 48 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
|
||||
index ff04203..be6daea 100644
|
||||
--- a/daemon/gdm-manager.c
|
||||
+++ b/daemon/gdm-manager.c
|
||||
@@ -731,6 +731,16 @@ find_user_session_for_display (GdmManager *self,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+display_is_managed_and_registered (GdmDisplay *display)
|
||||
+{
|
||||
+ gboolean session_registered = FALSE;
|
||||
+
|
||||
+ g_object_get (display, "session-registered", &session_registered, NULL);
|
||||
+
|
||||
+ return gdm_display_get_status (display) == GDM_DISPLAY_MANAGED && session_registered;
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
gdm_manager_handle_register_session (GdmDBusManager *manager,
|
||||
GDBusMethodInvocation *invocation,
|
||||
@@ -738,6 +748,7 @@ gdm_manager_handle_register_session (GdmDBusManager *manager,
|
||||
{
|
||||
GdmManager *self = GDM_MANAGER (manager);
|
||||
const char *sender;
|
||||
+ const char *method_name;
|
||||
GDBusConnection *connection;
|
||||
GdmDisplay *display = NULL;
|
||||
GdmSession *session;
|
||||
@@ -746,9 +757,13 @@ gdm_manager_handle_register_session (GdmDBusManager *manager,
|
||||
char *value = NULL;
|
||||
g_autofree char *x11_display_name = NULL;
|
||||
g_autofree char *tty = NULL;
|
||||
+ gboolean is_register_display;
|
||||
|
||||
sender = g_dbus_method_invocation_get_sender (invocation);
|
||||
connection = g_dbus_method_invocation_get_connection (invocation);
|
||||
+ method_name = g_dbus_method_invocation_get_method_name (invocation);
|
||||
+ is_register_display = g_strcmp0 (method_name, "RegisterDisplay") == 0;
|
||||
+
|
||||
get_display_and_details_for_bus_sender (self, connection, sender, &display, NULL, NULL, &tty, NULL, NULL, NULL, NULL);
|
||||
|
||||
g_debug ("GdmManager: trying to register new session on display %p", display);
|
||||
@@ -762,11 +777,32 @@ gdm_manager_handle_register_session (GdmDBusManager *manager,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+ if (display_is_managed_and_registered (display)) {
|
||||
+ g_debug ("GdmManager: display already managed and session-registered");
|
||||
+ if (is_register_display)
|
||||
+ gdm_dbus_manager_complete_register_display (GDM_DBUS_MANAGER (manager), invocation);
|
||||
+ else
|
||||
+ gdm_dbus_manager_complete_register_session (GDM_DBUS_MANAGER (manager), invocation);
|
||||
+
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
g_variant_iter_init (&iter, details);
|
||||
- while (g_variant_iter_loop (&iter, "{&s&s}", &key, &value)) {
|
||||
- if (g_strcmp0 (key, "x11-display-name") == 0) {
|
||||
- x11_display_name = g_strdup (value);
|
||||
- break;
|
||||
+ if (is_register_display) {
|
||||
+ while (g_variant_iter_loop (&iter, "{&s&s}", &key, &value)) {
|
||||
+ if (g_strcmp0 (key, "x11-display-name") == 0) {
|
||||
+ x11_display_name = g_strdup (value);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ GVariant *variant_value = NULL;
|
||||
+ while (g_variant_iter_loop (&iter, "{&sv}", &key, &variant_value)) {
|
||||
+ if (g_strcmp0 (key, "x11-display-name") == 0 &&
|
||||
+ g_variant_is_of_type (variant_value, G_VARIANT_TYPE_STRING)) {
|
||||
+ x11_display_name = g_variant_dup_string (variant_value, NULL);
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -797,8 +833,10 @@ gdm_manager_handle_register_session (GdmDBusManager *manager,
|
||||
"session-registered", TRUE,
|
||||
NULL);
|
||||
|
||||
- gdm_dbus_manager_complete_register_session (GDM_DBUS_MANAGER (manager),
|
||||
- invocation);
|
||||
+ if (is_register_display)
|
||||
+ gdm_dbus_manager_complete_register_display (GDM_DBUS_MANAGER (manager), invocation);
|
||||
+ else
|
||||
+ gdm_dbus_manager_complete_register_session (GDM_DBUS_MANAGER (manager), invocation);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1214,6 +1252,7 @@ gdm_manager_handle_open_reauthentication_channel (GdmDBusManager *manager
|
||||
static void
|
||||
manager_interface_init (GdmDBusManagerIface *interface)
|
||||
{
|
||||
+ interface->handle_register_display = gdm_manager_handle_register_session;
|
||||
interface->handle_register_session = gdm_manager_handle_register_session;
|
||||
interface->handle_open_session = gdm_manager_handle_open_session;
|
||||
interface->handle_open_reauthentication_channel = gdm_manager_handle_open_reauthentication_channel;
|
||||
diff --git a/daemon/gdm-manager.xml b/daemon/gdm-manager.xml
|
||||
index aba079a..92ef1d0 100644
|
||||
--- a/daemon/gdm-manager.xml
|
||||
+++ b/daemon/gdm-manager.xml
|
||||
@@ -1,6 +1,9 @@
|
||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
<node name="/org/gnome/DisplayManager/Manager">
|
||||
<interface name="org.gnome.DisplayManager.Manager">
|
||||
+ <method name="RegisterDisplay">
|
||||
+ <arg name="details" direction="in" type="a{ss}"/>
|
||||
+ </method>
|
||||
<method name="RegisterSession">
|
||||
<arg name="details" direction="in" type="a{sv}"/>
|
||||
</method>
|
||||
--
|
||||
2.51.1
|
||||
|
||||
1
gdm.spec
1
gdm.spec
@ -48,6 +48,7 @@ Patch: 0001-Introduce-gdm-new-session-tool.patch
|
||||
# RHEL-86140
|
||||
# https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/285
|
||||
Patch: 0001-Revert-hack-that-quits-plymouth-late.patch
|
||||
Patch: 0001-manager-Keep-register-display-method.patch
|
||||
|
||||
# RHEL-4147
|
||||
# https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/335
|
||||
|
||||
Loading…
Reference in New Issue
Block a user