diff options
author | CoprDistGit <infra@openeuler.org> | 2024-08-02 07:11:13 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2024-08-02 07:11:13 +0000 |
commit | 4671d4f870417e2e0f6b0b4fadfa31570c7752fb (patch) | |
tree | e230ed83ee4a856befa7d96addd3d34d78a958b1 /0001-authPrompt-Disregard-smartcard-status-changes-events.patch | |
parent | ede92676c7c3a698398455318cc45011057260d2 (diff) |
automatic import of gnome-shellopeneuler24.03_LTSopeneuler23.09
Diffstat (limited to '0001-authPrompt-Disregard-smartcard-status-changes-events.patch')
-rw-r--r-- | 0001-authPrompt-Disregard-smartcard-status-changes-events.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/0001-authPrompt-Disregard-smartcard-status-changes-events.patch b/0001-authPrompt-Disregard-smartcard-status-changes-events.patch new file mode 100644 index 0000000..35dd9e0 --- /dev/null +++ b/0001-authPrompt-Disregard-smartcard-status-changes-events.patch @@ -0,0 +1,100 @@ +From ec802e39a5dfb252e2d18b8cb95f713724180565 Mon Sep 17 00:00:00 2001 +From: Ray Strode <rstrode@redhat.com> +Date: Mon, 15 May 2023 10:48:15 -0400 +Subject: [PATCH] authPrompt: Disregard smartcard status changes events if + VERIFICATION_IN_PROGRESS + +commit c8bb45b41c3a13ef161103f649aa18938e028a70 introduced a new +verification state, VERIFICATION_IN_PROGRESS, to detect when the user +has already interacted with the authentication service, so the auth +prompt can rate limit the number of times the user can cancel +authentication attempts with the escape key (without also rate limiting +the number of times they hit escape to go back to the clock without +interacting with the authentication service). + +That means there are now two states that represent the +user actively undergoing verification: VERIFYING and +VERIFICATION_IN_PROGRESS. + +It's inappropriate to reset the smartcard service if the user is +actively conversing with it. We try to check for that by looking at the +original verification state, VERIFYING, but we unfortunately, neglected +to account for the new VERIFICATION_IN_PROGRESS state. + +This commit fixes that oversight, and allows users to again pre-type +their smartcard pin at the clock before inserting their smartcard. +--- + js/gdm/authPrompt.js | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js +index 4da91e096..e961f396e 100644 +--- a/js/gdm/authPrompt.js ++++ b/js/gdm/authPrompt.js +@@ -327,61 +327,62 @@ var AuthPrompt = GObject.registerClass({ + _onShowChoiceList(userVerifier, serviceName, promptMessage, choiceList) { + if (this._queryingService) + this.clear(); + + this._queryingService = serviceName; + + if (this._preemptiveAnswer) + this._preemptiveAnswer = null; + + this.setChoiceList(promptMessage, choiceList); + this.updateSensitivity(true); + this.emit('prompted'); + } + + _onCredentialManagerAuthenticated() { + if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) + this.reset(); + } + + _onSmartcardStatusChanged() { + this.smartcardDetected = this._userVerifier.smartcardDetected; + + // Most of the time we want to reset if the user inserts or removes + // a smartcard. Smartcard insertion "preempts" what the user was + // doing, and smartcard removal aborts the preemption. + // The exceptions are: 1) Don't reset on smartcard insertion if we're already verifying + // with a smartcard + // 2) Don't reset if we've already succeeded at verification and + // the user is getting logged in. + if (this._userVerifier.serviceIsDefault(GdmUtil.SMARTCARD_SERVICE_NAME) && +- this.verificationStatus == AuthPromptStatus.VERIFYING && ++ (this.verificationStatus === AuthPromptStatus.VERIFYING || ++ this.verificationStatus === AuthPromptStatus.VERIFICATION_IN_PROGRESS) && + this.smartcardDetected) + return; + + if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) + this.reset(); + } + + _onShowMessage(_userVerifier, serviceName, message, type) { + this.setMessage(serviceName, message, type); + this.emit('prompted'); + } + + _onVerificationFailed(userVerifier, serviceName, canRetry) { + const wasQueryingService = this._queryingService === serviceName; + + if (wasQueryingService) { + this._queryingService = null; + this.clear(); + } + + this.updateSensitivity(canRetry); + this.setActorInDefaultButtonWell(null); + + if (!canRetry) + this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED; + + if (wasQueryingService) + Util.wiggle(this._entry); + } + +-- +2.39.1 + |