Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fprintd for openSUSE:Factory checked in at 2026-03-25 21:21:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fprintd (Old) and /work/SRC/openSUSE:Factory/.fprintd.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fprintd" Wed Mar 25 21:21:25 2026 rev:23 rq:1342484 version:1.94.5 Changes: -------- --- /work/SRC/openSUSE:Factory/fprintd/fprintd.changes 2025-09-30 18:25:00.517459264 +0200 +++ /work/SRC/openSUSE:Factory/.fprintd.new.8177/fprintd.changes 2026-03-27 06:39:58.702408003 +0100 @@ -1,0 +2,9 @@ +Wed Mar 25 10:07:47 UTC 2026 - Dirk Müller <[email protected]> + +- update to 1.94.5: + * fprintd now depends on libfprint 1.94.9 + * Improved handling of device errors + * pam: reduce minimum timeout to 1 second + * pam: support unlimited timeout + +------------------------------------------------------------------- Old: ---- fprintd-v1.94.4.tar.bz2 New: ---- fprintd-v1.94.5.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fprintd.spec ++++++ --- /var/tmp/diff_new_pack.rJT4Kc/_old 2026-03-27 06:39:59.222429221 +0100 +++ /var/tmp/diff_new_pack.rJT4Kc/_new 2026-03-27 06:39:59.226429384 +0100 @@ -1,7 +1,7 @@ # # spec file for package fprintd # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: fprintd -Version: 1.94.4 +Version: 1.94.5 Release: 0 Summary: D-Bus service for Fingerprint reader access License: GPL-2.0-or-later @@ -38,7 +38,7 @@ BuildRequires: typelib-1_0-FPrint-2_0 BuildRequires: pkgconfig(dbus-glib-1) BuildRequires: pkgconfig(glib-2.0) -BuildRequires: pkgconfig(libfprint-2) >= 1.94.0 +BuildRequires: pkgconfig(libfprint-2) >= 1.94.9 BuildRequires: pkgconfig(libsystemd) BuildRequires: pkgconfig(pam_wrapper) BuildRequires: pkgconfig(polkit-gobject-1) ++++++ fprintd-v1.94.4.tar.bz2 -> fprintd-v1.94.5.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/NEWS new/fprintd-v1.94.5/NEWS --- old/fprintd-v1.94.4/NEWS 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/NEWS 2025-02-20 21:20:51.000000000 +0100 @@ -1,6 +1,14 @@ This file lists notable changes in each release. For the full history of all changes, see ChangeLog. +Version 1.94.5: + +Highlights: + - fprintd now depends on libfprint 1.94.9 + - Improved handling of device errors + - pam: reduce minimum timeout to 1 second + - pam: support unlimited timeout + Version 1.94.4: Highlights: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/data/fprintd.1 new/fprintd-v1.94.5/data/fprintd.1 --- old/fprintd-v1.94.4/data/fprintd.1 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/data/fprintd.1 1970-01-01 01:00:00.000000000 +0100 @@ -1,135 +0,0 @@ -.\" -*- mode: troff; coding: utf-8 -*- -.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) -.\" -.\" Standard preamble: -.\" ======================================================================== -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R -.fi -.. -.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. -.ie n \{\ -. ds C` -. ds C' -'br\} -.el\{\ -. ds C` -. ds C' -'br\} -.\" -.\" Escape single quotes in literal strings from groff's Unicode transform. -.ie \n(.g .ds Aq \(aq -.el .ds Aq ' -.\" -.\" If the F register is >0, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index -.\" entries marked with X<> in POD. Of course, you'll have to process the -.\" output yourself in some meaningful fashion. -.\" -.\" Avoid warning from groff about undefined register 'F'. -.de IX -.. -.nr rF 0 -.if \n(.g .if rF .nr rF 1 -.if (\n(rF:(\n(.g==0)) \{\ -. if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. if !\nF==2 \{\ -. nr % 0 -. nr F 2 -. \} -. \} -.\} -.rr rF -.\" ======================================================================== -.\" -.IX Title "fprintd 1" -.TH fprintd 1 2023-12-20 freedesktop "" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.if n .ad l -.nh -.SH NAME -fprintd \- Fingerprint management daemon, and test applications -.SH SYNOPSIS -.IX Header "SYNOPSIS" -\&\fBfprintd-enroll\fR [\-f finger] [usename] -.PP -\&\fBfprintd-list\fR username [usernames...] -.PP -\&\fBfprintd-verify\fR [\-f finger] [usename] -.PP -\&\fBfprintd-delete\fR username [usernames...] -.SH DESCRIPTION -.IX Header "DESCRIPTION" -This manual page documents briefly the \fBfprintd\fR command-line utilities. -.PP -The \fBfprintd\fR daemon is accessed through \fBD\-Bus\fR by those command-line utilities. -.SH ARGUMENTS -.IX Header "ARGUMENTS" -.IP \fBusername\fR 8 -.IX Item "username" -The username for the user for which you want to query or modify the fingerprint database. -.Sp -Note that \fBfprintd-list\fR and \fBfprintd-delete\fR require at least one username to be passed, and support multiple usernames. -.Sp -\&\fBfprintd-enroll\fR and \fBfprintd-verify\fR will use the current username if none are passed on the command-line. -.IP "\fB\-f finger\fR" 8 -.IX Item "-f finger" -For \fBfprintd-enroll\fR, the finger to enroll. Possible values are: -.Sp -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. -.Sp -The default is to choose automatically, selecting the first available finger for swipe devices, or all the enrolled fingers, for press devices. -.SH "TEST APPLICATIONS" -.IX Header "TEST APPLICATIONS" -.SS fprintd-enroll -.IX Subsection "fprintd-enroll" -.RS 8 -Will enroll the user's right index finger into the database. -.RE -.SS fprintd-list -.IX Subsection "fprintd-list" -.RS 8 -Will list the user's enrolled fingerprints. -.RE -.SS fprintd-verify -.IX Subsection "fprintd-verify" -.RS 8 -Will verify the user's fingerprints against the database. -.RE -.SS fprintd-delete -.IX Subsection "fprintd-delete" -.RS 8 -Will delete the user's right index finger into the database. -.RE -.SH AUTHOR -.IX Header "AUTHOR" -\&\fBfprintd\fR was written by Bastien Nocera and Daniel Drake. -.SH DIRECTORIES -.IX Header "DIRECTORIES" -By default, fprintd stores the fingerprints in \fB/var/lib/fprint/\fR -.SH "SEE ALSO" -.IX Header "SEE ALSO" -.IP \fBgnome-control-center\fR 8 -.IX Item "gnome-control-center" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/data/meson.build new/fprintd-v1.94.5/data/meson.build --- old/fprintd-v1.94.4/data/meson.build 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/data/meson.build 2025-02-20 21:20:51.000000000 +0100 @@ -27,7 +27,7 @@ polkit_policy_target = i18n.merge_file( input: '@[email protected]'.format(polkit_policy), output: polkit_policy, - po_dir: meson.source_root() / 'po', + po_dir: meson.project_source_root() / 'po', install: true, install_dir: polkit_policy_directory, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/data/pam_fprintd.8 new/fprintd-v1.94.5/data/pam_fprintd.8 --- old/fprintd-v1.94.4/data/pam_fprintd.8 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/data/pam_fprintd.8 1970-01-01 01:00:00.000000000 +0100 @@ -1,188 +0,0 @@ -.\" Automatically generated by Pod::Man 4.12 (Pod::Simple 3.39) -.\" -.\" Standard preamble: -.\" ======================================================================== -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. \*(C+ will -.\" give a nicer C++. Capital omega is used to do unbreakable dashes and -.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, -.\" nothing in troff, for use with C<>. -.tr \(*W- -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` -. ds C' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -. ds C` -. ds C' -'br\} -.\" -.\" Escape single quotes in literal strings from groff's Unicode transform. -.ie \n(.g .ds Aq \(aq -.el .ds Aq ' -.\" -.\" If the F register is >0, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index -.\" entries marked with X<> in POD. Of course, you'll have to process the -.\" output yourself in some meaningful fashion. -.\" -.\" Avoid warning from groff about undefined register 'F'. -.de IX -.. -.nr rF 0 -.if \n(.g .if rF .nr rF 1 -.if (\n(rF:(\n(.g==0)) \{\ -. if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. if !\nF==2 \{\ -. nr % 0 -. nr F 2 -. \} -. \} -.\} -.rr rF -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ======================================================================== -.\" -.IX Title "pam_fprintd 8" -.TH pam_fprintd 8 "2020-01-24" "freedesktop" "" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.if n .ad l -.nh -.SH "NAME" -pam_fprintd \- PAM module to authenticate against fprintd, the fingerprint daemon -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -\&\fBpam_fprintd.so\fR [debug|debug=[\fIon\fR|\fIoff\fR|\fItrue\fR|\fIfalse\fR|\fI1\fR|\fI0\fR]] [max\-tries=\fI\s-1MAX_TRIES\s0\fR] [timeout=\fI\s-1TIMEOUT\s0\fR] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -The pam_fprintd module is used to verify a user's fingerprints against fingerprints -enrolled using fprintd, the fingerprint management daemon. -.SH "OPTIONS" -.IX Header "OPTIONS" -.IP "\fBdebug\fR" 8 -.IX Item "debug" -.PD 0 -.IP "\fBdebug=[\f(BIon\fB|\f(BIoff\fB|\f(BItrue\fB|\f(BIfalse\fB|\f(BI1\fB|\f(BI0\fB]\fR" 8 -.IX Item "debug=[on|off|true|false|1|0]" -.PD -Whether debug should be turned on or off. Debug messages will be generated using -pam_syslog which means that they will be saved in the systemd journal by default. -.IP "\fBmax\-tries=\f(BI\s-1MAX_TRIES\s0\fB\fR" 8 -.IX Item "max-tries=MAX_TRIES" -The number of attempts at fingerprint authentication to try before returning an -authentication failure. The default, number of tries is 3. -Use a negative value to set no limit at all, so that the module won't ever error on multiple -retries, but in such case it's suggested for the module loader to handle this. -.IP "\fBtimeout=\f(BI\s-1TIMEOUT\s0\fB\fR" 8 -.IX Item "timeout=TIMEOUT" -The amount of time before returning an authentication failure. The default timeout -is 30 seconds, with 10 seconds being the minimum. -Use a negative value to set no limit at all, so that fingerprint authentication will -be always active while this module is loaded. -.SH "LIMITATIONS" -.IX Header "LIMITATIONS" -The \s-1PAM\s0 stack is by design a serialised authentication, so it is not -possible for pam_fprintd to allow authentication through passwords and -fingerprints at the same time. -.PP -It is up to the application using the \s-1PAM\s0 services to implement separate -\&\s-1PAM\s0 processes and run separate authentication stacks separately. This -is the way multiple authentication methods are made available to users -of gdm for example. -.SH "AUTHOR" -.IX Header "AUTHOR" -\&\fBfprintd\fR was written by Bastien Nocera. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -.IP "\fBfprintd\fR, \fB\s-1PAM\s0\fR" 8 -.IX Item "fprintd, PAM" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/data/pam_fprintd.pod new/fprintd-v1.94.5/data/pam_fprintd.pod --- old/fprintd-v1.94.4/data/pam_fprintd.pod 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/data/pam_fprintd.pod 2025-02-20 21:20:51.000000000 +0100 @@ -27,10 +27,16 @@ The number of attempts at fingerprint authentication to try before returning an authentication failure. The minimum number of tries is 1 while the default is 3. +Use a negative value to set no limit at all, so that the module won't ever error on multiple +retries, but in such case it's suggested for the module loader to handle this. + =item B<timeout=I<TIMEOUT>> The amount of time before returning an authentication failure. The default timeout -is 30 seconds, with 10 seconds being the minimum. +is 30 seconds, with 1 second being the minimum. + +Use a negative value to set no limit at all, so that fingerprint authentication will +be always active while this module is loaded. =back diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/doc/dbus/meson.build new/fprintd-v1.94.5/doc/dbus/meson.build --- old/fprintd-v1.94.4/doc/dbus/meson.build 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/doc/dbus/meson.build 2025-02-20 21:20:51.000000000 +0100 @@ -10,7 +10,7 @@ dbus_interfaces_refs = [] foreach interface_file: dbus_interfaces - basename = run_command('basename', interface_file, '.xml').stdout().strip() + basename = run_command('basename', interface_file, '.xml', check: true).stdout().strip() dbus_interfaces_refs += custom_target(basename + '_ref', input: docbook_xml_header, output: basename + '.ref.xml', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/meson.build new/fprintd-v1.94.5/meson.build --- old/fprintd-v1.94.4/meson.build 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/meson.build 2025-02-20 21:20:51.000000000 +0100 @@ -1,12 +1,12 @@ project('fprintd', 'c', - version: '1.94.4', + version: '1.94.5', license: 'GPLv2+', default_options: [ 'buildtype=debugoptimized', 'warning_level=3', 'c_std=gnu99', ], - meson_version: '>= 0.50.0') + meson_version: '>= 0.58.0') gnome = import('gnome') i18n = import('i18n') @@ -63,7 +63,7 @@ host_system = host_machine.system() glib_min_version = '2.64' -libfprint_min_version = '1.94.0' +libfprint_min_version = '1.94.9' glib_version_def = 'GLIB_VERSION_@0@_@1@'.format( glib_min_version.split('.')[0], glib_min_version.split('.')[1]) @@ -135,7 +135,7 @@ systemd_unit_dir = get_option('systemd_system_unit_dir') if systemd_unit_dir == '' and systemd_dep.found() - systemd_unit_dir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir') + systemd_unit_dir = systemd_dep.get_variable('systemdsystemunitdir') endif if get_option('systemd') and systemd_unit_dir == '' @@ -148,10 +148,10 @@ if dbus_dep.found() if dbus_service_dir == '' - dbus_service_dir = dbus_dep.get_pkgconfig_variable('system_bus_services_dir') + dbus_service_dir = dbus_dep.get_variable('system_bus_services_dir') endif - dbus_interfaces_dir = dbus_dep.get_pkgconfig_variable('interfaces_dir') - dbus_data_dir = dbus_dep.get_pkgconfig_variable('datadir') + dbus_interfaces_dir = dbus_dep.get_variable('interfaces_dir') + dbus_data_dir = dbus_dep.get_variable('datadir') endif dbus_conf_dir = dbus_data_dir / 'dbus-1/system.d' @@ -163,7 +163,7 @@ dbus_interfaces_dir = datadir / 'dbus-1/interfaces' endif -polkit_policy_directory = polkit_gobject_dep.get_pkgconfig_variable('policydir') +polkit_policy_directory = polkit_gobject_dep.get_variable('policydir') # Tests dependencies pam_wrapper_dep = dependency('pam_wrapper', required: false) @@ -184,7 +184,7 @@ python3_available_modules = [] foreach module, required : python3_test_modules - if required and run_command(python3, '-c', 'import @0@'.format(module)).returncode() != 0 + if required and run_command(python3, '-c', 'import @0@'.format(module), check: false).returncode() != 0 warning('Python3 module \'' + module + '\' required by test suite not found') endif endforeach diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/pam/fingerprint-strings.h new/fprintd-v1.94.5/pam/fingerprint-strings.h --- old/fprintd-v1.94.4/pam/fingerprint-strings.h 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/pam/fingerprint-strings.h 2025-02-20 21:20:51.000000000 +0100 @@ -157,7 +157,6 @@ /* Cases not handled: * verify-no-match * verify-match - * verify-unknown-error */ GNUC_UNUSED static const char * verify_result_str_to_msg (const char *result, bool is_swipe) @@ -175,17 +174,35 @@ if (strcmp (result, "verify-swipe-too-short") == 0) return TR (N_("Swipe was too short, try again")); if (strcmp (result, "verify-finger-not-centered") == 0) - return TR (N_("Your finger was not centered, try swiping your finger again")); + { + if (is_swipe) + return TR (N_("Your finger was not centered, try swiping your finger again")); + else + return TR (N_("Your finger was not centered, try touching the sensor again")); + } if (strcmp (result, "verify-remove-and-retry") == 0) - return TR (N_("Remove your finger, and try swiping your finger again")); + { + if (is_swipe) + return TR (N_("Remove your finger, and try swiping your finger again")); + else + return TR (N_("Remove your finger, and try touching the sensor again")); + } + if (strcmp (result, "verify-too-fast") == 0) + { + if (is_swipe) + return TR (N_("Swipe was too fast, try again")); + else + return TR (N_("Finger scan was too fast, try again")); + } + + if (strcmp (result, "verify-unknown-error") == 0) + return TR (N_("An unexpected error happened during finger verification")); return NULL; } /* Cases not handled: * enroll-completed - * enroll-failed - * enroll-unknown-error */ GNUC_UNUSED static const char * enroll_result_str_to_msg (const char *result, bool is_swipe) @@ -203,9 +220,32 @@ if (strcmp (result, "enroll-swipe-too-short") == 0) return TR (N_("Swipe was too short, try again")); if (strcmp (result, "enroll-finger-not-centered") == 0) - return TR (N_("Your finger was not centered, try swiping your finger again")); + { + if (is_swipe) + return TR (N_("Your finger was not centered, try swiping your finger again")); + else + return TR (N_("Your finger was not centered, try touching the sensor again")); + } if (strcmp (result, "enroll-remove-and-retry") == 0) - return TR (N_("Remove your finger, and try swiping your finger again")); + { + if (is_swipe) + return TR (N_("Remove your finger, and try swiping your finger again")); + else + return TR (N_("Remove your finger, and try touching the sensor again")); + } + if (strcmp (result, "enroll-too-fast") == 0) + { + if (is_swipe) + return TR (N_("Swipe was too fast, try again")); + else + return TR (N_("Finger scan was too fast, try again")); + } + if (strcmp (result, "enroll-duplicate") == 0) + return TR (N_("The fingerprint has been already enrolled. Try using another finger.")); + + if (strcmp (result, "enroll-failed") == 0 || + strcmp (result, "enroll-unknown-error") == 0) + return TR (N_("An unexpected error happened during finger enrollment")); return NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/pam/meson.build new/fprintd-v1.94.5/pam/meson.build --- old/fprintd-v1.94.4/pam/meson.build 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/pam/meson.build 2025-02-20 21:20:51.000000000 +0100 @@ -1,4 +1,10 @@ -mapfile = files('pam_fprintd.ver') +mapfile = files('pam_fprintd.ver')[0] +if meson.version().version_compare('>=1.4') + mapfile_path = mapfile.full_path() +else + mapfile_path = meson.project_source_root() / '@0@'.format(mapfile) +endif + pam_modules_dir = get_option('pam_modules_dir') if pam_modules_dir == '' pam_modules_dir = get_option('prefix') / get_option('libdir') / 'security' @@ -24,7 +30,7 @@ has_openpam ? ['-DFPRINTD_PAM_USE_OPENPAM'] : [], ], link_args: [ - '-Wl,--version-script,@0@/@1@'.format(meson.source_root(), mapfile[0]), + '-Wl,--version-script,@0@'.format(mapfile_path), '-Wl,--unresolved-symbols=report-all', ], link_depends: mapfile, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/pam/pam_fprintd.c new/fprintd-v1.94.5/pam/pam_fprintd.c --- old/fprintd-v1.94.4/pam/pam_fprintd.c 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/pam/pam_fprintd.c 2025-02-20 21:20:51.000000000 +0100 @@ -75,7 +75,7 @@ #define DEFAULT_MAX_TRIES 3 #define DEFAULT_TIMEOUT 30 -#define MIN_TIMEOUT 10 +#define MIN_TIMEOUT 1 #define DEBUG_MATCH "debug=" #define MAX_TRIES_MATCH "max-tries=" @@ -516,9 +516,11 @@ #ifdef __linux__ struct signalfd_siginfo siginfo; #endif - int64_t wait_time; + int64_t wait_time = INT64_MAX; + + if (verification_end != ULONG_MAX) + wait_time = verification_end - now (); - wait_time = verification_end - now (); if (wait_time <= 0) break; @@ -891,7 +893,7 @@ if (debug) pam_syslog (pamh, LOG_DEBUG, "max_tries specified as: %d", max_tries); } - else if (str_has_prefix (argv[i], TIMEOUT_MATCH) && strlen (argv[i]) <= strlen (TIMEOUT_MATCH) + 2) + else if (str_has_prefix (argv[i], TIMEOUT_MATCH) && strlen (argv[i]) > strlen (TIMEOUT_MATCH)) { int opt_timeout = atoi (argv[i] + strlen (TIMEOUT_MATCH)); timeout = (opt_timeout < 0 ? UINT_MAX : (unsigned) opt_timeout); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/src/device.c new/fprintd-v1.94.5/src/device.c --- old/fprintd-v1.94.4/src/device.c 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/src/device.c 2025-02-20 21:20:51.000000000 +0100 @@ -602,6 +602,9 @@ case FP_DEVICE_RETRY_REMOVE_FINGER: return "verify-remove-and-retry"; + case FP_DEVICE_RETRY_TOO_FAST: + return "verify-too-fast"; + default: return "verify-retry-scan"; } @@ -613,6 +616,10 @@ */ if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_PROTO)) return "verify-disconnected"; + else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED)) + return "verify-disconnected"; + else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_TOO_HOT)) + return "verify-disconnected"; else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) || g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_NOT_FOUND)) return "verify-no-match"; @@ -647,6 +654,9 @@ case FP_DEVICE_RETRY_REMOVE_FINGER: return "enroll-remove-and-retry"; + case FP_DEVICE_RETRY_TOO_FAST: + return "enroll-too-fast"; + default: return "enroll-retry-scan"; } @@ -658,8 +668,14 @@ */ if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_PROTO)) return "enroll-disconnected"; + else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED)) + return "enroll-disconnected"; + else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_TOO_HOT)) + return "enroll-disconnected"; else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_FULL)) return "enroll-data-full"; + else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_DUPLICATE)) + return "enroll-duplicate"; else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) return "enroll-failed"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/src/net.reactivated.Fprint.Device.xml new/fprintd-v1.94.5/src/net.reactivated.Fprint.Device.xml --- old/fprintd-v1.94.4/src/net.reactivated.Fprint.Device.xml 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/src/net.reactivated.Fprint.Device.xml 2025-02-20 21:20:51.000000000 +0100 @@ -182,6 +182,12 @@ </doc:definition> </doc:item> <doc:item> + <doc:term>verify-too-fast</doc:term> + <doc:definition> + The user's swipe or touch was too fast. The user should retry scanning their finger, the verification is still ongoing. + </doc:definition> + </doc:item> + <doc:item> <doc:term>verify-disconnected</doc:term> <doc:definition> The device was disconnected during the verification, no other actions should be taken, and you shouldn't use the device any more. @@ -233,6 +239,12 @@ </doc:definition> </doc:item> <doc:item> + <doc:term>enroll-too-fast</doc:term> + <doc:definition> + The user's swipe or touch was too short. The user should retry scanning their finger, the enrollment is still ongoing. + </doc:definition> + </doc:item> + <doc:item> <doc:term>enroll-finger-not-centered</doc:term> <doc:definition> The user's finger was not centered on the reader. The user should retry scanning their finger, the enrollment is still ongoing. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/tests/dbusmock/fprintd.py new/fprintd-v1.94.5/tests/dbusmock/fprintd.py --- old/fprintd-v1.94.4/tests/dbusmock/fprintd.py 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/tests/dbusmock/fprintd.py 2025-02-20 21:20:51.000000000 +0100 @@ -53,6 +53,7 @@ 'verify-no-match', 'verify-match', 'verify-retry-scan', + 'verify-too-fast', 'verify-swipe-too-short', 'verify-finger-not-centered', 'verify-remove-and-retry', @@ -65,6 +66,7 @@ 'enroll-failed', 'enroll-stage-passed', 'enroll-retry-scan', + 'enroll-too-fast', 'enroll-swipe-too-short', 'enroll-finger-not-centered', 'enroll-remove-and-retry', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/tests/fprintd.py new/fprintd-v1.94.5/tests/fprintd.py --- old/fprintd-v1.94.4/tests/fprintd.py 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/tests/fprintd.py 2025-02-20 21:20:51.000000000 +0100 @@ -1619,7 +1619,7 @@ # Now remove the device while we are enrolling, which will cause an error self.send_remove() - self.wait_for_result(expected='enroll-unknown-error') + self.wait_for_result(expected='enroll-disconnected') # The device will still be there now until it is released devices = self.manager.GetDevices() @@ -2458,6 +2458,9 @@ def test_enroll_retry_too_short(self): self.assertEnrollRetry(FPrint.DeviceRetry.TOO_SHORT, 'enroll-swipe-too-short') + def test_enroll_retry_too_fast(self): + self.assertEnrollRetry(FPrint.DeviceRetry.TOO_FAST, 'enroll-too-fast') + def test_enroll_retry_remove_finger(self): self.assertEnrollRetry(FPrint.DeviceRetry.REMOVE_FINGER, 'enroll-remove-and-retry') @@ -2482,6 +2485,12 @@ def test_enroll_error_proto(self): self.assertEnrollError(FPrint.DeviceError.PROTO, 'enroll-disconnected') + def test_enroll_error_too_hot(self): + self.assertEnrollError(FPrint.DeviceError.TOO_HOT, 'enroll-disconnected') + + def test_enroll_error_removed(self): + self.assertEnrollError(FPrint.DeviceError.REMOVED, 'enroll-disconnected') + def test_enroll_error_data_invalid(self): self.assertEnrollError(FPrint.DeviceError.DATA_INVALID, 'enroll-unknown-error') @@ -2494,6 +2503,9 @@ def test_enroll_error_data_full(self): self.assertEnrollError(FPrint.DeviceError.DATA_FULL, 'enroll-data-full') + def test_enroll_error_data_duplicate(self): + self.assertEnrollError(FPrint.DeviceError.DATA_DUPLICATE, 'enroll-duplicate') + def test_enroll_already_enrolled_finger(self): self.enroll_image('whorl', start=False) @@ -2740,6 +2752,9 @@ def test_verify_retry_center_finger(self): self.assertVerifyRetry(FPrint.DeviceRetry.CENTER_FINGER, 'verify-finger-not-centered') + def test_verify_retry_too_fast(self): + self.assertVerifyRetry(FPrint.DeviceRetry.TOO_FAST, 'verify-too-fast') + def test_verify_error_general(self): self.assertVerifyError(FPrint.DeviceError.GENERAL, 'verify-unknown-error') @@ -2758,6 +2773,12 @@ def test_verify_error_proto(self): self.assertVerifyError(FPrint.DeviceError.PROTO, 'verify-disconnected') + def test_verify_error_too_hot(self): + self.assertVerifyError(FPrint.DeviceError.TOO_HOT, 'verify-disconnected') + + def test_verify_error_removed(self): + self.assertVerifyError(FPrint.DeviceError.REMOVED, 'verify-disconnected') + def test_verify_error_data_invalid(self): self.assertVerifyError(FPrint.DeviceError.DATA_INVALID, 'verify-unknown-error') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/tests/meson.build new/fprintd-v1.94.5/tests/meson.build --- old/fprintd-v1.94.4/tests/meson.build 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/tests/meson.build 2025-02-20 21:20:51.000000000 +0100 @@ -31,8 +31,8 @@ 'env': [ 'G_DEBUG=fatal-criticals', 'G_MESSAGES_DEBUG=all', - 'FPRINT_BUILD_DIR=' + meson.build_root() / 'src', - 'TOPSRCDIR=' + meson.source_root(), + 'FPRINT_BUILD_DIR=' + meson.project_build_root() / 'src', + 'TOPSRCDIR=' + meson.project_source_root(), ], 'depends': [ fprintd, @@ -52,7 +52,7 @@ unittest_inspector = find_program('unittest_inspector.py') foreach pt: python_tests - r = run_command(unittest_inspector, pt.get('file')) + r = run_command(unittest_inspector, pt.get('file'), check: false) unit_tests = r.stdout().strip().split('\n') base_args = [ pt.get('file') ] + pt.get('extra_args', []) suite = pt.get('suite', []) @@ -75,7 +75,7 @@ args: ut_args, suite: ut_suite, depends: pt.get('depends', []), - workdir: pt.get('workdir', meson.build_root()), + workdir: pt.get('workdir', meson.project_build_root()), env: pt.get('env', []), timeout: pt.get('timeout', 30), is_parallel: pt.get('is_parallel', true), @@ -90,6 +90,13 @@ ] if address_sanitizer + lsan_suppress = files('LSAN-leaks-suppress.txt')[0] + if meson.version().version_compare('>=1.4') + lsan_suppress = lsan_suppress.full_path() + else + lsan_suppress = meson.project_source_root() / '@0@'.format(lsan_suppress) + endif + timeout_multiplier = 3 test_envs += [ 'ADDRESS_SANITIZER=true', @@ -100,8 +107,7 @@ 'LSAN_OPTIONS=@0@'.format(':'.join([ 'exitcode=0', 'strict_string_checks=true', - 'suppressions=@0@'.format( - files(meson.current_source_dir() / 'LSAN-leaks-suppress.txt')[0]), + 'suppressions=@0@'.format(lsan_suppress), ])), ] endif @@ -113,7 +119,7 @@ ) if not address_sanitizer and find_program('valgrind', required: false).found() - glib_share = glib_dep.get_pkgconfig_variable('prefix') / 'share' / glib_dep.name() + glib_share = glib_dep.get_variable('prefix') / 'share' / glib_dep.name() glib_suppressions = glib_share + '/valgrind/glib.supp' add_test_setup('valgrind', env: [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/tests/pam/meson.build new/fprintd-v1.94.5/tests/pam/meson.build --- old/fprintd-v1.94.4/tests/pam/meson.build 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/tests/pam/meson.build 2025-02-20 21:20:51.000000000 +0100 @@ -18,18 +18,24 @@ foreach libname: preloaded_libs lib = run_command(meson.get_compiler('c'), - '-print-file-name=lib@[email protected]'.format(libname) + '-print-file-name=lib@[email protected]'.format(libname), + check: false, ).stdout().strip() # Support linker script files - if run_command('grep', '-qI', '^INPUT', files(lib)).returncode() == 0 + if run_command('grep', '-qI', '^INPUT', files(lib), check: false).returncode() == 0 out = run_command('cat', lib).stdout() lib = out.split('(')[1].split(')')[0].strip() endif if lib != '' and lib[0] == '/' message('Found library @0@ as @1@'.format(libname, lib)) - pam_tests_ld_preload += '@0@'.format(files(lib)[0]) + preload_lib_path = files(lib)[0] + if meson.version().version_compare('>=1.4') + pam_tests_ld_preload += preload_lib_path.full_path() + else + pam_tests_ld_preload += '@0@'.format(preload_lib_path) + endif else tests = [] warning('No library found for ' + libname + ', skipping PAM tests') @@ -43,8 +49,8 @@ 'file': files(meson.current_source_dir() / t + '.py')[0], 'is_parallel': false, 'env': [ - 'TOPBUILDDIR=' + meson.build_root(), - 'TOPSRCDIR=' + meson.source_root(), + 'TOPBUILDDIR=' + meson.project_build_root(), + 'TOPSRCDIR=' + meson.project_source_root(), 'LD_PRELOAD=' + ' '.join(pam_tests_ld_preload), 'PAM_WRAPPER=1', 'PAM_WRAPPER_DEBUGLEVEL=2', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fprintd-v1.94.4/tests/pam/test_pam_fprintd.py new/fprintd-v1.94.5/tests/pam/test_pam_fprintd.py --- old/fprintd-v1.94.4/tests/pam/test_pam_fprintd.py 2024-09-05 03:10:52.000000000 +0200 +++ new/fprintd-v1.94.5/tests/pam/test_pam_fprintd.py 2025-02-20 21:20:51.000000000 +0100 @@ -55,6 +55,8 @@ @classmethod def setUpClass(klass): + dbusmock.DBusTestCase.setUpClass() + klass.start_system_bus() klass.start_monitor() klass.dbus_con = klass.get_dbus(True) @@ -72,7 +74,10 @@ # Remove pam wrapper files, as they may break other tests [shutil.rmtree(i) for i in glob.glob('/tmp/pam.[0-9A-z]')] + dbusmock.DBusTestCase.tearDownClass() + def setUp(self): + super().setUp() (self.p_mock, self.obj_fprintd_manager) = self.spawn_server_template( self.template_name, {}) self.obj_fprintd_mock = dbus.Interface(self.obj_fprintd_manager, 'net.reactivated.Fprint.Manager.Mock') @@ -80,6 +85,7 @@ def tearDown(self): self.p_mock.terminate() self.p_mock.wait() + super().tearDown() def setup_device(self): device_path = self.obj_fprintd_mock.AddDevice('FDO Trigger Finger Laser Reader', 3, 'swipe', False)
