diff --git a/SOURCES/0001-libgdm-fix-pointer-boolean-task-confusion.patch b/SOURCES/0001-libgdm-fix-pointer-boolean-task-confusion.patch new file mode 100644 index 0000000..084e2ae --- /dev/null +++ b/SOURCES/0001-libgdm-fix-pointer-boolean-task-confusion.patch @@ -0,0 +1,159 @@ +From 18770aa5b3644abac1879d4eb754351e24072bc2 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 14 May 2018 15:49:50 -0400 +Subject: [PATCH] libgdm: fix pointer/boolean task confusion + +The manager fetching code in GdmClient treats its task +return value as boolean, but it's actually a pointer (the manager) + +This commit corrects the confusion. + +https://bugzilla.gnome.org/show_bug.cgi?id=795940 +--- + libgdm/gdm-client.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c +index 294f4f4d0..58ede0aab 100644 +--- a/libgdm/gdm-client.c ++++ b/libgdm/gdm-client.c +@@ -364,65 +364,67 @@ on_reauthentication_channel_opened (GdmManager *manager, + GCancellable *cancellable; + char *address; + GError *error; + + error = NULL; + if (!gdm_manager_call_open_reauthentication_channel_finish (manager, + &address, + result, + &error)) { + g_task_return_error (task, error); + g_object_unref (task); + return; + } + + cancellable = g_task_get_cancellable (task); + g_dbus_connection_new_for_address (address, + G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, + NULL, + cancellable, + (GAsyncReadyCallback) + on_reauthentication_channel_connected, + task); + } + + static void + on_got_manager_for_reauthentication (GdmClient *client, + GAsyncResult *result, + GTask *task) + { + GCancellable *cancellable; ++ GdmManager *manager; + char *username; + GError *error; + + error = NULL; +- if (!g_task_propagate_boolean (G_TASK (result), &error)) { ++ manager = g_task_propagate_pointer (G_TASK (result), &error); ++ if (manager == NULL) { + g_task_return_error (task, error); + g_object_unref (task); + return; + } + + cancellable = g_task_get_cancellable (task); + username = g_object_get_data (G_OBJECT (task), "username"); + gdm_manager_call_open_reauthentication_channel (client->priv->manager, + username, + cancellable, + (GAsyncReadyCallback) + on_reauthentication_channel_opened, + task); + + } + + static gboolean + gdm_client_open_connection_sync (GdmClient *client, + GCancellable *cancellable, + GError **error) + { + gboolean ret; + + g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + + if (client->priv->manager == NULL) { + client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + "org.gnome.DisplayManager", + "/org/gnome/DisplayManager/Manager", +@@ -507,64 +509,66 @@ on_session_opened (GdmManager *manager, + client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task))); + + error = NULL; + if (!gdm_manager_call_open_session_finish (manager, + &client->priv->address, + result, + &error)) { + g_task_return_error (task, error); + g_object_unref (task); + g_object_unref (client); + return; + } + + cancellable = g_task_get_cancellable (task); + g_dbus_connection_new_for_address (client->priv->address, + G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, + NULL, + cancellable, + (GAsyncReadyCallback) + on_connected, + task); + g_object_unref (client); + } + + static void + on_got_manager_for_opening_connection (GdmClient *client, + GAsyncResult *result, + GTask *task) + { + GCancellable *cancellable; ++ GdmManager *manager; + GError *error; + + error = NULL; +- if (!g_task_propagate_boolean (G_TASK (result), &error)) { ++ manager = g_task_propagate_pointer (G_TASK (result), &error); ++ if (manager == NULL) { + g_task_return_error (task, error); + g_object_unref (task); + return; + } + + cancellable = g_task_get_cancellable (task); + gdm_manager_call_open_session (client->priv->manager, + cancellable, + (GAsyncReadyCallback) + on_session_opened, + task); + } + + static void + finish_pending_opens (GdmClient *client, + GError *error) + { + GList *node; + + for (node = client->priv->pending_opens; + node != NULL; + node = node->next) { + + GTask *task = node->data; + + g_task_return_error (task, error); + g_object_unref (task); + } + g_clear_pointer (&client->priv->pending_opens, + (GDestroyNotify) g_list_free); +-- +2.20.1 + diff --git a/SPECS/gdm.spec b/SPECS/gdm.spec index 1a103d2..ea02213 100644 --- a/SPECS/gdm.spec +++ b/SPECS/gdm.spec @@ -10,7 +10,7 @@ Name: gdm Epoch: 1 Version: 3.28.2 -Release: 12%{?dist}.2 +Release: 16%{?dist} Summary: The GNOME Display Manager License: GPLv2+ @@ -24,6 +24,8 @@ Patch0: 0001-Honor-initial-setup-being-disabled-by-distro-install.patch Patch10001: 0001-Revert-session-forward-is-initial-from-display-to-wo.patch Patch20001: 0001-worker-add-compat-patch-to-make-new-worker-work-with.patch +Patch30001: 0001-libgdm-fix-pointer-boolean-task-confusion.patch + # breaks upgrades Patch40001: 0001-Revert-data-Add-gnome-login.session.patch # we don't have new enough dbus for this and don't need it with our old dbus @@ -112,7 +114,7 @@ Requires: system-logos Requires: xorg-x11-server-utils Requires: xorg-x11-xinit -Conflicts: xorg-x11-server-Xorg < 1.20.1-5.4 +Conflicts: xorg-x11-server-Xorg < 1.20.4-6 Obsoletes: gdm-libs < 1:3.12.0-3 Provides: gdm-libs%{?_isa} = %{epoch}:%{version}-%{release} @@ -208,6 +210,8 @@ mkdir -p %{buildroot}%{_datadir}/gdm/autostart/LoginWindow mkdir -p %{buildroot}/run/gdm +mkdir -p %{buildroot}%{_sysconfdir}/dconf/db/gdm.d/locks + find %{buildroot} -name '*.a' -delete find %{buildroot} -name '*.la' -delete @@ -344,6 +348,8 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || : %attr(1770, gdm, gdm) %dir %{_localstatedir}/lib/gdm %attr(0711, root, gdm) %dir /run/gdm %attr(1755, root, gdm) %dir %{_localstatedir}/cache/gdm +%dir %{_sysconfdir}/dconf/db/gdm.d/locks +%dir %{_sysconfdir}/dconf/db/gdm.d %{_datadir}/icons/hicolor/*/*/*.png %config %{_sysconfdir}/pam.d/gdm-pin %config %{_sysconfdir}/pam.d/gdm-smartcard @@ -365,18 +371,28 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || : %{_libdir}/pkgconfig/gdm-pam-extensions.pc %changelog -* Wed Jun 12 2019 Ray Strode - 3.28.2-12.2 +* Wed May 22 2019 Ray Strode - 3.28.2-16 - Don't bring up login screen if background session gets killed - Related: #1719361 + Related: #1680120 -* Thu Mar 28 2019 Ray Strode - 3.28.2-12.1 +* Wed Apr 03 2019 Ray Strode - 3.28.2-15 +- sync AllowMultipleSessionsPerUser patch from 7.6 branch + Resolves: #1664353 +- Create dconf dirs by default + Resolves: #1664284 + +* Thu Mar 28 2019 Ray Strode - 3.28.2-14 - Fix unlock on XDMCP sessions - Resolves: #1693967 + Resolves: #1693060 + +* Fri Mar 01 2019 Ray Strode - 3.28.2-13 +- Fix login on s390 + Resolves: #1680060 -* Thu Dec 20 2018 Ray Strode 3.28.2-12 -- Allow multiple simultaneous XDMCP logins for a user if - xdmcp/AllowMultipleSessionsPerUser=true - Resolves: #1679914 +* Thu Feb 21 2019 Ray Strode - 3.28.2-12 +- Add option to allow the same user to log in via XDMCP more + than once. + Resolves: #1664353 * Mon Dec 03 2018 Ray Strode - 3.28.2-11 - Don't assume X server defaults to local only