[gdm/wip/more-gdm-client-fixes: 3/3] libgdm: Track reauth user verifier too




commit c37740ba72bbe4be5304cef3306b8a3eb4976ec3
Author: Ray Strode <rstrode redhat com>
Date:   Thu Nov 12 16:44:38 2020 -0500

    libgdm: Track reauth user verifier too
    
    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.

 libgdm/gdm-client.c | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)
---
diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c
index 60808e02e..fb58f1a4c 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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]