From 258ad57b8741d56ac0e58b462172710e17b6dad4 Mon Sep 17 00:00:00 2001 From: Alessandro Bono Date: Tue, 16 Apr 2024 17:10:53 +0200 Subject: [PATCH] gdm/util: Cleanup CredentialManager on successful verification CredentialManagers emit a user-authenticated signal with a token upon a successful authentication. This marks the service as preempting and will be used for the next login/unlock request. However, the preempting service is not cleaned after a successful verification. As a consequence, it will be picked on a second unlock request. This doesn't happen after a succesful login request because there is a transition from the gnome-shell process owened by GDM to the one owned by the user. Clean the preempting service on a successful verification, like we do when the PAM conversation stops. Part-of: --- js/gdm/util.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/js/gdm/util.js b/js/gdm/util.js index b5a544c8d..07cc17a33 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js @@ -806,7 +806,14 @@ export class ShellUserVerifier extends Signals.EventEmitter { this.emit('reset'); } - _onVerificationComplete() { + _onVerificationComplete(_client, serviceName) { + const isCredentialManager = !!this._credentialManagers[serviceName]; + const isForeground = this.serviceIsForeground(serviceName); + if (isCredentialManager && isForeground) { + this._credentialManagers[serviceName].token = null; + this._preemptingService = null; + } + this.emit('verification-complete'); }