Fix error handling in fingerprint code
This commit is contained in:
parent
4ddaddd639
commit
ad5acb8fcc
101
fix-fingerprint-failure-handling.patch
Normal file
101
fix-fingerprint-failure-handling.patch
Normal file
@ -0,0 +1,101 @@
|
||||
From 01302cee25955aecc2b3f391d48e36f8c8b6b322 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 15 May 2024 09:14:09 -0400
|
||||
Subject: [PATCH] gdm/util: Make sure error is GError before checking it
|
||||
|
||||
The fingerprint device fetching code has a generic error handler,
|
||||
that assumes the passed in error is GError. If it's not a
|
||||
GError it will fail trying to use GError specific methods.
|
||||
|
||||
This commit adds some validation checking.
|
||||
---
|
||||
js/gdm/util.js | 19 ++++++++++---------
|
||||
1 file changed, 10 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/js/gdm/util.js b/js/gdm/util.js
|
||||
index efc5a1f..9f39367 100644
|
||||
--- a/js/gdm/util.js
|
||||
+++ b/js/gdm/util.js
|
||||
@@ -369,69 +369,70 @@ export class ShellUserVerifier extends Signals.EventEmitter {
|
||||
|
||||
const fprintDeviceProxy = this._getFingerprintDeviceProxy(devicePath);
|
||||
fprintDeviceProxy.init(null);
|
||||
this._setFingerprintReaderType(fprintDeviceProxy['scan-type']);
|
||||
} else {
|
||||
// Ensure fingerprint service starts, but do not wait for it
|
||||
const cancellable = this._cancellable;
|
||||
await fprintManager.init_async(GLib.PRIORITY_DEFAULT, cancellable);
|
||||
await this._updateFingerprintReaderType(fprintManager, cancellable);
|
||||
this._fprintManager = fprintManager;
|
||||
}
|
||||
} catch (e) {
|
||||
this._handleFingerprintError(e);
|
||||
}
|
||||
}
|
||||
|
||||
_getFingerprintDeviceProxy(devicePath) {
|
||||
return new Gio.DBusProxy({
|
||||
g_connection: Gio.DBus.system,
|
||||
g_name: 'net.reactivated.Fprint',
|
||||
g_object_path: devicePath,
|
||||
g_interface_name: FprintDeviceInfo.name,
|
||||
g_interface_info: FprintDeviceInfo,
|
||||
g_flags: Gio.DBusProxyFlags.DO_NOT_CONNECT_SIGNALS,
|
||||
});
|
||||
}
|
||||
|
||||
_handleFingerprintError(e) {
|
||||
this._fingerprintReaderType = FingerprintReaderType.NONE;
|
||||
|
||||
- if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
- return;
|
||||
- if (e.matches(Gio.DBusError, Gio.DBusError.SERVICE_UNKNOWN))
|
||||
- return;
|
||||
-
|
||||
- if (Gio.DBusError.is_remote_error(e) &&
|
||||
- Gio.DBusError.get_remote_error(e) ===
|
||||
- 'net.reactivated.Fprint.Error.NoSuchDevice')
|
||||
- return;
|
||||
+ if (e instanceof GLib.Error) {
|
||||
+ if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
+ return;
|
||||
+ if (e.matches(Gio.DBusError, Gio.DBusError.SERVICE_UNKNOWN))
|
||||
+ return;
|
||||
+ if (Gio.DBusError.is_remote_error(e) &&
|
||||
+ Gio.DBusError.get_remote_error(e) ===
|
||||
+ 'net.reactivated.Fprint.Error.NoSuchDevice')
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
logError(e, 'Failed to interact with fprintd service');
|
||||
}
|
||||
|
||||
async _checkForFingerprintReader() {
|
||||
if (!this._fprintManager) {
|
||||
this._updateDefaultService();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._fingerprintReaderType !== FingerprintReaderType.NONE)
|
||||
return;
|
||||
|
||||
await this._updateFingerprintReaderType(this._fprintManager, this._cancellable);
|
||||
}
|
||||
|
||||
async _updateFingerprintReaderType(fprintManager, cancellable) {
|
||||
// Wrappers don't support null cancellable, so let's ignore it in case
|
||||
const args = cancellable ? [cancellable] : [];
|
||||
const [devicePath] = await fprintManager.GetDefaultDeviceAsync(...args);
|
||||
const fprintDeviceProxy = this._getFingerprintDeviceProxy(devicePath);
|
||||
await fprintDeviceProxy.init_async(GLib.PRIORITY_DEFAULT, cancellable);
|
||||
this._setFingerprintReaderType(fprintDeviceProxy['scan-type']);
|
||||
this._updateDefaultService();
|
||||
|
||||
if (this._userVerifier &&
|
||||
!this._activeServices.has(FINGERPRINT_SERVICE_NAME)) {
|
||||
if (!this._hold?.isAcquired())
|
||||
this._hold = new Batch.Hold();
|
||||
await this._maybeStartFingerprintVerification();
|
||||
--
|
||||
2.44.0
|
||||
|
@ -32,6 +32,7 @@ Patch: enforce-smartcard-at-unlock.patch
|
||||
Patch: disable-unlock-entry-until-question.patch
|
||||
Patch: 0001-loginDialog-make-info-messages-themed.patch
|
||||
Patch: fix-stuck-prompt.patch
|
||||
Patch: fix-fingerprint-failure-handling.patch
|
||||
|
||||
# Extensions
|
||||
Patch: 0001-extensionDownloader-Refuse-to-override-system-extens.patch
|
||||
|
Loading…
Reference in New Issue
Block a user