From 5a703baa20f2eeb29806bcfa09485e88651e9859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 2 Apr 2020 22:21:06 +0200 Subject: [PATCH] verify: Fail if we try to verify a non-enrolled finger Since we list the fingers available fail early in case it's not found --- tests/test_fprintd_utils.py | 25 +++++++++++++++++++++++++ utils/verify.c | 8 ++++++++ 2 files changed, 33 insertions(+) diff --git a/tests/test_fprintd_utils.py b/tests/test_fprintd_utils.py index 48c248f..9c98274 100755 --- a/tests/test_fprintd_utils.py +++ b/tests/test_fprintd_utils.py @@ -22,6 +22,20 @@ import fcntl import os import time + +VALID_FINGER_NAMES = [ + 'left-thumb', + 'left-index-finger', + 'left-middle-finger', + 'left-ring-finger', + 'left-little-finger', + 'right-thumb', + 'right-index-finger', + 'right-middle-finger', + 'right-ring-finger', + 'right-little-finger' +] + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) class TestFprintdUtilsBase(dbusmock.DBusTestCase): @@ -181,6 +195,10 @@ class TestFprintdUtilsVerify(TestFprintdUtilsBase): self.assertNotRegex(out, r'Device already in use by [A-z]+') self.assertNotIn('Verify result:', out) + if checkEnrolled and finger: + self.assertNotIn('''Finger '{}' not enrolled for user {}'''.format( + finger, user), out) + if checkEnrolled: for f in self.enrolled_fingers: self.assertIn(f, out) @@ -205,6 +223,13 @@ class TestFprintdUtilsVerify(TestFprintdUtilsBase): time.sleep(self.sleep_time) self.assertVerifyMatch(True) + def test_fprintd_verify_not_enrolled_fingers(self): + for finger in [f for f in VALID_FINGER_NAMES if f not in self.enrolled_fingers]: + regex = r'Finger \'{}\' not enrolled'.format(finger) + with self.assertRaisesRegex(AssertionError, regex): + self.start_verify_process(finger=finger) + self.device_mock.Release() + def test_fprintd_verify_script(self): script = [ ( 'verify-match', True, 2 ) diff --git a/utils/verify.c b/utils/verify.c index 2989a49..71952b0 100644 --- a/utils/verify.c +++ b/utils/verify.c @@ -100,6 +100,14 @@ static void find_finger(DBusGProxy *dev, const char *username) g_print(" - #%d: %s\n", i, fingers[i]); } + if (finger_name && !g_str_equal (finger_name, "any") && + !g_strv_contains ((const char **) fingers, finger_name)) { + g_print("Finger '%s' not enrolled for user %s.\n", finger_name, + username); + g_free (finger_name); + exit(1); + } + if (finger_name == NULL || strcmp (finger_name, "any") == 0) { g_free (finger_name); finger_name = g_strdup (fingers[0]);