summaryrefslogtreecommitdiff
path: root/libgdm
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2020-11-12 16:44:38 -0500
committerRay Strode <rstrode@redhat.com>2020-11-12 16:44:38 -0500
commitc37740ba72bbe4be5304cef3306b8a3eb4976ec3 (patch)
tree96c07fb060413db64d1ec1afce5682df3d1ceb46 /libgdm
parent2593ee760b5eb78590d8f8956635ec12b8b250bd (diff)
downloadgdm-c37740ba72bbe4be5304cef3306b8a3eb4976ec3.tar.gz
libgdm: Track reauth user verifier toowip/more-gdm-client-fixes
The unlock screen may have user verifier extensions too, so we need to track the reauth user verifier, too. This API is clearly less than optimal, but fixing it is a task for another day.
Diffstat (limited to 'libgdm')
-rw-r--r--libgdm/gdm-client.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c
index 60808e02..fb58f1a4 100644
--- a/libgdm/gdm-client.c
+++ b/libgdm/gdm-client.c
@@ -41,6 +41,7 @@ struct _GdmClient
GObject parent;
GdmUserVerifier *user_verifier;
+ GdmUserVerifier *user_verifier_for_reauth;
GHashTable *user_verifier_extensions;
GdmGreeter *greeter;
@@ -569,6 +570,8 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client,
cancellable,
error);
+ g_set_weak_pointer (&client->user_verifier_for_reauth, user_verifier);
+
return user_verifier;
}
@@ -628,9 +631,15 @@ gdm_client_open_reauthentication_channel_finish (GdmClient *client,
GAsyncResult *result,
GError **error)
{
+ GdmUserVerifier *user_verifier;
+
g_return_val_if_fail (GDM_IS_CLIENT (client), NULL);
- return g_task_propagate_pointer (G_TASK (result), error);
+ user_verifier = g_task_propagate_pointer (G_TASK (result), error);
+
+ g_set_weak_pointer (&client->user_verifier_for_reauth, user_verifier);
+
+ return user_verifier;
}
/**
@@ -825,9 +834,14 @@ gdm_client_get_user_verifier_finish (GdmClient *client,
GdmUserVerifierChoiceList *
gdm_client_get_user_verifier_choice_list (GdmClient *client)
{
- GHashTable *user_verifier_extensions;
+ GHashTable *user_verifier_extensions = NULL;
+
+ if (client->user_verifier_for_reauth != NULL)
+ user_verifier_extensions = g_object_get_data (G_OBJECT (client->user_verifier_for_reauth), "gdm-client-user-verifier-extensions");
+
+ if (user_verifier_extensions == NULL && client->user_verifier != NULL)
+ user_verifier_extensions = g_object_get_data (G_OBJECT (client->user_verifier), "gdm-client-user-verifier-extensions");
- user_verifier_extensions = g_object_get_data (G_OBJECT (client->user_verifier), "gdm-client-user-verifier-extensions");
if (user_verifier_extensions == NULL)
return NULL;
@@ -1369,6 +1383,7 @@ gdm_client_finalize (GObject *object)
g_return_if_fail (client != NULL);
g_clear_weak_pointer (&client->user_verifier);
+ g_clear_weak_pointer (&client->user_verifier_for_reauth);
g_clear_weak_pointer (&client->greeter);
g_clear_weak_pointer (&client->remote_greeter);
g_clear_weak_pointer (&client->chooser);