diff options
author | Ray Strode <rstrode@redhat.com> | 2020-11-12 16:44:38 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2020-11-12 16:44:38 -0500 |
commit | c37740ba72bbe4be5304cef3306b8a3eb4976ec3 (patch) | |
tree | 96c07fb060413db64d1ec1afce5682df3d1ceb46 /libgdm/gdm-client.c | |
parent | 2593ee760b5eb78590d8f8956635ec12b8b250bd (diff) | |
download | gdm-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/gdm-client.c')
-rw-r--r-- | libgdm/gdm-client.c | 21 |
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); |