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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3291>
This commit is contained in:
Alessandro Bono 2024-04-16 17:10:53 +02:00 committed by Marge Bot
parent 5877de6c3b
commit 258ad57b87

View File

@ -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');
}