db6b665
From e7998b4d5547d65d88c56d428a65c9fb3bbeadb0 Mon Sep 17 00:00:00 2001
db6b665
From: Ray Strode <rstrode@redhat.com>
db6b665
Date: Wed, 28 Apr 2021 10:36:46 -0400
db6b665
Subject: [PATCH 1/5] authPrompt: Don't clear querying service unless querying
db6b665
 service fails
db6b665
db6b665
At the moment we treat a failure in any service as a signal to stop
db6b665
tracking users responses to service questions.
db6b665
db6b665
This commit makes sure we don't stop waiting for answers if a background
db6b665
service fails.
db6b665
---
db6b665
 js/gdm/authPrompt.js | 7 +++++--
db6b665
 1 file changed, 5 insertions(+), 2 deletions(-)
db6b665
db6b665
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
db6b665
index d2c9a16594..c182d74318 100644
db6b665
--- a/js/gdm/authPrompt.js
db6b665
+++ b/js/gdm/authPrompt.js
db6b665
@@ -280,8 +280,11 @@ var AuthPrompt = GObject.registerClass({
db6b665
 
db6b665
     _onVerificationFailed(userVerifier, serviceName, canRetry) {
db6b665
         const wasQueryingService = this._queryingService === serviceName;
db6b665
-        this._queryingService = null;
db6b665
-        this.clear();
db6b665
+
db6b665
+        if (wasQueryingService) {
db6b665
+            this._queryingService = null;
db6b665
+            this.clear();
db6b665
+        }
db6b665
 
db6b665
         this.updateSensitivity(canRetry);
db6b665
         this.setActorInDefaultButtonWell(null);
db6b665
-- 
db6b665
GitLab
db6b665
db6b665
db6b665
From ca290737ab3ecb028f03c9189dac6131e2dcf3bc Mon Sep 17 00:00:00 2001
db6b665
From: Ray Strode <rstrode@redhat.com>
db6b665
Date: Wed, 28 Apr 2021 10:38:58 -0400
db6b665
Subject: [PATCH 2/5] authPrompt: Don't fail auth prompt until user is out of
db6b665
 retries
db6b665
db6b665
At the moment we set the state of the auth prompt to failed any
db6b665
time the user fails an attempt. But verification is still going
db6b665
on until the user exhausts all attempts, so that's wrong.
db6b665
db6b665
This commit changes it to only set the state to failed when the
db6b665
user is out of tries.
db6b665
---
db6b665
 js/gdm/authPrompt.js | 4 +++-
db6b665
 1 file changed, 3 insertions(+), 1 deletion(-)
db6b665
db6b665
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
db6b665
index c182d74318..d111cadd1b 100644
db6b665
--- a/js/gdm/authPrompt.js
db6b665
+++ b/js/gdm/authPrompt.js
db6b665
@@ -288,7 +288,9 @@ var AuthPrompt = GObject.registerClass({
db6b665
 
db6b665
         this.updateSensitivity(canRetry);
db6b665
         this.setActorInDefaultButtonWell(null);
db6b665
-        this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
db6b665
+
db6b665
+        if (!canRetry)
db6b665
+            this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
db6b665
 
db6b665
         if (wasQueryingService)
db6b665
             Util.wiggle(this._entry);
db6b665
-- 
db6b665
GitLab
db6b665
db6b665
db6b665
From 36ccf63b7a219b7e0eb11158f39c8823a25eb058 Mon Sep 17 00:00:00 2001
db6b665
From: Ray Strode <rstrode@redhat.com>
db6b665
Date: Wed, 28 Apr 2021 10:42:14 -0400
db6b665
Subject: [PATCH 3/5] gdm: Flip canRetry boolean to doneTrying on verification
db6b665
 failure
db6b665
db6b665
This commit just flips a boolean in the verification failed handler
db6b665
to make things easier to read.
db6b665
---
db6b665
 js/gdm/util.js | 33 +++++++++++++++++----------------
db6b665
 1 file changed, 17 insertions(+), 16 deletions(-)
db6b665
db6b665
diff --git a/js/gdm/util.js b/js/gdm/util.js
db6b665
index 1ee84acde2..bb120a81c2 100644
db6b665
--- a/js/gdm/util.js
db6b665
+++ b/js/gdm/util.js
db6b665
@@ -685,29 +685,19 @@ var ShellUserVerifier = class {
db6b665
             (this._reauthOnly || this._failCounter < this.allowedFailures);
db6b665
     }
db6b665
 
db6b665
-    _verificationFailed(serviceName, retry) {
db6b665
+    _verificationFailed(serviceName, shouldRetry) {
db6b665
         // For Not Listed / enterprise logins, immediately reset
db6b665
         // the dialog
db6b665
         // Otherwise, when in login mode we allow ALLOWED_FAILURES attempts.
db6b665
         // After that, we go back to the welcome screen.
db6b665
 
db6b665
-        const canRetry = retry && this._canRetry();
db6b665
-
db6b665
         this._disconnectSignals();
db6b665
+
db6b665
         this._filterServiceMessages(serviceName, MessageType.ERROR);
db6b665
 
db6b665
-        if (canRetry) {
db6b665
-            if (!this.hasPendingMessages) {
db6b665
-                this._retry(serviceName);
db6b665
-            } else {
db6b665
-                const cancellable = this._cancellable;
db6b665
-                let signalId = this.connect('no-more-messages', () => {
db6b665
-                    this.disconnect(signalId);
db6b665
-                    if (!cancellable.is_cancelled())
db6b665
-                        this._retry(serviceName);
db6b665
-                });
db6b665
-            }
db6b665
-        } else {
db6b665
+        const doneTrying = !shouldRetry || !this._canRetry();
db6b665
+
db6b665
+        if (doneTrying) {
db6b665
             // eslint-disable-next-line no-lonely-if
db6b665
             if (!this.hasPendingMessages) {
db6b665
                 this._cancelAndReset();
db6b665
@@ -721,7 +711,18 @@ var ShellUserVerifier = class {
db6b665
             }
db6b665
         }
db6b665
 
db6b665
-        this.emit('verification-failed', serviceName, canRetry);
db6b665
+        this.emit('verification-failed', serviceName, !doneTrying);
db6b665
+
db6b665
+        if (!this.hasPendingMessages) {
db6b665
+            this._retry(serviceName);
db6b665
+        } else {
db6b665
+            const cancellable = this._cancellable;
db6b665
+            let signalId = this.connect('no-more-messages', () => {
db6b665
+                this.disconnect(signalId);
db6b665
+                if (!cancellable.is_cancelled())
db6b665
+                    this._retry(serviceName);
db6b665
+            });
db6b665
+        }
db6b665
     }
db6b665
 
db6b665
     _onServiceUnavailable(_client, serviceName, errorMessage) {
db6b665
-- 
db6b665
GitLab
db6b665
db6b665
db6b665
From de06a365e968691a4c2b39de8d5903a92f3663ec Mon Sep 17 00:00:00 2001
db6b665
From: Ray Strode <rstrode@redhat.com>
db6b665
Date: Wed, 28 Apr 2021 10:44:56 -0400
db6b665
Subject: [PATCH 4/5] gdm: Only disconect verification signals when not going
db6b665
 to retry
db6b665
db6b665
At the moment a failure in a background service can lead to the
db6b665
various verification signals getting disconnected, even though
db6b665
we still need them for a foreground service.
db6b665
db6b665
This commit changes the code to only disconnect when we've run
db6b665
out of tries.
db6b665
---
db6b665
 js/gdm/util.js | 4 ++--
db6b665
 1 file changed, 2 insertions(+), 2 deletions(-)
db6b665
db6b665
diff --git a/js/gdm/util.js b/js/gdm/util.js
db6b665
index bb120a81c2..bdc14b7519 100644
db6b665
--- a/js/gdm/util.js
db6b665
+++ b/js/gdm/util.js
db6b665
@@ -691,13 +691,13 @@ var ShellUserVerifier = class {
db6b665
         // Otherwise, when in login mode we allow ALLOWED_FAILURES attempts.
db6b665
         // After that, we go back to the welcome screen.
db6b665
 
db6b665
-        this._disconnectSignals();
db6b665
-
db6b665
         this._filterServiceMessages(serviceName, MessageType.ERROR);
db6b665
 
db6b665
         const doneTrying = !shouldRetry || !this._canRetry();
db6b665
 
db6b665
         if (doneTrying) {
db6b665
+            this._disconnectSignals();
db6b665
+
db6b665
             // eslint-disable-next-line no-lonely-if
db6b665
             if (!this.hasPendingMessages) {
db6b665
                 this._cancelAndReset();
db6b665
-- 
db6b665
GitLab
db6b665
db6b665
db6b665
From 70f1e4a0d41956a5e91c31bea4d0060c9eb0bf45 Mon Sep 17 00:00:00 2001
db6b665
From: Benjamin Berg <bberg@redhat.com>
db6b665
Date: Wed, 28 Apr 2021 18:32:22 +0200
db6b665
Subject: [PATCH 5/5] gdm: Remove pending fingerprint verification failure
db6b665
db6b665
It can happen that we get a problem report and a verification failure at
db6b665
the same time. For fingerprint, a problem report can result in an
db6b665
internal verification failure to be queued.
db6b665
db6b665
Remove this queued failure again if we got a failure already from GDM
db6b665
directly.
db6b665
---
db6b665
 js/gdm/util.js | 5 +++++
db6b665
 1 file changed, 5 insertions(+)
db6b665
db6b665
diff --git a/js/gdm/util.js b/js/gdm/util.js
db6b665
index bdc14b7519..b02cd4d734 100644
db6b665
--- a/js/gdm/util.js
db6b665
+++ b/js/gdm/util.js
db6b665
@@ -686,6 +686,11 @@ var ShellUserVerifier = class {
db6b665
     }
db6b665
 
db6b665
     _verificationFailed(serviceName, shouldRetry) {
db6b665
+        if (serviceName === FINGERPRINT_SERVICE_NAME) {
db6b665
+            if (this._fingerprintFailedId)
db6b665
+                GLib.source_remove(this._fingerprintFailedId);
db6b665
+        }
db6b665
+
db6b665
         // For Not Listed / enterprise logins, immediately reset
db6b665
         // the dialog
db6b665
         // Otherwise, when in login mode we allow ALLOWED_FAILURES attempts.
db6b665
-- 
db6b665
GitLab
db6b665