|
|
ca70cf |
From 18770aa5b3644abac1879d4eb754351e24072bc2 Mon Sep 17 00:00:00 2001
|
|
|
ca70cf |
From: Ray Strode <rstrode@redhat.com>
|
|
|
ca70cf |
Date: Mon, 14 May 2018 15:49:50 -0400
|
|
|
ca70cf |
Subject: [PATCH] libgdm: fix pointer/boolean task confusion
|
|
|
ca70cf |
|
|
|
ca70cf |
The manager fetching code in GdmClient treats its task
|
|
|
ca70cf |
return value as boolean, but it's actually a pointer (the manager)
|
|
|
ca70cf |
|
|
|
ca70cf |
This commit corrects the confusion.
|
|
|
ca70cf |
|
|
|
ca70cf |
https://bugzilla.gnome.org/show_bug.cgi?id=795940
|
|
|
ca70cf |
---
|
|
|
ca70cf |
libgdm/gdm-client.c | 8 ++++++--
|
|
|
ca70cf |
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
|
ca70cf |
|
|
|
ca70cf |
diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c
|
|
|
ca70cf |
index 294f4f4d0..58ede0aab 100644
|
|
|
ca70cf |
--- a/libgdm/gdm-client.c
|
|
|
ca70cf |
+++ b/libgdm/gdm-client.c
|
|
|
ca70cf |
@@ -364,65 +364,67 @@ on_reauthentication_channel_opened (GdmManager *manager,
|
|
|
ca70cf |
GCancellable *cancellable;
|
|
|
ca70cf |
char *address;
|
|
|
ca70cf |
GError *error;
|
|
|
ca70cf |
|
|
|
ca70cf |
error = NULL;
|
|
|
ca70cf |
if (!gdm_manager_call_open_reauthentication_channel_finish (manager,
|
|
|
ca70cf |
&address,
|
|
|
ca70cf |
result,
|
|
|
ca70cf |
&error)) {
|
|
|
ca70cf |
g_task_return_error (task, error);
|
|
|
ca70cf |
g_object_unref (task);
|
|
|
ca70cf |
return;
|
|
|
ca70cf |
}
|
|
|
ca70cf |
|
|
|
ca70cf |
cancellable = g_task_get_cancellable (task);
|
|
|
ca70cf |
g_dbus_connection_new_for_address (address,
|
|
|
ca70cf |
G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
|
|
|
ca70cf |
NULL,
|
|
|
ca70cf |
cancellable,
|
|
|
ca70cf |
(GAsyncReadyCallback)
|
|
|
ca70cf |
on_reauthentication_channel_connected,
|
|
|
ca70cf |
task);
|
|
|
ca70cf |
}
|
|
|
ca70cf |
|
|
|
ca70cf |
static void
|
|
|
ca70cf |
on_got_manager_for_reauthentication (GdmClient *client,
|
|
|
ca70cf |
GAsyncResult *result,
|
|
|
ca70cf |
GTask *task)
|
|
|
ca70cf |
{
|
|
|
ca70cf |
GCancellable *cancellable;
|
|
|
ca70cf |
+ GdmManager *manager;
|
|
|
ca70cf |
char *username;
|
|
|
ca70cf |
GError *error;
|
|
|
ca70cf |
|
|
|
ca70cf |
error = NULL;
|
|
|
ca70cf |
- if (!g_task_propagate_boolean (G_TASK (result), &error)) {
|
|
|
ca70cf |
+ manager = g_task_propagate_pointer (G_TASK (result), &error);
|
|
|
ca70cf |
+ if (manager == NULL) {
|
|
|
ca70cf |
g_task_return_error (task, error);
|
|
|
ca70cf |
g_object_unref (task);
|
|
|
ca70cf |
return;
|
|
|
ca70cf |
}
|
|
|
ca70cf |
|
|
|
ca70cf |
cancellable = g_task_get_cancellable (task);
|
|
|
ca70cf |
username = g_object_get_data (G_OBJECT (task), "username");
|
|
|
ca70cf |
gdm_manager_call_open_reauthentication_channel (client->priv->manager,
|
|
|
ca70cf |
username,
|
|
|
ca70cf |
cancellable,
|
|
|
ca70cf |
(GAsyncReadyCallback)
|
|
|
ca70cf |
on_reauthentication_channel_opened,
|
|
|
ca70cf |
task);
|
|
|
ca70cf |
|
|
|
ca70cf |
}
|
|
|
ca70cf |
|
|
|
ca70cf |
static gboolean
|
|
|
ca70cf |
gdm_client_open_connection_sync (GdmClient *client,
|
|
|
ca70cf |
GCancellable *cancellable,
|
|
|
ca70cf |
GError **error)
|
|
|
ca70cf |
{
|
|
|
ca70cf |
gboolean ret;
|
|
|
ca70cf |
|
|
|
ca70cf |
g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE);
|
|
|
ca70cf |
|
|
|
ca70cf |
if (client->priv->manager == NULL) {
|
|
|
ca70cf |
client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
|
|
|
ca70cf |
G_DBUS_PROXY_FLAGS_NONE,
|
|
|
ca70cf |
"org.gnome.DisplayManager",
|
|
|
ca70cf |
"/org/gnome/DisplayManager/Manager",
|
|
|
ca70cf |
@@ -507,64 +509,66 @@ on_session_opened (GdmManager *manager,
|
|
|
ca70cf |
client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task)));
|
|
|
ca70cf |
|
|
|
ca70cf |
error = NULL;
|
|
|
ca70cf |
if (!gdm_manager_call_open_session_finish (manager,
|
|
|
ca70cf |
&client->priv->address,
|
|
|
ca70cf |
result,
|
|
|
ca70cf |
&error)) {
|
|
|
ca70cf |
g_task_return_error (task, error);
|
|
|
ca70cf |
g_object_unref (task);
|
|
|
ca70cf |
g_object_unref (client);
|
|
|
ca70cf |
return;
|
|
|
ca70cf |
}
|
|
|
ca70cf |
|
|
|
ca70cf |
cancellable = g_task_get_cancellable (task);
|
|
|
ca70cf |
g_dbus_connection_new_for_address (client->priv->address,
|
|
|
ca70cf |
G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
|
|
|
ca70cf |
NULL,
|
|
|
ca70cf |
cancellable,
|
|
|
ca70cf |
(GAsyncReadyCallback)
|
|
|
ca70cf |
on_connected,
|
|
|
ca70cf |
task);
|
|
|
ca70cf |
g_object_unref (client);
|
|
|
ca70cf |
}
|
|
|
ca70cf |
|
|
|
ca70cf |
static void
|
|
|
ca70cf |
on_got_manager_for_opening_connection (GdmClient *client,
|
|
|
ca70cf |
GAsyncResult *result,
|
|
|
ca70cf |
GTask *task)
|
|
|
ca70cf |
{
|
|
|
ca70cf |
GCancellable *cancellable;
|
|
|
ca70cf |
+ GdmManager *manager;
|
|
|
ca70cf |
GError *error;
|
|
|
ca70cf |
|
|
|
ca70cf |
error = NULL;
|
|
|
ca70cf |
- if (!g_task_propagate_boolean (G_TASK (result), &error)) {
|
|
|
ca70cf |
+ manager = g_task_propagate_pointer (G_TASK (result), &error);
|
|
|
ca70cf |
+ if (manager == NULL) {
|
|
|
ca70cf |
g_task_return_error (task, error);
|
|
|
ca70cf |
g_object_unref (task);
|
|
|
ca70cf |
return;
|
|
|
ca70cf |
}
|
|
|
ca70cf |
|
|
|
ca70cf |
cancellable = g_task_get_cancellable (task);
|
|
|
ca70cf |
gdm_manager_call_open_session (client->priv->manager,
|
|
|
ca70cf |
cancellable,
|
|
|
ca70cf |
(GAsyncReadyCallback)
|
|
|
ca70cf |
on_session_opened,
|
|
|
ca70cf |
task);
|
|
|
ca70cf |
}
|
|
|
ca70cf |
|
|
|
ca70cf |
static void
|
|
|
ca70cf |
finish_pending_opens (GdmClient *client,
|
|
|
ca70cf |
GError *error)
|
|
|
ca70cf |
{
|
|
|
ca70cf |
GList *node;
|
|
|
ca70cf |
|
|
|
ca70cf |
for (node = client->priv->pending_opens;
|
|
|
ca70cf |
node != NULL;
|
|
|
ca70cf |
node = node->next) {
|
|
|
ca70cf |
|
|
|
ca70cf |
GTask *task = node->data;
|
|
|
ca70cf |
|
|
|
ca70cf |
g_task_return_error (task, error);
|
|
|
ca70cf |
g_object_unref (task);
|
|
|
ca70cf |
}
|
|
|
ca70cf |
g_clear_pointer (&client->priv->pending_opens,
|
|
|
ca70cf |
(GDestroyNotify) g_list_free);
|
|
|
ca70cf |
--
|
|
|
ca70cf |
2.20.1
|
|
|
ca70cf |
|