399 Commits

Author SHA1 Message Date
7d22a2b5b9 Release 1.90.8 2020-12-11 16:00:28 +01:00
de725a91e4 verify: Print message about verification start from callback
It seems that GLib may process multiple DBus signals in one mainloop
iteration. This could cause messages to be re-ordered, which in turn
caused a race condition in the CI that could trigger random failures.
2020-12-11 16:00:28 +01:00
18392cba54 manager: Export the object manager in /net/reactivated/Fprint
Given we're going to use an object manager it can just stay at the root
of the project, while it will be just used to manage the devices
2020-12-11 15:30:26 +01:00
783d82f359 device: Expose method name when logging authorization steps 2020-12-11 14:03:37 +00:00
c00a3375d1 device: Use standard names for local errors and remove unused one 2020-12-11 14:03:37 +00:00
5aa61adabc build: make systemd dependency optional
The systemd dependency is only used to install some systemd service
files. This can easily be made optional.
2020-12-11 15:01:24 +01:00
1fc10f15ee pam: Stop authorization if we couldn't parse signals
This really should never ever happen. If it does, don't continue but
stop instead.
2020-12-11 10:34:51 +01:00
c24badfd68 pam: Move NameOwnerChanged registration after initialization
We must ignore NameOwnerChanged that happen due to automatic startup.
The easy way to do so is to just register it only when we get to the
point that a name owner change has security implications.

While add it, change it to always log at a warning level.

Fixes: #94
2020-12-11 10:34:51 +01:00
4612c1f3ed Release 1.90.7 2020-12-09 13:16:12 +01:00
ca216a32af test_pam_fprintd: Add test verifying the case in which we've no devices 2020-12-08 21:14:24 +01:00
944493e472 pam_fprintd: Protect usage of strdup for NULL values
It's not smart as g_strdup, so need to ensure we don't use it for NULL
strings.

This is a regression caused by commit bf223662
2020-12-08 21:14:01 +01:00
34f24cbe19 ci: Move build jobs to build phase 2020-12-07 18:42:24 +01:00
9314069a88 ci: Add check-source stage where we check syntax 2020-12-07 18:42:24 +01:00
66e21eac8f .git-blame-ignore-revs: Ignore formatting commit and add hint how to use it 2020-12-07 18:42:22 +01:00
f73429f062 fprintd: Reindent the source code following uncrustify rules 2020-12-07 18:41:45 +01:00
c18ebaf9da scripts: Add uncrustify scripts for reformatting fprintd source code
We follow libfprint here, using GNOME format
2020-12-07 18:41:45 +01:00
4a80bfacec fingerprint-strings: Make the finger_str_to_msg loop clearer
Just continue earlier instead of using a long if check
2020-12-07 18:41:45 +01:00
52058c1ea0 Release 1.90.6 2020-12-07 15:34:48 +01:00
22cdc0a7ea device: Always use FpFinger instead of a mixture of it and finger numbers
We already use FpFinger for storage operations and prints management,
but internally we keep still using the old finger number, that uses
different values for invalid data.

Let's be consistent, and always use FpFinger everywhere.
2020-12-07 15:27:14 +01:00
043fcaafec pam_fprintd: Guard against NULL pointer returned by finger_str_to_msg
Otherwise the PAM module will crash trying to send an info message about
the selected print.
2020-12-07 15:27:14 +01:00
bf2236620e pam_fprintd: Implement auto-pointers and use early-return more around
Implement simple auto-pointers for the types we use in pam_fprintd with
a basic implementation based on GLib one so that we can have the same
features without having neither an header-dependency on it.
2020-12-07 15:27:14 +01:00
0122d351f9 fprintd: Add tests for device properties values 2020-12-07 15:27:14 +01:00
4435706d20 tests: Add test that PAM gives up when daemon disappears 2020-12-07 15:27:14 +01:00
c5877bbc12 pam: Stop authentication with PAM_AUTHINFO_UNAVAIL on name owner change
If fprintd disappears or is replaced, then we might be getting signals
from another daemon/verifcation session.

As such we must give up at that point.

Related: #47
2020-12-07 15:27:14 +01:00
a170a3a09f tests: Check that PAM stops if the device could not be claimed 2020-12-07 15:27:14 +01:00
a76af6ce71 pam_fprintd: Clear the data value before setting it if set 2020-12-07 15:27:14 +01:00
34a24eac77 tests/pam: Ensure that we ignore verify events before VerifyStart has completed
We had a race that was causing the events to be handled even if we were
not ready to accept them, causing a potential non-authentication.

So simulate this case, by sending a 'verify-match' event before we
started the verification and ensure that we ignore it.
2020-12-07 15:27:14 +01:00
47751548b2 pam_fprintd: Ignore any verify signal if we didn't complete VerifyStart
In case fprintd is emitting a verify signal for another request that is
still going on while we're about to start a new verification, we'd just
accept such signal, so potentially allowing a log-in because another
concurrent request succeeded.

To avoid this, use async call to VerifyStart and open a verify window
(during which we accept the verification related signals) that is kept
open just once the VerifyStart call has been completed and before
stopping the verification again. As that's the only moment in which we
can be sure that we've control of the daemon events for such device.

Thanks to Benjamin to find out the race.

Fixes: #47
2020-12-07 15:27:14 +01:00
a30c45629e tests/pam: Ensure that we fail in case the user has no prints enrolled
This is both in case in we start the authentication and in the absurd
but (hey, testing!) situation in which prints gets deleted in between
the device claiming and the verification start.

To handle this second scenario we need to instruct fprintd mock to raise
an error on some special command
2020-12-07 15:27:14 +01:00
3242b99410 dbusmock/fprintd: Support more complex verify scripts
This now allows:
 * Sending signals before and after method return
 * Exiting the daemon
 * Emulating NoEnrolledPrints DBus method error

Co-authored-by: Benjamin Berg <bberg@redhat.com>
2020-12-07 15:27:14 +01:00
5ccb9ba0ec tests: Do not eat fprintd output in PAM test
It may be useful, just let it go to stdout/stderr.
2020-12-07 15:27:14 +01:00
f4eaacd0ec pam: Return a fixed string about protocol error if there is no message
This can only happen if fprintd is not adhering to the protocol.
2020-12-07 15:27:14 +01:00
34b21fa917 tests: Port test to use the OutputChecker 2020-12-07 15:27:14 +01:00
2d98d4543f verify: Add print about start for tests
This allows properly reading the output only to the point where we can
ensure that verification has started.
2020-12-07 15:27:14 +01:00
8c46fddd03 verify: Fix verify script to work correctly
The verify script would start an async routine. However, this blocks the
dbus return, which really is needed.

Also, we should only return one item of the script for each VerifyStart
run. So, fix things by pop'ing the first item and putting it on the bus
from a GLib.add_timeout handler.
2020-12-07 15:27:14 +01:00
3a00643d5b tests: Add OutputChecker class to improve test code 2020-12-07 15:27:14 +01:00
eb73e024e1 utils: Fix race in verify accepting unrelated signals
Signals like VerifyResult may be received from unrelated Verify
operations. To avoid races, we need to ignore any VerifyResult that
happenes before the DBus method returns.

The only way to do this race-free is to use the async version of the
VerifyStart method.
2020-12-07 15:27:14 +01:00
a4b06c2219 device: Emit VerifyFingerSelected after the method returned
In order to be race free, clients need to ignore all signals until after
the DBus method to start verification has returned. So the signal must
be emitted later than it currently is.
2020-12-07 15:27:14 +01:00
5ccaa094a0 build: Generate fprintd dbus sources using interactive flags
Since we can't depend on newer GLib yet, we patch the generated sources
to generate some new ones with fixed flags.
2020-12-07 15:14:07 +01:00
fc7e4d0e5c device: Do not require authentication for release/stop
If someone has started an operation, then we don't really need to
confirm they are permitted to stop it again. Not doing this has the
advantage that we cannot run into a second interactive authorization
step accidentally.
2020-12-07 15:14:07 +01:00
583cd870d8 device: Use a common error function if an action is ongoing
There is no need to dupliate the code. Just create one function that
sets an error and returns FALSE if action is not ACTION_NONE.
2020-12-07 12:02:32 +01:00
2ca2d5e62c device: Use a switch to check current action so we can be more selective
For example we were allowing to verify stop while doing other actions
different from enrolling (such as delete or open/close).
2020-12-07 12:02:32 +01:00
c5c81a2ea8 device: Add ACTION_DELETE to prevent concurrent operations
Delete needs to operate on the device, so no other actions are permitted
at the same time. And using the libfprint _sync methods does not
guard against reentrance.
2020-12-07 12:02:32 +01:00
c0ad5880a4 tests: Call VerifyStop in enroll_verify_list_delete test
The test didn't call this and the device would be left in an
inconsistent state, causing an error at shutdown time.
2020-12-07 12:02:32 +01:00
2dc3a4e2c5 device: Use more standard naming for local errors 2020-12-07 12:00:58 +01:00
3b0d93bcc2 tests: Add more authorization tests 2020-12-07 12:00:58 +01:00
eac171ab0f device: Add separate state for delete which will claim internally
Also rename the different claim states to make them a bit more
understandable.
2020-12-07 12:00:58 +01:00
7533f63a06 device: Move permissions checks per DBus invocation in a single function
This way we can avoid repeating the same checks multiple times, and
we have a single point where we check the permissions needed for method
invocation.
2020-12-07 11:59:42 +01:00
a38917ab26 fprintd: Re-order permissions table by priority and add docs
Given that we could do operations where at least one permission, is
requested, we should give more priority to the weaker ones that are
acceptable and in case raise the level at later points.
2020-12-05 01:01:36 +01:00
a92b8e5f60 device: Always return FALSE if setting an error in Check claimed
We may have a case where the sender matches with the
session's sender but have a session invocation already set.

In such case we set an error, but still return TRUE.
2020-12-05 01:01:36 +01:00
29f34cf23c tests/fprintd: Do not hang if we error on name appeared callback
But instead only wait for name to appear and do the tests in the main
function so that we can properly check the exception and depending on
its type skip the test or raise it so that it can be caught by the test
suite
2020-12-04 22:56:37 +01:00
a10f0dc22d net.reactivated.Fprint: Allow actual fprind interfaces to be used
We allowed a non-existant net.reactivated.Fprint interface, while our
interfaces are Manager and Device.

Allow them to be used.
2020-12-03 17:54:21 +01:00
267b322f6d Release 1.90.5 2020-12-01 14:22:55 +01:00
3b83240e57 tests: Fix detection of non-functional file permissions
If we rely on CI_PROJECT_NAME being set, then the test will fail in
similar environments outside of the fprintd main CI. So just add a
os.stat call afterwards to check whether the permission changes took
effect, and if not, then skip.

So, instead try to create a file and check that this fails.
2020-12-01 14:22:55 +01:00
897cbd341e tests: Skip flaky test_enroll_verify_list_delete test with old libfprint
The test can hang forever unless a fixed libfprint version is used.
2020-12-01 12:46:17 +01:00
9d0305ea05 tests: Use system utils outside of the test environment
The code to pick up the utilities from the test environment would fail
if the environment variables are not set. In that case, we can just use
the binary name and rely on PATH though.
2020-12-01 11:41:11 +01:00
3dbfdabe01 tests: Translate skips into error code 77
This makes the meson output nicer, as it will correctly display that the
test has been skipped. It only happens if all tests in the run were
skipped, but meson always does one test a time.
2020-12-01 10:04:11 +01:00
45cf63d589 tests: Skip hotplug test if "removed" property does not exist
The test requires libfprint 1.90.4 to work, otherwise it will just hang
forever.
2020-12-01 10:04:11 +01:00
29ed88a50a meson: Use warning_level feature of meson
This is nicer than adding -Wall and gives users more control.

Add -Wno-unused-parameter for now as there are lot of places where
this would need to be changed and it is reasonable in most cases.

Add -Wno-pedantic because it conflicts with
g_signal_handlers_disconnect_*
2020-12-01 09:00:55 +00:00
e301779c20 Fix integer signedness mismatches 2020-12-01 09:00:55 +00:00
be5d283a3e device: Remove unused code
The code was left over when adding the function to create the session data.
2020-12-01 09:00:55 +00:00
ebfcbdd13e pam: Use %d with errno instead of %m
Otherwise GCC warns sometimes, and it is easy enough to replace the use
of %m.
2020-12-01 09:00:55 +00:00
ec7376d7e6 meson: Fix CFLAGS use by using add_project_arguments
It seems that meson will not always apply the CFLAGS as defined through
the environment if "c_args=" is used in the default_options array for
the project() call.

Switching to add_project_arguments solves this problem.

See https://github.com/mesonbuild/meson/issues/8037
2020-12-01 09:00:55 +00:00
df568e1ce1 net.reactivated.Fprint: Explicitly allow basic D-Bus APIs 2020-11-28 20:29:57 +00:00
7ee61393ec net.reactivated.Fprint: Only allow clients to send messages with fprintd iface to us
In the way the rule is currently set it would allow clients to send
messages with the fprintd interface to any other service, while we only
allow them to be redirected to fprintd itself.

This was causing a debian linter failure [1].

[1] https://lintian.debian.org/tags/dbus-policy-without-send-destination.html
2020-11-28 20:29:57 +00:00
57ca0dc95e tests/pam: Don't run PAM tests in parallel
Given they could re-use the same pam-wrapper temporary dir, it's better
to avoid running them concurrently.
2020-11-27 19:30:08 +01:00
85ba309e9d tests: Remove pam-wrapper temporary folder on test completion
PAM wrapper creates /tmp/pam.X files during its execution (strictly as
it does not follow $TMPDIR either), however given the low number of
combinations, we may end up in re-using the same pam.* folder during
meson test, causing a failure.

As per this, remove these temporary files on tearDown so that we won't
try reusing the same folder multiple times.
2020-11-27 19:12:06 +01:00
3f2174676e device: Re-define polkit auto-pointer funcs if not defined
In case we're using an old polkit version that does not support
auto-pointers, we need to re-define such functions manually or fprintd
won't compile.

Given that polkit doesn't provide us version informations in headers we
need to get that from pkg-config
2020-11-27 18:21:29 +01:00
5e18d46971 Revert "meson: Bump polkit dependency to 0.114"
We only depend on newer polkit for auto-pointers usage, so it's not
worth to bump its dependency just for them

This reverts commit a8bd2bc25e.
2020-11-27 18:18:51 +01:00
a8bd2bc25e meson: Bump polkit dependency to 0.114
It's the first one supporting auto-pointers
2020-11-27 17:53:58 +01:00
88a627f187 Release 1.90.4 2020-11-27 14:26:12 +01:00
a8818f9bfb device: Do not disconnect g-authorize-method handler
Disconnecting the g-authorize-method handler is not really needed, as it
is a signal from the same object. This basically reverts 6eb9f263fd
(device: Disconnect authorization callback and remove clients) but keeps
the code to clear known clients in the dispose handler.

Closes: #91
2020-11-27 14:23:41 +01:00
c5a3089f89 device: Remove some debug spew
Closes: #89
2020-11-25 19:09:02 +01:00
5de1261df6 device: Re-fetch session data after synchronous operation
As the mainloop is iterated, the session-data may be modified while the
client vanished handler is running. Re-fetch the session data to avoid
seeing an old state and closing the device a second time.

See: https://gitlab.freedesktop.org/libfprint/fprintd/-/issues/87#note_706357
2020-11-25 19:09:02 +01:00
e5c82d7b96 device: Throw a critical warning if the device was not cleaned up
On finalization, the device should always be cleaned up properly (no
data associated with an action may be left). Show a critical warning if
this is not the case, as it indicates a programming error.
2020-11-25 19:09:02 +01:00
9c842e2c2f manager: Fix leak of FprintDevice reference
When adding a device a reference was leaked.
2020-11-25 19:09:02 +01:00
ec5cce083c device: Fix leaks on device finalization 2020-11-25 19:09:02 +01:00
ab8118bde2 tests: Add device removal test 2020-11-25 19:09:00 +01:00
08fb209aed manager: Fix unexport of removed devices
The correct way to unexport the object again is to unexported it on the
manager rather than on the interface skeleton. This fixes notifications
about device removal on DBus.
2020-11-25 19:08:20 +01:00
6eb9f263fd device: Disconnect authorization callback and remove clients
Add a dispose function to disconnect the authorization callback and
remove all clients (i.e. unwatch their bus names) before destroying the
hash table.
2020-11-25 19:08:20 +01:00
74d05e7996 device: Destroy auth object in finalize 2020-11-25 19:08:20 +01:00
83cd09ba2f device: Unwatch names when removing them
If a device is unplugged/destroyed while a client is using it, then we
would still end up watching the name. The vanish notification will then
access the destroyed FprintDevice object.

Fix this by unwatching the bus name when removing the client entry from
the dictionary.
2020-11-25 19:08:20 +01:00
8ed77829a7 tests: Add test for a client vanishing during claim
Note that this test only works if the virtual_image driver opens up a
window for race condition by delaying the open callback.
2020-11-25 19:05:47 +01:00
b63c76319f device: Make possible client vanished race testable using critical
The tests cannot currently parse the logs of fprintd. This means we need
to rely on fprintd aborting when a condition is hit that needs to be
tested.

This makes certain possible races when clients vanish testable.
2020-11-25 19:05:46 +01:00
fd9a86eca4 tests: Fail test if return code is less than 0
This means that the application received a signal.
2020-11-25 19:04:44 +01:00
38ba7199b7 utils: Use auto-pointers 2020-11-13 13:32:51 +01:00
827baff301 enroll: Cleanup error with autoptr 2020-11-13 13:32:51 +01:00
6a5d46c8b0 file_storage: Use autopointers 2020-11-13 13:32:51 +01:00
1ae0f4926d device: Always use auto-pointers
Remove manual memory management when possible, using new GLib facilities

In a few cases, avoid creating a temporary GError instead.
2020-11-13 13:32:31 +01:00
e1c2698807 main: Use more auto-pointers 2020-11-11 11:40:51 +01:00
b14bfd8226 device: Implement lock-free session getting scheme
Add a scheme that allows getting and referencing the current session
data while also adding a reference at the same time. This allows getting
the session and using the constant attributes from outside the main
thread without worrying about it being destroyed.

Implement the getter/setter in a safe way by marking the pointer as
invalid while we get the reference.
2020-11-11 11:35:13 +01:00
1e2f360ade device: Fix possible race condition when checking claimed state
We already check the claimed state in advance during authorization. This
makes sense, as we can avoid authorization if the API has been used
incorrectly. However, as the mainloop is running and handling other
request the claimed state might change at any point until the method
handler is actually running.

As such, check the claimed state again in each method. Doing so fixes
the possible race condition.
2020-11-10 14:45:59 +01:00
778a8540aa device.policy: Use auth-self-keep for enrollment
When user is requested for enrolling, we should ask for password as
anyone who has physical access to the machine could otherwise enroll
its own fingers, and have access to it.

Fixes #5
2020-11-10 14:45:59 +01:00
4e707f0d31 manager: Use GEnum to register DBus errors from FprintError
Given that mk_genenum already parses FprintError, add the nick metadata
to the errors so that it matches the wanted DBus error and automatically
generate the errors list.

In this way we'll have to only touch one definition to get everything
updated
2020-11-10 14:45:59 +01:00
4c78012103 device: Use meson to generate fprint device permission flags 2020-11-10 14:45:59 +01:00
e59f3cbc4f device: Use GFlags to handle permission types easily as flags
And thanks to the GEnumValues we can easily get their nick string from
them that we can pass to Polkit
2020-11-10 14:45:59 +01:00
1a860aa882 tests/fprintd: Add tests ensuring that concurrent calls to fprintd work
Simulate the case in which multiple users are trying to access a device
at the same time, verifying that the access is granted only to the one
that first completes the authorization phase and that no other client is
then allowed.
2020-11-10 14:45:59 +01:00
a183b779ec tests/fprintd: Make easier to call device methods asynchronously 2020-11-10 14:45:59 +01:00
9d6c7eb1a9 dbusmock/polkitd: Add ability to simulate call hangs or delays
Added various methods that allow to make methods to delay to return a
value, both by using timing functions and using a way to manually
stop and restart the calls.

This is mostly done using async callbacks in dbus methods
2020-11-10 14:45:59 +01:00
110c0018a2 tests/fprintd: Make possible to call gdbus client as an async process
As per this refactor the sync call we already had so that reuses the
same code.
2020-11-10 14:45:59 +01:00
5611317c72 tests: Add standalone PolkitD implementation
We need to be able to hack this to be an async daemon to perform some
multi-thread tests, so replacing default implementation with a simple
one that for now just does same of default
2020-11-10 14:45:59 +01:00
0904c8a527 tests/fprintd: Ensure we can claim and release with only the verify permission 2020-11-10 14:45:59 +01:00
a681996d1d device: Check Polkit actions asynchronously using skeleton authorize method
GDBus generated interface skeletons support natively an authorization
method that allows to filter calls before we get into the method
callback and that gets called into the call thread, before we go back
to main thread.

As per this, we can move all the polkit and other authorization checks
into this callback so that method handlers are now just assuming they're
the right to perform the requested operation.

As per the fact we'll share some data between another thread and the
callbacks, we will need to introduce some locking mechanism to ensure
safe data access.

This might be reduced by moving the claiming checks back to the method,
but would lead errors to be handled in different ordering, and so the
user to be requested for a password, and then - in case fail.
This can still happen now, but only if there are concurrent requests.
2020-11-10 14:45:59 +01:00
4e7cf47a3d device: Get sender from invocation instead that during username check
We now can get an invocation-owned sender at any moment with GDBus, so
there's no point of getting it as optional return-out value from the
username check function.
2020-11-10 14:45:59 +01:00
9d3f3fcaca device: Use some #define's for polkit supported actions
Avoid repeating the same strings everywhere that might just lead to
errors, use define's instead.
2020-11-10 14:45:59 +01:00
30474a6546 manager: Add GDBus object manager
This is not used right now in all its full possibilities, but will make
devices hotplug support easier to implement and handle at client-side
level.

As per this we can stop doing the manual tracking of the devices.
2020-11-10 14:45:59 +01:00
93bad82540 fprintd: Use GDBus codegen based implementation
Fprintd is dependent on the deprecated dbus-glib, also this doesn't provide
various features we can take advantage of, like the ones for async
authentication mechanism.

So, remove all the dbus-glib dependencies and simplify the code, but without
any further refactor, and keeping everything as it used to work, while this
will give room for further improvements in subsequent commits.

Internally, we just use dbus-codegen to generate the skeletons, and we
use the generated FprintdDBusManager with composition, while we
implement the device skeleton interface in FprintDevice, so that we
don't have to use it as a proxy, and keep being closer to what it used
to be with dbus-glib.

Fixes: #61
2020-11-10 14:45:59 +01:00
e224913b80 Revert "data: Add additional fprintd lockdown"
The current lockdown rules prevent USB devices from being accessed and
cause threading to not work.
As such, revert them until it is clear on how/if we can apply these
measures. It is primarily not clear on how to prevent fork/clone as
fprintd does not need those.

This reverts commit 2fd86624e5.

See: #82
2020-11-10 12:27:38 +00:00
b2cae5cccf tests/fprintd: Check that identification with multiple images works 2020-11-06 11:06:25 +01:00
3419901f65 build: Don't add the utils tests under the daemon suite 2020-11-04 21:06:13 +01:00
c85ca09e35 tests/fprintd-utils: Ensure that we exit with error if we have no device 2020-11-04 21:06:13 +01:00
ecc02cb588 utils: Uniform the no-devices error messages removing duplicated checks
Use error messages to be consistent, and avoid checking for a returned
value when dbus-glib function to fetch it returned false, as it's
implicit that we had a failure.

Otherwise if didn't fail we are sure that we got the requested value.
2020-11-04 21:06:13 +01:00
091f373109 tests/fprintd-utils: Check the tools return values in some tests 2020-11-04 21:06:13 +01:00
f6eb3b3ea5 verify: Pass the "any" finger parameter to the daemon
fprintd supports "any" finger parameter for the VerifyStart call, and it's
up to the daemon to pick the first known if the device doesn't support
identification.

So remove the check to verify utility and add a test to verify this is
respected.
2020-11-04 21:06:13 +01:00
d7ca9e6095 tests/fprintd-utils: Verify happens on first finger if device has no identification
Ensure that this is true when using the utility
2020-11-04 21:06:13 +01:00
6797928884 dbusmock/fprintd: Add ability to add a device with Identification support
Devices which have identification support "any" finger and do not fallback
to a single-finger check.
2020-11-04 21:06:13 +01:00
d6c70be822 dbusmock/fprintd: Add ability to remove devices 2020-11-04 21:06:13 +01:00
d33a7c7e9d tests/fprintd-utils: Check that all fingers are listed 2020-11-04 21:06:13 +01:00
94d3a18dcd tests/fprintd-utils: Check that verify returns an error if no finger is set 2020-11-04 21:06:13 +01:00
5635383c96 tests/fprintd-utils: Check that fprintd-verify requests the expected finger 2020-11-04 21:06:13 +01:00
ac98b881be dbusmock/fprintd: Make possible to retrieve the finger selected for verification
So that we can ensure that the client requested the one we expect
2020-11-04 21:06:13 +01:00
629f7fcc11 dbusmock/fprintd: Reset the current action on release
So it happens in the real daemon
2020-11-04 21:06:13 +01:00
5a703baa20 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
2020-11-04 21:06:10 +01:00
6641cb6da8 tests/fprintd-utils: Verify that we can match all the enrolled fingers 2020-11-04 21:04:21 +01:00
870b48637a tests/fprintd-utils: Verify errors if the device is already claimed 2020-11-04 21:04:21 +01:00
4b0cde81fd tests/fprintd-utils: Add utility function to stop the utility process
This avoids addCleanup ordering errors and also errors when we may try to
print an invalid stdout pipe (like when we have processed it all), as python
might fail with something like:

 ======================================================================
 ERROR: test_fprintd_multiple_verify_fails (__main__.TestFprintdUtilsVerify)
 ----------------------------------------------------------------------
 Traceback (most recent call last):
   File "~/GNOME/fprintd/tests/test_fprintd_utils.py", line 102, in <lambda>
     self.addCleanup(lambda: print(process.stdout.read()))
   File "/usr/lib/python3.8/codecs.py", line 321, in decode
     data = self.buffer + input
 TypeError: can't concat NoneType to bytes
2020-11-04 21:04:21 +01:00
59b3d2af8d tests/fprintd-utils: Call addCleanup actions in reverse order
unittest addCleanup calls are called in reverse order, so we need to reverse
the order of the calls as well, otherwise we won't correctly terminate the
subprocess children
2020-11-04 21:04:21 +01:00
93bcac946e tests/fprintd-utils: Move verification tests to a single class
We can factorize various checks, so let's simplify test code
2020-11-04 21:04:19 +01:00
a5063dc0e4 tests/fprintd-utils: Setup the device on setUp()
No need to repeat the action in every unit test, but move the tests to a
different class to easily allow adding another class with tests with no
such initialization
2020-11-04 20:20:29 +01:00
5fbc38c938 tests/fprintd-utils: Run super setUp/tearDown functions 2020-11-04 20:04:21 +01:00
c42e627ddd pam: Always return translated string from helper
This means that the different functions in the header match as all
functions will return the translted string instead of only one of them.
2020-10-13 09:29:44 +00:00
2fd86624e5 data: Add additional fprintd lockdown 2020-10-13 09:28:39 +00:00
6dc699ae6f tests: Fix test not failing on error
An assertion that is raised within a callback will not be swallowed by
the C code that called the function. To ensure that errors will be
noticable, pass the result back to the surrounding scope and check it
there.
2020-10-02 17:54:20 +02:00
e075d37590 tests: Check that a verify operation can be immediately restarted
This excercises the path where we early-report a result and the
VerifyStop call must wait for the operation to complete intenernally.

Note that this test cannot fail right now due to the FpImageDevice
internal code still trying to hide the deactivation delay internally.

See libfprint!174
2020-10-01 12:19:35 +00:00
18d6a86e9d device: Use early match for reporting verify status
libfprint 1.90.1 supports early match result report which allows to inform
the clients as soon as the driver detected a match/no-match without having
to wait the whole device driver deactivation.

Use this feature in fprintd, by emitting the "VerifyStatus" signal as soon
as we've an usable result we can inform the client about.

As per this, ignore any possible error we may get afterwards, due to device
issues or late user cancellation, as the point of the verification action
(i.e. getting a match/no-match) can be considered accomplished.

Fixes https://gitlab.freedesktop.org/libfprint/fprintd/issues/35
2020-10-01 12:19:35 +00:00
14051cac76 device: Fix race condition when clients vanish
If a client vanishes while we are opening or closing then fprintd would
uncoditionally try to close the device immediately. This should not be
done, it instead needs to wait for the open/close to complete.

Add open/close to the current action enum and keep track of the fact
that they are ongoing. Also check, whether the device has been closed in
the meantime (after the nested mainloop is done).

Fixes: #65
2020-10-01 10:39:05 +00:00
4e47222962 Revert "ci: Work-around meson coverage bug"
This reverts commit c07a63da99.
2020-08-18 12:07:59 +02:00
c07a63da99 ci: Work-around meson coverage bug
See https://github.com/mesonbuild/meson/issues/7437
2020-08-17 16:41:07 +02:00
812a3552a6 build: Fix custom_target meson warning
WARNING: custom_target 'utils_marshal' has more than one output! Using the first one.
2020-08-17 16:14:25 +02:00
ff06a301f0 build: Bump libfprint req 2020-08-17 15:21:27 +02:00
19353c971c build: Add some linefeeds to generated XML files 2020-08-17 15:21:27 +02:00
290e56023f tests: Test more branches in pam verify signal handler 2020-08-17 15:11:08 +02:00
efe92a7c33 pam: Increase severity to error for unknown verify results 2020-05-27 14:15:15 +02:00
a7cf0ae3b2 pam: Fix double free after verification error
The data->result was free'ed both in the loop (before breaking) and
afterwards. As the first case did not set the pointer to NULL, this
could result in a double free.

Fix this by simply removing the free that is in the loop and relying on
the cleanup later on.
2020-05-27 13:38:37 +02:00
ba60533f71 device: Remove unused disconnected flag
We were saving the state of a disconnected device because we used a
workaround to figure it out, but now libfprint would provide us a proper
GError in such case, and so we'd handle it without the need of saving the
state, given it's never used anyways.
2020-05-11 15:11:53 +00:00
fcd2d65490 tests: Add PAM test for hardware failure
This error is supposed to help replicate the problems encountered in:
https://gitlab.freedesktop.org/libfprint/fprintd/-/issues/59
2020-04-07 10:47:35 +02:00
6dd010f05c ci: Add a job running tests built with address sanitizer 2020-04-01 13:58:08 +00:00
714f499ab6 tests: Double the timeouts when testing with address sanitizer 2020-04-01 13:58:08 +00:00
d72c802415 tests/fprintd: Ensure that the daemon doesn't crash or abort
An application terminating because of a signal like SIGSEGV, SIGABRT and
friends, will exit with a signal number that is 128 + $SIGNAL_NUMBER, so
let's ensure that the daemon has not been terminated because of a such error

This makes even more sense with address sanitizer builds, as the daemon
would exit with abort.
2020-04-01 13:58:08 +00:00
184e1bd4d0 build: Support running tests with address sanitizer
Make possible to run tests with address sanitizer to quickly check for
memory errors, although we have to disable the error exit code in case of
leaks because we have some which are due to something else down in the stack
(and LSAN suppression files doesn't allow to define the stack to ignore
as we can in valgrind).

However, we'd abort in case of memory errors anyways, so this still helps
to prevent major problems, while still logging the leaks.

In order to run pam module tests with ASAN we need to manually pass the
library to LD_PRELOAD, as we do for the wrapper.
2020-04-01 13:58:08 +00:00
f401f399a8 pam: Get preloaded libraries paths using compiler
In order to run pam module tests we need to pass the libraries via
LD_PRELOAD, this supports a list of library paths, so use the compiler in
order to find their full paths (with soname) and check their presence.

In order to support linker scripts we need to introduce a workaround.
See meson issue https://github.com/mesonbuild/meson/issues/6880
2020-04-01 13:58:08 +00:00
3dd0018f23 build: Set default CFLAGS using meson's c_args
Meson supports checking for default arguments natively without having to
do this for each one, so just use this feature.

Not doing this will become a warning as per meson 0.52.0 [1].

[1] https://github.com/mesonbuild/meson/pull/5627
2020-03-31 14:26:38 +02:00
90298134a2 tests/fprintd: Add checks for delete enrolled fingers permissions
The test doesn't need any assertion because we're calling DeleteEnrolledFingers
and in case it fails a net.reactivated.Fprint.Error.PermissionDenied error
would be thrown, and thus an exception would be raised at python level, making
the test to fail.
2020-03-27 20:45:59 +01:00
8ff4360750 tests: Add test for STATE_DIRECTORY being multiple paths 2020-03-27 17:05:13 +01:00
fd733e55be file_storage: Handle STATE_DIRECTORY containing multiple paths
As per systemd's documentation:
If multiple directories are set, then in the environment variable the
paths are concatenated with colon (":").

Handle that case by splitting the paths if there's a ":" in the
variable.

Closes: #50
2020-03-27 17:05:06 +01:00
6a1fffae82 tests/fprintd: Fix claim_from_other_client_is_released_when_vanished on CI
test_claim_from_other_client_is_released_when_vanished would fail on
the CI but work on a local system because we wouldn't want long enough
for the "vanished" code path to be taken into account. Add a small
timeout to make sure it works on the CI as well.
2020-03-27 16:57:16 +01:00
47bd3f7fbb tests/fprintd: Fix test_enroll_invalid_storage_dir test
enroll_image() was always waiting for enroll-completed rather than for
what the caller expected as the result.

======================================================================
FAIL: test_enroll_invalid_storage_dir (__main__.FPrintdVirtualDeviceClaimedTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/hadess/Projects/jhbuild/fprintd/tests/fprintd.py", line 661, in test_enroll_invalid_storage_dir
    self.enroll_image('whorl', expected_result='enroll-failed')
  File "/home/hadess/Projects/jhbuild/fprintd/tests/fprintd.py", line 384, in enroll_image
    self.wait_for_result('enroll-completed')
  File "/home/hadess/Projects/jhbuild/fprintd/tests/fprintd.py", line 373, in wait_for_result
    self.assertEqual(self._last_result, expected)
AssertionError: 'enroll-failed' != 'enroll-completed'
- enroll-failed
+ enroll-completed
2020-03-27 16:26:28 +01:00
4f3589c0dc build: List single unit python tests allowing to run them separately
We run a certain number of tests right now, without being able to easily
run them separated or to check which one failed.

So add a script to inspect all the available unittests per each python
script and use it to figure out the tests we can run in meson.

As per this, define a global 'python_tests' variable in meson that allows
to register new python tests easily without having to repeat the settings
for all the tests.

For each test we have, we check if we can fetch a list of unit tests, and
if possible we create a meson test for each one.
Otherwise we just fallback to normal behavior.

This is something that can be hopefully implemented into upstream meson [1].

[1] https://github.com/mesonbuild/meson/issues/6851
2020-03-27 02:29:57 +01:00
eccd790df7 tests/fprintd: Add missing implementation of list_tests
Use unittest_inspector that we provide for meson tests inspection as well
2020-03-27 02:01:14 +01:00
bc29114a2c tests: Add a tool to inspect the single python unit tests
The unit tests files are provided as python files, adding a tool that
allows to list them in order to be able to run them easily via

  python3 -m unittest module.Class.test_method
2020-03-27 01:57:22 +01:00
cf95187268 ci: Update CI after the fdo template changes
The CI definition needs to be updated to work with the new fdo
templates.

Adapted from bd4f118b5e
2020-03-24 15:50:57 +01:00
23c37cd9b5 Revert "ci: Fix CI syntax error"
This reverts commit 01ea517a97.
2020-03-24 15:49:30 +01:00
967e4f24ed Revert "ci: Fix unknown keys in CI"
This reverts commit 10a3e75937.
2020-03-24 15:49:22 +01:00
d7fec03f24 tests/fprintd: Increase allowed timeout
On my laptop it takes 48 seconds to run.
2020-03-23 12:22:53 -04:00
4a3ae5ccaf tests/fprintd: Allow tests to run even when virtual device is not available
The test file calls self.daemon_start() in order to start fprintd and
locate the virtual image device that's needed for the test to run.
However, since the virtual image driver is not available on all
libfprint installations, the test should be skipped if the driver is not
available.

The skipping mechanism used to work, by checking if self.device is None.
This is based on the assumption that self.device would be set to None in
cases where the driver is not available. However, even in the past
self.device is only set to None in the tearDown method and not in setUp,
so presumably in edge cases it didn't entirely work.

However, since 0fb4f3b021 which
consistently removes the self.device attribute rather than setting it to
None, the "self.device is None" check no longer works. In particular,
the following error message is shown:

    test_manager_get_default_device (__main__.FPrintdManagerTests) ...
    Did not find virtual device! Probably libfprint was build without
    the corresponding driver!
    ERROR

After this patch, the following is shown:

    test_manager_get_default_device (__main__.FPrintdManagerTests) ...
    Did not find virtual device! Probably libfprint was build without
    the corresponding driver!
    skipped 'Need virtual_image device to run the test'

We fix this bug by consistently setting self.device to None, in both the
setUp method before daemon_start gets called, and in tearDown. We also
make the same change to self.manager for consistency.

The issue was not caught on CI, as the CI configuration always installs
a libfprint version that has the virtual_image device explicitly enabled
in the preparation phase.
2020-03-23 12:22:20 -04:00
e828ea3b2d main: Add missing locale.h include
The include is present in all other binaries in utils/.
2020-03-19 23:33:58 -04:00
d27872ff86 test_fprintd_utils: Don't use hard-coded sleep time
Make sleep time on verification dependent on the environment, so that it's
different when under valgrind
2020-03-17 17:14:35 +01:00
cfbded36e1 test_fprintd_utils: Use a non-blocking pipe to read output
Avoid using a temporary file for reading the utilities output, so we can
read it as it comes, ignoring the previous one, and avoiding open/closing
the file.

To keep the output printing on cleanup working, adding an utility function
that reads the output and save it for later printing
2020-03-17 17:14:35 +01:00
072fbc2b46 tests_fprintd_utils: Print the process output when done
This is particularly useful when using valgrind or address sanitizer to read
the output log
2020-03-17 17:14:35 +01:00
7846359b65 test_fprintd_utils: De-duplicate utilities launching
Avoid repeating the same operation to launch the utilities all the times,
but provide instead a function that allows to start a process and saves its
output without having to handle this in every test.

Simplify the operation when we just want the final output, still reusing
the same code.
2020-03-17 17:14:35 +01:00
08339a0648 tests/fprintd: Skip some tests in CI depending on permissions 2020-03-17 17:14:35 +01:00
3dd10b4b37 tests/fprind: Check that device is released when Caller operation is done
Add support to run fprintd-utils to test fprint daemon, and ensure that a
device is released and its operation cancelled once a caller goes away.

Related to https://gitlab.freedesktop.org/libfprint/fprintd/issues/37
2020-03-17 17:14:35 +01:00
bee2e154b1 tests/fprintd: Ensure that other clients can't interfere with claimer 2020-03-17 17:14:35 +01:00
27f0b64d03 tests/fprintd: Add tests for verification through finger id 2020-03-17 17:14:35 +01:00
f4ee2f86a3 device: Throw NoEnrolledPrints on missing finger in gallery
Throw a NoEnrolledPrints error if the requested finger isn't present
in the gallery.
2020-03-17 17:14:35 +01:00
04829ed39f tests/fprintd: Check that we can't mix Enroll and Verify operations 2020-03-17 17:14:35 +01:00
756a80a63e tests/fprintd: Ensure we throw NoActionInProgress on *Stop() 2020-03-17 17:14:35 +01:00
b861500a9f device: Throw AlreadyInUse error if stopping an enroll during verification
When starting an enroll when verification is in progress (and vice-versa) we
emit an AlreadyInUse error, however when calling VerifyStop() during an
enrollment (and vice-versa) we just return a NoActionInProgress error, which
is not the case.

So let's be consistent and change the error type.
2020-03-17 17:14:33 +01:00
154d0c0373 device: Use proper function name in debug 2020-03-17 17:10:17 +01:00
b2cdc1ed1e tests/fprint: Check current API user permissions 2020-03-17 17:10:17 +01:00
ab47e03f05 tests/fprintd: Ensure device open is correctly handled 2020-03-17 17:10:17 +01:00
f92801a15c tests/fprintd: Ensure that verify fails on storage read failure 2020-03-17 17:10:17 +01:00
086ceb98ab tests/fprintd: Ensure enroll fails on storage save failure 2020-03-17 17:10:17 +01:00
8bdbc7e2b0 tests/fprintd: Ensure that we can't verify without enrolled fingers 2020-03-17 17:10:17 +01:00
1f8bb1abd4 tests/fprintd: Ensure that devices are available on name appeared
Given we don't support adding devices after we created the manager (yet) we
must ensure that once the name appeared we have them all
2020-03-17 17:10:17 +01:00
47d55a97c4 tests/fprintd: Add tests for Manager methods 2020-03-17 17:10:17 +01:00
657b90a066 tests/fprintd: Move assertFprintError to FPrintdTest
This may be used by any class inheriting FPrintdTest, so let's move it at
lower level.
2020-03-17 17:10:17 +01:00
3821b96ca5 tests/fprintd: Only enable 'virtual_image' driver
When we run tests in a system with real devices, we may try to initialize
the real ones, while we can just ignore them all in tests.

We do it in setUp instead of setUpClass to allow tests to change this if
they need to, but just for temporary.
2020-03-17 17:10:17 +01:00
22ad9b5ae8 tests/fprintd: Check all the error types during verify/enroll
Ensure that we properly handle all the errors that a driver may return us
2020-03-17 17:10:17 +01:00
2ddc8a86a2 tests/fprind: Add verify retry tests for all the cases
The tests are repeated for both verify and identify actions
2020-03-17 17:10:17 +01:00
930cae4647 tests/fprind: Add enroll retry tests for all the cases 2020-03-17 17:10:17 +01:00
5e9624bef5 device: Fix verify-disconnected state name
Respect protocol, and use proper name
2020-03-17 17:10:17 +01:00
efac52d94f device: Fix retry enroll error names
Use proper names for enroll retry errors, fixing a copy/paste error from the
verify code.
2020-03-17 17:10:17 +01:00
af18aa35e5 tests/fprintd: Add tests to verify permissions on prints management 2020-03-17 17:10:16 +01:00
0d7a703200 tests/fprintd: Split claimed device tests to a single class
Avoid doing fo reach test the Claim/Release procedure manually if it is just
a prerequisite for the test.
2020-03-17 17:09:19 +01:00
ad19c49e2e tests/fprintd: Move tests which need a claimed device 2020-03-17 17:09:19 +01:00
a8de1003a4 tests/fprintd: Use addCleanup to always terminate daemons
Ensure that the daemons are always terminated after each test, even on
failure, so that we don't have to do hacks such as always trying to stop
them
2020-03-17 17:09:19 +01:00
cefe939141 tests/fprintd: Use addCleanup to ensure we remove the test dir 2020-03-17 17:09:19 +01:00
24cd986476 tests/fprintd: Use GTestDBus unset to undefine envs
Unset the dbus environment that may affect the dbus tests using GTestDBus
utility, instead of doing it manually.
2020-03-17 17:09:19 +01:00
06480c7994 tests/fprintd: Use a new bus for each test unit
When creating a new unit we used to get the system bus via Gio.bus_get_sync,
however this has a singleton implementation, and so would always return the
same connection, creating issues in tests when a new test suite is added
because the newly got connection would be already closed.

So, just manually create a new bus connection, also close the bus and
cleanup the test bus in dbus.
2020-03-17 17:09:19 +01:00
b2ad590891 tests/fprintd: Call the super class on setup 2020-03-17 17:09:19 +01:00
85aad7bb01 tests/fprintd: Remove usage of never-used self.client variable 2020-03-17 17:09:19 +01:00
0fb4f3b021 tests/fprintd: Cleanup the client proxies on tearDown
Ensure we nullify them when the test is done.
2020-03-17 17:09:19 +01:00
21564885ea tests/fprintd: Do the parent tearDown after we've done our stuff 2020-03-17 17:09:19 +01:00
6064e30200 tests/fprintd: Remove the force-exit timeout
Since we rely on meson now to do this, we don't need to have manual
management of the timeout
2020-03-17 17:09:19 +01:00
fd8297306c tests/fprintd: Ensure that we get an error on early release
Ensure that we get an error when releasing a device that is in process of
enrollment, verification or identification
2020-03-17 17:09:19 +01:00
e7f804e9fc device: Cancel the ongoing operation when releasing the device
If a device is currently verifying, identifying or enrolling we may want the
user to stop the operation before we actually release the device.

Otherwise we may end-up in trying to close (failing) the internal device,
while fprintd is still considering the device active, causing a dead-lock
(the device can't be released, but neither claimed again or stop the current
action).

In fact calling Claim() -> EnrollStart() -> Release(), we would fail with
the error

  net.reactivated.Fprint.Error.Internal:
  Release failed with error: The device is still busy with another
  operation, please try again later. (36)"

However, if we try to call VerifyStop, after this error, we'd fail because
for the fprintd logic, the device is not claimed anymore, but actually
closed, and we'd need to claim it again, but... That would still cause an
internal error.

To avoid this, in case Relase() is called cancel the ongoing operation,
and wait until it's done before completing the release call.
2020-03-17 17:09:19 +01:00
0e993d92e2 device: Return 'verify-no-match' on cancelled verification
We were returning a 'verify-unknown-error' while we actually know what
happened, so better to return a soft operation failure.
2020-03-17 17:09:19 +01:00
b312a5e540 device: Return 'enroll-failed' on cancelled enrollment
We were returning an 'enroll-unknown-error' while we actually know what
happened, so better to return a soft operation failure.
2020-03-17 17:09:19 +01:00
c12778ec5b tests/fprintd: Verify that each enroll stage happens
Instead of automatically replying with the 'whorl' image for every enroll
state signal with result 'enroll-stage-passed', only perform the number
of required enroll stages and ensure that we get the expected results.

This also will allow to manually perform enroll steps in other tests.
2020-03-17 17:09:19 +01:00
dbabd4d7d3 tests/fprintd: Deduplicate enrollment code 2020-03-17 15:54:14 +01:00
db1865eb3e tests/fprintd: Deduplicate result wait code 2020-03-17 15:49:40 +01:00
10a3e75937 ci: Fix unknown keys in CI
Fix:
root config contains unknown keys: container_fedora_build
2020-03-17 15:31:08 +01:00
01ea517a97 ci: Fix CI syntax error
Fix CI syntax error:
container_fedora_build: unknown keys in `extends` (.fedora@container-build)
Caused by changes in the wayland CI templates:
4a73f030d0
2020-03-17 15:29:37 +01:00
3a98ef646b ci: Re-enable stable branch
Now that libfprint v2 has landed in rawhide.
2020-02-19 13:07:27 +01:00
750a815fdf ci: Use extends to repeat libfprint builds
This syntax is just nicer and more maintainable than the YAML anchors
2020-02-18 14:08:32 +01:00
53fcf52989 ci: Factorize the similar parameters in build jobs 2020-02-18 14:06:32 +01:00
52e12459df main: Improve comments on fprint manager creation
Explain why the manager creation is async better in both in the main file
and in the manager itself
2020-02-14 16:01:01 +01:00
554df2a8d9 utils: Fix memory leak when error is ignored in list
If we get a `NoEnrolledPrints` error while list, we don't consider it an
hard error and in such case we proceed to releasing the device, but without
clearing the previously set error first.
2020-02-14 16:00:20 +01:00
681bd1ed2a device: Fix leaked matched print on identify
When starting an identify operation we allocate a gallery of prints from the
gallery, although if we match one of them we get that back in the finish
callback but with a further reference added.

So, in order to clean it up, use an auto-pointer or we'd end up in leaking
it, and the address sanitizer was catching this in our tests already:

  Indirect leak of 12020 byte(s) in 5 object(s) allocated from:
    #0 0x7fe8bc638ce6 in calloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10dce6)
    #1 0x7fe8bc37ffd0 in g_malloc0 ../../glib/glib/gmem.c:132
    #2 0x55d100635c01 in load_from_file ../src/file_storage.c:159
    #3 0x55d100635c01 in file_storage_print_data_load ../src/file_storage.c:182
    #4 0x55d10063e950 in fprint_device_verify_start ../src/device.c:882
    #5 0x55d10064036b in dbus_glib_marshal_fprint_device_VOID__STRING_POINTER src/device-dbus-glue.h:96
    #6 0x7fe8bc50f6f5  (/usr/lib/x86_64-linux-gnu/libdbus-glib-1.so.2+0xd6f5)
2020-02-14 15:55:09 +01:00
8890732194 device: Don't leak the user on claim error while deleting prints
When using the delete method we check if the device was claimed, if this
fails because the device is already in use we return an error, but we don't
free the user.

While this could be fixed by just a further g_free call, let's just remove
remove the other manual free calls, and use an auto-pointer instead for this
function.
2020-02-14 15:55:09 +01:00
7dac81dcad device: Use g_clear_error instead of doing the same manually
We've now an utility function that can help us to free and unset an error
double pointer, so let's use it.
2020-02-14 15:55:09 +01:00
1ecae1d014 delete: Clear the error in case we ignore it
If we get a `NoEnrolledPrints` error during delete, we don't consider it an
hard error and in such case we proceed to releasing the device, but without
clearing the previously set error first.
2020-02-14 15:55:09 +01:00
ba7a45d3f8 device: Always free error in delete enrolled fingers2
During delete enrolled fingers2 call, if the check-claimed control fails, we
would return the error without freeing it.

While this could be fixed by just a further g_error_free call, let's just
remove the other manual free call, and use an auto-pointer instead for this
function.
2020-02-14 15:55:09 +01:00
49dced5566 device: Always free error in delete enrolled fingers
During delete enrolled fingers call, if the check-claimed control fails, and
we get an error different from FPRINT_ERROR_CLAIM_DEVICE, we would return
the error without freeing it.

While this could be fixed by just a further g_error_free call, let's just
remove all the manual free calls, and use an auto-pointer instead for this
function.
2020-02-14 15:55:09 +01:00
e25544a8f0 manager: Remove unused path variable 2020-02-14 15:55:09 +01:00
ee8589ec9d main: Ensure we always free context, loop and error
In case of early return we may not free them consistently, while this is not
a big problem in a main function, is better to have a cleaner management,
and we did get valgrind reports.
2020-02-14 15:55:09 +01:00
580cceb50e 1.90.1 2020-02-10 14:59:42 +01:00
b90b21f26b build: Make pam module installation dir configurable
And avoid treating "libdir" as an absolute path, the documentation
clearly states that it is "relative to the prefix".

Based on patch by Timothy Gu <timothygu99@gmail.com>
2020-02-10 14:49:11 +01:00
6d583cb5d8 ci: List dependencies on separate lines
This improves readability of additions and removals.
2020-02-07 17:23:40 +01:00
c776068cd2 ci: Build a docker image with dependencies and use it
Include the wayland ci-templates to be able to easily generate an image
2020-02-07 17:23:32 +01:00
b8d80fcb35 ci: Include libfprint templates to sync with its dependencies
Use libfprint templates in order to get its dependencies without having to
manually keep a list of them in sync
2020-02-06 22:07:27 +01:00
32c2ccdd8c ci: Print coverage data once available so that gitlab can parse it 2020-02-06 11:30:23 +00:00
58784f7002 doc: Fix gtk-doc generation
Closes: #44
2020-02-06 12:21:51 +01:00
f295e6c571 ci: Test gtk-doc build 2020-02-06 12:08:04 +01:00
b02825620a Revert "build: Ensure that gcov symbols are exposed when needed"
This reverts commit 526b2e8c53.

Commit 0994cc31 was enough to implement the coverage support.
2020-02-05 17:09:19 +01:00
2327307b81 build: Rename config.h template
Now that it won't clash with the autotools version.
2020-02-05 17:07:10 +01:00
7c1ae363a8 build: Remove ChangeLog
It's empty and was only there to satisfy the autotools.
2020-02-05 17:05:32 +01:00
a18af36a03 build: Remove INSTALL file
It was an autotools file, and doesn't contain useful information
anymore.
2020-02-05 17:05:08 +01:00
526b2e8c53 build: Ensure that gcov symbols are exposed when needed
When coverage is enabled, we need to expose the __gcov_* symbols in the
binaries and libraries or we won't get any coverage report for them.
2020-02-05 16:54:54 +01:00
73625233f6 build: Remove autotools support 2020-02-05 16:54:54 +01:00
08de7e33a4 ci: Rename jobs to remove meson from the names 2020-02-05 16:45:57 +01:00
c871dfc998 ci: Remove autotools targets 2020-02-05 16:45:57 +01:00
dccc5796b6 ci: Enable coverage reports in test build 2020-02-05 16:45:57 +01:00
0994cc314e main: Ensure that a gcov flush happens on SIGTERM
When coverage is enabled fprintd test won't generate any .gcda file and so
apparently no data, this happens because gcov doesn't handle properly the
process termination when SIGTERM is used, and so when in fprintd.py we
terminate the process no coverage data is reported.

To avoid this, quit the main loop cleanly on SIGTERM, so that we will exit
from the main function cleanly, making libc to perform a gcov flush when we
exit the program.
2020-02-05 16:45:57 +01:00
09b1f1f1db ci: Compile with --werror in build_dev 2020-02-05 15:25:35 +01:00
e10417a907 verify: Constify username
utils/verify.c:191:12: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
191 |   username = "";
    |            ^
2020-02-05 15:25:35 +01:00
8f75563920 enroll: Fix usernames memory leak
usernames was not freed on exit.
2020-02-05 15:25:35 +01:00
2e00c7a4b1 enroll: Always use allocated memory for finger name
Given that finger_name is set by GOptionEntry, make sure it's always
using allocated memory.

../utils/enroll.c:38:28: error: initialization discards ‘const’ qualifier
  from pointer target type [-Werror=discarded-qualifiers]
38 | static char *finger_name = "right-index-finger";
   |                            ^~~~~~~~~~~~~~~~~~~~
2020-02-05 15:25:35 +01:00
72d8a0f512 build: Enable -Werror on redundant declarations
Now that we've fixed our own errors.
2020-02-05 15:25:35 +01:00
130d6cdb63 main: Move fprintd_dbus_conn declaration to main.c
There's no need to declare it as extern in the header as it is already
declared in the source files where it's used.

Fixes:
../src/device.c:51:25: error: redundant redeclaration of ‘fprintd_dbus_conn’ [-Werror=redundant-decls]
  51 | extern DBusGConnection *fprintd_dbus_conn;
     |                         ^~~~~~~~~~~~~~~~~
In file included from ../src/device.c:34:
../src/fprintd.h:29:25: note: previous declaration of ‘fprintd_dbus_conn’ was here
  29 | extern DBusGConnection *fprintd_dbus_conn;
     |                         ^~~~~~~~~~~~~~~~~
2020-02-05 15:25:35 +01:00
e2fd52190a main: Fix "function declaration isn't a prototype" warning
../src/file_storage.c:47:20: warning: function declaration isn’t a prototype [-Wstrict-prototypes]
47 | static const char *get_storage_path()
   |                    ^~~~~~~~~~~~~~~~
../src/file_storage.c: In function ‘get_storage_path’:
../src/file_storage.c:47:20: warning: old-style function definition [-Wold-style-definition]
../src/file_storage.c: In function ‘file_storage_discover_users’:
../src/file_storage.c:270:9: warning: old-style function definition [-Wold-style-definition]
270 | GSList *file_storage_discover_users()
    |         ^~~~~~~~~~~~~~~~
2020-02-05 15:25:35 +01:00
7d8450e5ab device: Mark fingers names array as const and use unique name
With the stronger warnings enabled when building with meson, we get a
warning for all the fingers definitions:

  ../src/device.c:38:24: warning: initialization discards ‘const’ qualifier
  from pointer target type [-Wdiscarded-qualifiers]
    38 |  [FP_FINGER_UNKNOWN] = "unknown",

As the `fingers` array name was shadowed in another file:

  ../src/device.c:1000:11: warning: declaration of ‘fingers’ shadows a
  global declaration [-Wshadow]
    1000 |   GSList *fingers, *finger;
2020-02-05 15:25:35 +01:00
95e95d2910 main: Fix "function declaration isn't a prototype" warning 2020-02-05 15:25:35 +01:00
75aeff4acd tests: Increase debugging level for PAM tests 2020-02-05 15:25:35 +01:00
bebd3d2a98 tests: Increase debugging for daemon tests 2020-02-05 15:25:35 +01:00
0e2bf7e804 build: Check translations using a script
Use a bash script to check the translations as we used to do during
the autotools-based distcheck.
2020-02-05 15:25:35 +01:00
f5a2c21f90 build: Add configuration recap message for meson 2020-02-05 15:25:35 +01:00
53d80c1474 build: Use gettext to translate policy file with meson
Recent versions of gettext can merge translations in xml files,
so use it and remove the intltool dependency for meson builds.
2020-02-05 15:25:35 +01:00
9bed3bed3f ci: Add jobs to build and run tests using meson 2020-02-05 15:25:35 +01:00
1a094c1a09 ci: Use a template to avoid repeating the libfprint-dev installation 2020-02-05 15:25:35 +01:00
4ed46deaf2 build: Add script to update translations 2020-02-05 15:25:35 +01:00
0724413eda README: Clean up transifex README 2020-02-05 15:25:35 +01:00
eb6dbb6953 build: Add meson build system
Reuse the generated dbus interface .xml files from fprintd to avoid
unnecessary copies.
2020-02-05 15:25:35 +01:00
5c5849dca7 build: Don't hardcode libtool specific build path
Don't hardcode the libtool specific build path in the configuration
file, but in the build declaration instead.
2020-02-05 13:43:27 +01:00
048181ae7f test_fprintd_utils: Support running under valgrind
Like for the fprintd test, run the tests under valgrind if the `VALGRIND`
environment variable is set, and use the contents of the variable as the
path to the suppression file.
2020-02-04 15:39:01 +01:00
8e3345a60f tests: Fix num-enroll-stages signature in dbusmock template
It's marked as a signed integer, not an unsigned one in the API.
2020-02-04 15:38:17 +01:00
33a21b5089 tests/fprintd: Test error conditions on Claim()/Release() 2020-02-04 15:36:06 +01:00
dd006382f5 tests/fprintd: Test ListEnrolledFingers() method 2020-02-04 15:33:09 +01:00
a34432ccf9 tests/fprintd: Add assertFprintError to check errors 2020-02-04 15:28:57 +01:00
f2804921a3 tests/fprintd: Use unittest assertions more often 2020-02-04 15:27:24 +01:00
74577a6806 tests/fprintd: Add a FPrintdVirtualDeviceTest to avoid repeating setup 2020-02-04 15:21:50 +01:00
2076025208 device: Use session data for context, sender and user
Use the device session data to store all the informations we care about
while a device is claimed, and make its cleanup easier.

Keep just one instance of the current context, given we use it only during
claim and release, and those are mutually exclusive operations.
2020-02-04 14:54:20 +01:00
77126ccf1f device: Remove unused storage_type variable 2020-02-04 14:40:17 +01:00
46b7d7c1a7 device: Clear username on open failure 2020-02-04 14:36:39 +01:00
791a208afd device: Clear session, sender and username on close failure 2020-02-04 14:31:51 +01:00
b832002c97 device: Use malloc-allocated SessionData
Allocate SessionData using g_malloc(). There are no benefits to using
GSlice for a seldom used structure. This also allows use to use
g_clear_pointer() to free the struct.
2020-02-04 14:30:10 +01:00
8a2f276003 device: Cleanup session_data on open failure 2020-02-04 14:25:00 +01:00
aab923e3cd device: Fix memory leak on object destruction
Add the missing chain-up on finalize().
2020-02-04 14:22:01 +01:00
cc4bac3410 main: Use G_DECLARE_FINAL_TYPE to define objet 2020-02-04 14:19:41 +01:00
18d4aa6d7d pam: Use systemd to check whether a session is remote
Closes: #3
2020-02-04 14:01:29 +01:00
046ec8dbf4 pam: Split off remote session code 2020-02-04 14:01:29 +01:00
874b4556ef pam: Remove unneeded assignments
Don't use return messages for D-Bus calls when we're not interested in
those return values.
2020-02-04 14:01:29 +01:00
c2aa5c0b9a pam: Fix possible memory leak
If we exited early from the loop, we need to make sure to free() this
struct member.
2020-02-04 13:48:25 +01:00
f745c49112 pam: Fix PAM authentication when it's the last try
We need to make sure that the max_tries variable isn't decremented
further when we have success in the verification loop. Add missing break
to do that.

Fixes: affffaf134
Closes: #40
2020-02-04 13:48:00 +01:00
319d859107 tests: Add PAM test that succeeds on last try
Exhaust all the tries (minus 1) before having a match on the last try.
This should not throw a warning.
2020-02-04 13:35:48 +01:00
b97903f781 data: Update built man pages
As used in the dist tarball.
2020-01-24 17:03:43 +01:00
a30697a28d data: Add pam_fprintd man page
Closes: #24
2020-01-24 17:03:43 +01:00
aad3212d22 data: Update links to other man pages 2020-01-24 17:03:43 +01:00
3624bcb114 data: Fix copy/paste error in fprintd-verify's man page 2020-01-24 17:03:43 +01:00
8fbc59a258 pam: Allow unloading libs that pam_fprintd is linked to
Remove "nodelete" linker flag now that we use sd-bus and not dbus-glib,
so that libraries that pam_fprintd links to can be unloaded.

This was added because GLib's type system expects to be initialised
once and only once per process, and re-loading this type system when it
had already been initialised caused crashes.
2020-01-24 17:03:43 +01:00
5a8da0022a tests: Make warnings fatal in PAM tests
This will catch problems with GLib being unloaded when the PAM module is
unloaded, which would have crashed when using dbus-glib.

This serves as a test for https://gitlab.freedesktop.org/libfprint/fprintd/issues/2

Closes: #2
2020-01-24 17:03:32 +01:00
6089ba6f40 pam: Better debug when timeout is invalid 2020-01-24 00:51:13 +01:00
ee6e8a6fa3 pam: Better debug when max_tries option is invalid 2020-01-24 00:51:13 +01:00
42f5280a03 pam: Better debug arguments support
Support debug=[on|off|true|false|1|0] as an option in addition to
"debug".
2020-01-24 00:51:13 +01:00
affffaf134 pam: Return PAM_MAXTRIES after too many tries 2020-01-24 00:51:13 +01:00
6ab270fb1a tests: Reduce the default timeout in tests 2020-01-24 00:51:13 +01:00
2d0bed6b13 tests: Add PAM timeout test 2020-01-24 00:51:13 +01:00
c43134e36f tests: Add PAM test with 2 readers 2020-01-24 00:51:13 +01:00
b9d23ddb87 tests: Fix dbusmock template when adding > 1 reader 2020-01-24 00:51:13 +01:00
205dedae4f tests: Add dbus-monitor'ing to PAM tests
Should prove useful debugging the PAM module if we need it.
2020-01-24 00:51:13 +01:00
d70f15b5e8 pam: Port to sd-bus
This pam plugin never used GDBus because it transparently uses threads
which do not work well with a lot of PAM applications. But even settling
on the "still better to use than plain dbus library" dbus-glib wasn't
without problems, as any use or initialisation of GIO sockets would
modify signal handler for signals such as SIGPIPE (see gio/gsocket.c).

Many years later, sd-bus is a more modern alternative to the bare dbus
library with a better API.

This includes:
- Removing use of gboolean, guint, g_new0() and many glib string helpers
- Simplifying debug logging
- Marking user-facing messages to be translated
2020-01-24 00:51:13 +01:00
6f63beb1fc pam: Add str_has_prefix() helper
To simplify the options parsing.
2020-01-23 18:45:43 +01:00
f7557c6ee7 pam: Add monotonic clock helper 2020-01-23 18:45:43 +01:00
0b598965b0 pam: Remove GLib usage from copy/paste header 2020-01-23 18:45:43 +01:00
8325d347d6 pam: Add str_equal() helper to copy/paste header 2020-01-23 18:45:43 +01:00
0bdf801043 pam: Add helper to replace G_GNUC_UNUSED to copy/paste header 2020-01-23 18:45:43 +01:00
6e3b053372 pam: Add include for bool to copy/paste header 2020-01-23 18:45:43 +01:00
c6e72c5f28 pam: Add include for asprintf to copy/paste header 2020-01-23 18:45:43 +01:00
986a42bcd1 pam: Update copyright notice 2020-01-23 18:45:43 +01:00
0c6bab8640 main: Fix redeclaration linking error
Fix linking error as the "store" global variable gets redeclared in
each C file that includes the header. Move the actual declaration to
main.c.

Fixes:
 /usr/bin/ld: ./.libs/libfprintd.a(device.o):/builds/libfprint/fprintd/src/storage.h:51: multiple definition of `store'; main.o:/builds/libfprint/fprintd/src/storage.h:51: first defined here
2020-01-23 18:25:25 +01:00
b99afd19f0 main: Use #pragma once 2020-01-23 18:25:18 +01:00
3d6dfabd8d Revert "ci: Temporarily add newer pam_wrapper build"
This reverts commit db0ab55bef.
2020-01-23 18:25:14 +01:00
67adcb59ed configure.ac: Depend on libfprint-2
libfprint changed SONAME to completely break with previous version, so
update fprintd dependency accordingly.
2020-01-23 18:24:53 +01:00
db0ab55bef ci: Temporarily add newer pam_wrapper build
So that the test suite can pass.
2020-01-22 15:34:02 +01:00
00b79d1a2f tests: Add test for the PAM module
Test the PAM module using pam_wrapper and our mock fprintd.

See https://lwn.net/Articles/671094/

Note that this requires a version of pam_wrapper with this bug fixed:
https://bugzilla.samba.org/show_bug.cgi?id=14245
2020-01-22 15:34:02 +01:00
f1517af09a tests: Add fprintd-verify test that uses scripting 2020-01-20 17:31:46 +01:00
c0bf1515fd tests: Check that verify test doesn't succeed early 2020-01-20 17:31:08 +01:00
872089883c tests: Add scripting capabilities to the verification process
Add scripting capabilities to the verification process so that the mock
daemon can send its own results without needing the client to prod it to
do that. This is incredibly useful when the client is single threaded
and blocking.

Note that there are barely any safeguards, so the scripting task is not
cancelled if an error occurs, or the VerifyStatus signals are sent out
of order.
2020-01-20 17:26:24 +01:00
431755becd tests: Add test for fprintd utils 2020-01-17 15:32:22 +01:00
0a42b90390 tests: Add dbusmock template for fprintd daemon 2020-01-17 15:18:43 +01:00
cd3ed2e450 device: Fix documentation for ERROR_INVALID_FINGERNAME 2020-01-17 14:41:22 +01:00
c929d39df1 device: Fix "enrollemnt" typo 2020-01-17 14:40:36 +01:00
1a5ef6c5a7 build: Add separate dependency for pam module 2020-01-14 15:52:21 +01:00
ce3406b20f main: Fix typos in comments 2020-01-14 14:00:56 +01:00
0d407db171 manager: Fix typo in comment 2020-01-14 14:00:56 +01:00
4eb751a218 data: Fix typos in man pages 2020-01-14 14:00:56 +01:00
0f44267ea1 README.transifex: Fix typo 2020-01-14 14:00:56 +01:00
9baea4494b device: Replace deprecated g_type_class_add_private() 2020-01-14 14:00:56 +01:00
41afbd1ced device: Simplify FprintDevicePrivate declaration 2020-01-14 14:00:56 +01:00
f2d6921b74 manager: Replace deprecated g_type_class_add_private() 2020-01-14 14:00:56 +01:00
b690daa95f all: Call setlocale() at the start of main()
This fixes some broken characters in the fprintd debug output.
2020-01-14 13:51:46 +01:00
deb3c25e51 device: Adjust to new libfprint API for early match reporting
This API was added to libfprint to allow drivers to report the match
result early before the operation has been completed. No driver makes
use of this facility yet and instead drivers try to finish the
operation early for quick result reporting. This primarily means not
waiting for finger removal.

Once drivers are updated, fprintd reactivity will regress unless the
early match callback is implemented as they would only get an operation
finished callback when the whole of the operation was finished,
including finger removal and finishing up USB communications.

See: https://gitlab.freedesktop.org/libfprint/fprintd/issues/35
2020-01-14 13:41:57 +01:00
a520896325 device: Use FP_FINGER_IS_VALID to check finger number 2019-12-19 14:29:04 +01:00
707ed01059 file_storage: Remove definition of FP_FINGER_IS_VALID
This is now provided by libfprint
2019-12-19 14:28:35 +01:00
6903c36157 file-storage: Use first/last fingers references instead of named ones
Don't depend in the hardcoded libfprint fingers order, but use instead the
aliases for first/last fingers in libfprint order
2019-12-18 17:34:04 +01:00
d0df422f9b all: Bump required glib version
Require the same version of glib as libfprint, and remove support for
very old versions.
2019-12-18 17:03:37 +01:00
882740f8a1 utils: Use new print deletion API
Use the new API that works by claiming the device and then deleting the
prints.

Fixes: #26
2019-12-05 17:54:21 +01:00
5043ef3c7d device: Print warnings for fatal errors 2019-12-04 17:03:53 +01:00
cdd79a0935 ci: Remove libfprint dependencies that are not needed
The dependency list of libfprint used to be a direct copy of the
libfprint CI list. However, many of the dependencies are not needed as
only a minimal version of libfprint is built for testing purposes.
2019-12-03 17:08:04 +01:00
776b4f4cec device: Log offending API user if DeleteEnrolledFinger is used
When the DeleteEnrolledFinger API is used, log an additional warning
with the command that made the call.
2019-12-03 17:08:04 +01:00
31bfd1b055 ci: Run make check in the test stage 2019-12-03 17:08:04 +01:00
74838f9efc tests: Add basic integration test
This test uses the virtual image driver included in libfprint for
testing.
2019-12-03 17:08:04 +01:00
54ba81191e tests: Add test prints from libfprint
These can be freely redistributed as they are in the public domain. See
the included README.
2019-12-03 17:08:03 +01:00
521ba9b124 storage: Use $STATE_DIRECTORY when available
The state directory will generally be the same as the hardcoded one.
However, being able to override it is important for testing purposes, so
add the option.
2019-12-03 17:08:03 +01:00
3db69c2c2f utils: Move test binaries into utils
These utilities are generally useful beyond only testing purproses. And,
since it is desirable to have automated tests inside the tests
subdirecty, it makes sense to move them elsewhere.
2019-12-03 17:08:03 +01:00
b2ff316e20 device: Add new API and fallback to delete prints from device
Some devices require storing the print on the device, to support this,
try deleting prints from the device before deleting them from local
storage.

To handle these devices, add a new API that requires the device to be
claimed rather than allowing deletion without claiming the device first.
Also add appropriate fallbacks so that the old API will continue to
work, but warn about its use.
2019-12-03 17:08:03 +01:00
94f54c0638 main: Register the common name after initializing the manager
When creating the FprintManager object the devices will be enumerated.
This operation calls the mainloop recursively. We do not want to receive
any client requests before the initial enumeration has happened. Because
of this, move the registration of the common name to happen after the
enumeration has finished.
2019-12-03 17:08:03 +01:00
9c8d062669 device: Handle full device storage including garbage collection
The new libfprint version has support for devices that store data on the
sensor. In that case, the on-sensor storage might fill up when the user
tries to enroll a new print.

The strategy introduced here to handle this is to try and delete prints
from the device that we do not know about (assuming, it is e.g. from an
old installation and unusable).

It can also happen that we are not able to garbage collect old prints.
If that happens, a new error code "enroll-data-full" will be returned
signalling the situation to the enrolling application.
2019-12-03 17:08:03 +01:00
ca482036c7 storage: Add function to discover users that have prints
For sensors with internal storage we may want to garbage collect prints.
Adding this API means we can list all local prints, allowing us to find
out whether there are prints on the device's storage with no
corresponding print on the host.
2019-12-03 17:08:03 +01:00
d7821aa790 Initial port to libfprint2 2019-12-03 17:08:03 +01:00
16cb1a8ec6 device: Use g_clear_pointer in places
Replace some g_free calls with subsequent NULL setting with
g_clear_pointer.
2019-12-02 16:20:01 +01:00
31ba9ebea4 ci: libfprint master is now version two
libfprint master contains version 2 of the library now. This means we
need to add dependencies and change some other things a bit.
2019-12-02 16:19:55 +01:00
8893c2f906 ci: Build against libfprint-1-0
The libfprint master branch will soon contain the v2 API. So change to
use the libfprint-1-0 which will mean that the CI will continue to work.

Note that the build_stable target will need to be removed when the new
libfprint version reaches fedora rawhide.
2019-10-07 16:39:25 +02:00
3520cb56d1 build: Move D-Bus conf file to $(datadir)/dbus-1/system.d
Since D-Bus 1.9.18 configuration files installed by third-party should
go in share/dbus-1/system.d. The old location is for sysadmin overrides.
2019-09-16 11:43:51 -04:00
96444b4156 pam: Fix rhost string length check 2019-08-13 14:16:32 +02:00
c0ba475fbf 0.9.0 2019-08-08 15:18:00 +02:00
704c19b87a device: Restart verification if error is "retry"
fprintd's API docs say that "retry" errors for verification
"the verification is still ongoing" and that "[the] user should retry
scanning their finger.

Unfortunately, retry errors are fatal in libfprint. Make fprintd restart
operations when "retry" is the error for either identification or
verification purposes.

We need to also make sure that a "*Stop" D-Bus call will return as
normal if called while we're stopping a verification or identification
in order to restart it.

Closes: #22
2019-08-08 13:12:28 +00:00
8f90390c6b pam: Fix rhost check when rhost is unavailable
Don't exit early if the rhost field isn't filled in, as it usually isn't
for a lot of services.

Fixes: 3274a31
2019-08-08 12:31:32 +02:00
e061990fa9 build: Fix loading configuration file with default build args
Fix incorrect configuration path when the sysconfdir is relative to the
prefix argument:
fprintd-WARNING **: 12:22:38.816: Could not open "${prefix}/etc/fprintd.conf": No such file or directory

The path needs to be expanded before it's substituted.
2019-08-08 12:26:23 +02:00
011310e30c main: Print the full path of the configuration file
Rather than just its filename, otherwise we won't know where to look.
2019-08-08 12:26:23 +02:00
3274a31153 pam: Don't ask for fingerprints for remote logins
As written in the "Linux-PAM Application Developers' Guide"
at http://www.linux-pam.org/Linux-PAM-html/adg-security-user-identity.html:
"
As a general rule, the following convention for its value can be
assumed: NULL = unknown; localhost = invoked directly from the
local system; other.place.xyz = some component of the user's
connection originates from this remote/requesting host.
"

So also exit early if the hostname isn't localhost as it should be.

Closes: #21
2019-08-07 14:12:53 +00:00
d6c4e8ba64 file: Remove unused variable 2019-08-07 15:15:23 +02:00
48976d0031 main: Throw g_warning() on startup failure
Rather than using g_print()
2019-08-07 15:15:23 +02:00
cbf4a47af3 main: Add debug when about to load configuration file 2019-08-07 15:15:23 +02:00
bfbac18606 file: More debug on file and directory accesses 2019-08-07 15:15:23 +02:00
09529c396b Add code of conduct document 2019-07-25 12:07:27 +02:00
94a9815362 data: tell systemd to create state directory
If the directory referred to by ReadWritePaths= does not exist, the
service fails to start:

    systemd[1]: Starting Fingerprint Authentication Daemon...
    systemd[9736]: fprintd.service: Failed to set up mount namespacing: No such file or directory
    systemd[9736]: fprintd.service: Failed at step NAMESPACE spawning /usr/lib/fprintd/fprintd: No such file or directory
    systemd[1]: fprintd.service: Main process exited, code=exited, status=226/NAMESPACE
    systemd[1]: fprintd.service: Failed with result 'exit-code'.
    systemd[1]: Failed to start Fingerprint Authentication Daemon.

This may happen when booting with an empty /var filesystem.

For a system service, "StateDirectory=fprint" causes /var/lib/fprint and
any parent directories to be created if missing (with mode 0755 by
default, owned by the user and group of the service, which in this case
is root).  In combination with ProtectSystem=strict, this state
directory will be mounted read-write.  StateDirectory was introduced in
systemd 235, so require at least this version.

The /var/lib prefix is hardcoded in systemd. (Since systemd 240, the
full path(s) to StateDirectory are provided as $STATE_DIRECTORY, but
since it is always /var/lib, we continue to just hardcode that path.)

On non-systemd systems, since fprintd runs as root with no confinement,
it can create its state directory as needed (with g_mkdir_with_parents()
in file_storage_print_data_save()).
2019-07-04 15:27:54 +01:00
9ed8767cb3 Hardcode storage path as /var/lib/fprint
--localstatedir (and --prefix) will now be ignored in favour of this
hardcoded path.  This is in preparation for a change to use systemd's
StateDirectory feature.
2019-07-04 15:27:54 +01:00
8ae7abc6c2 autogen.sh: open-code pushd/popd
This script uses /bin/sh, which on Debian-like systems is dash, which
does not support bash's pushd/popd.
2019-03-21 09:17:43 +00:00
dd9d7cc35d build: Create the storage directory at install time
Otherwise you could get into a state where the daemon could not start
because the directory listed as a ReadWritePaths in the .service file is
missing.

Spotted by Will Thompson.

See: !5
2019-03-04 17:10:13 +01:00
dbeeb95756 file: Simplify file_storage_get_basestore_for_username() usage
file_storage_get_basestore_for_username() can never fail, so simplify
its callers by removing the error checking.
2019-02-15 23:59:00 +00:00
5e76441210 ci: Fix CI for recent libfprint changes
The gettext in fprintd would be getting confused by a new file in
libfprint that looks like it should have been translated. Ignore this
file in our build.
2019-02-15 12:19:06 +01:00
8de9164be0 main: Fix memory leak when a save fails
and simplify the flow of that function.

From https://bugs.launchpad.net/ubuntu/+source/fprintd/+bug/1745455/comments/7
2018-11-12 12:09:51 +00:00
267e6b3238 device: Fix client_username memory leak
No need to duplicate that string until we pass it out.

From https://bugs.launchpad.net/ubuntu/+source/fprintd/+bug/1745455/comments/7
2018-11-12 12:09:51 +00:00
51f4dce4e7 pam: Fix typo in occurred 2018-11-09 07:41:42 +01:00
0c76397a6e loop: Use signed type for fp_get_pollfds() retval
This will be a warning with slightly older versions of libfprint, but at
least it would catch errors.
2018-06-26 15:19:45 +02:00
815256717b README: Update URL in Transifex doc 2018-06-18 12:45:41 +02:00
9e32cd5257 0.8.1 2018-06-15 17:54:01 +02:00
32b9f1b056 data: Update policy vendor URL 2018-06-15 17:54:01 +02:00
12ef09a1c9 po: Update translations 2018-06-15 17:50:08 +02:00
596172e42d README: Update link to website 2018-06-07 22:25:39 +02:00
d37d8a233a TODO: Remove image transfer support
I doubt we want to do this, and nothing has needed it so far.
2018-05-31 17:28:19 +02:00
3550ac5f05 TODO: Remove identification support TODO
See #10
2018-05-31 17:28:19 +02:00
111681c57d TODO: Remove hardware protection TODO
See #9
2018-05-31 17:24:58 +02:00
6eed9f1244 TODO: Remove translations from TODO
Already registered in Transifex:
https://www.transifex.com/freedesktop/fprintd/
2018-05-31 17:23:53 +02:00
04bd6bab46 TODO: Remove hotplug TODO item
See #8
2018-05-31 17:20:19 +02:00
fa4af3ee67 build: Add CI 2018-05-31 14:44:17 +02:00
31b985f547 device: Fix crash on exit
Fix a possible crash when an fprintd client disappears. If the client
requested for the device to be released, then, without waiting for the
reply of that release, disappeared from the bus, we would try to close
it a second time, accessing a function pointer that didn't exist
anymore.

See https://bugzilla.redhat.com/show_bug.cgi?id=1515720
2018-05-31 12:02:31 +02:00
661684b1f5 main: Turn messages in debug messages
Rather than filling the logs with mostly useless messages, print those
as debug.
2018-05-30 19:59:07 +02:00
2322244c5a build: Add a log domain for fprintd debug messages 2018-05-30 19:58:20 +02:00
8e0c030f62 main: Split off events loop handling into a separate file
To make it easier to use as an example.
2018-05-25 16:06:54 +02:00
4234902671 main: Clean up main loop integration
Remove do/while loops in favour of for loops, and downgrade some
warnings and messages statements to debug.
2018-05-25 15:45:02 +02:00
78ffe68426 po: Update translations
And add Belarusian
2018-04-26 14:44:45 +02:00
2704e72308 data: Restrict available socket protocols
When starting the daemon
2018-04-26 14:44:02 +02:00
f39f28830a pam: Avoid errors when using parts of the copy/paste header
If not all the functions in the header are used, we'd get warnings about
them being unused. Mark all the functions as unused, so we can avoid
warnings.
2018-02-06 14:12:41 +01:00
e6d291b248 po: Add 2 new languages 2018-02-06 11:23:01 +01:00
a2f2526df6 po: Update translations 2018-02-06 11:22:13 +01:00
2f78c46dcf build: Fix srcdir = builddir build
Don't try to copy a file over itself if srcdir == builddir
2018-02-06 11:21:06 +01:00
159 changed files with 9876 additions and 4197 deletions

7
.git-blame-ignore-revs Normal file
View File

@ -0,0 +1,7 @@
# The commits that did automated reformatting. You can ignore them
# during git-blame with `--ignore-rev` or `--ignore-revs-file`.
#
# $ git config --add 'blame.ignoreRevsFile' '.git-blame-ignore-revs'
#
f73429f06226f5423c92b1c504313657c9b6f9b5

37
.gitignore vendored
View File

@ -1,46 +1,11 @@
/*.bak
/*.lo
/*.o
/*.orig
/*.rej
/*.tab.c
/*~
/.*.sw[nop]
/.deps
/.dirstamp
/.gitignore
/.libs
/GPATH
/GRTAGS
/GSYMS
/GTAGS
/ID
/Makefile
/Makefile.in
/TAGS
/_libs
/autom4te.cache
/config.cache
/config.h
/config.log
/config.lt
/config.status
/config.status.lineno
/configure
/configure.lineno
/intltool-extract.in
/intltool-merge.in
/intltool-update.in
/libtool
/po/*.gmo
/po/*.mo
/po/.intltool-merge-cache
/po/Makefile
/po/Makefile.in
/po/Makefile.in.in
/po/POTFILES
/po/fprintd.pot
/po/stamp-it
/so_locations
/stamp-h1
/_build
/tags

127
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,127 @@
include:
- project: 'libfprint/libfprint'
ref: master
file: '/.gitlab-ci/libfprint-templates.yaml'
- project: 'wayland/ci-templates'
ref: master
file: '/templates/fedora.yml'
variables:
extends: .libfprint_common_variables
FDO_DISTRIBUTION_TAG: latest
FDO_DISTRIBUTION_VERSION: rawhide
FEDORA_IMAGE: "$CI_REGISTRY/libfprint/$CI_PROJECT_NAME/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG"
DEPENDENCIES: dbus-glib-devel
gcc
gcovr
gettext
git
glibc-devel
gtk-doc
libasan
libfprint-devel
meson
pam-devel
polkit-devel
python3-dbusmock
python3-libpamtest
systemd-devel
image: "$FEDORA_IMAGE"
stages:
- check-source
- build
- test
.fprintd_build_preconditions:
except:
variables:
- $FPRINT_CRON_TASK == "BUILD_CI_IMAGES"
.install_libfprint_dev:
before_script:
# Make sure we don't build or link against the system libfprint
- dnf remove -y libfprint-devel
- git clone https://gitlab.freedesktop.org/libfprint/libfprint.git
- cd libfprint
- meson . _build --prefix=/usr -Ddrivers=virtual_image -Ddoc=false
- ninja -C _build
- ninja -C _build install
- cd ..
# So we don't get error about this libfprint file
- echo "libfprint/demo/gtk-libfprint-test.ui" >> po/POTFILES.skip
test_indent:
stage: check-source
extends: .fprintd_build_preconditions
script:
- scripts/uncrustify.sh
- git diff
- "! git status -s | grep -q ."
build_stable:
extends: .fprintd_build_preconditions
stage: build
script:
- meson _build
- ninja -C _build -v
- ninja -C _build -v install
build_dev:
extends:
- .fprintd_build_preconditions
- .install_libfprint_dev
stage: build
script:
- meson _build --werror -Dgtk_doc=true
- ninja -C _build -v
- ninja -C _build -v install
artifacts:
name: log
when: on_failure
paths:
- _build/meson-logs/*.txt
test_dev:
extends:
- .fprintd_build_preconditions
- .install_libfprint_dev
stage: test
script:
- meson _build -Db_coverage=true
- meson test -C _build --verbose --no-stdsplit --timeout-multiplier 3
- ninja -C _build coverage
- cat _build/meson-logs/coverage.txt
artifacts:
name: log-and-coverage
when: always
paths:
- _build/meson-logs
test_dev_with_sanitizer:
extends:
- .fprintd_build_preconditions
- .install_libfprint_dev
stage: test
script:
- meson _build -Db_sanitize=address
- meson test -C _build --verbose --no-stdsplit --timeout-multiplier 5
artifacts:
name: meson-logs
when: on_failure
paths:
- _build/meson-logs
# CONTAINERS creation stage
container_fedora_build:
extends: .fdo.container-build@fedora
only:
variables:
- $FPRINT_CRON_TASK == "BUILD_CI_IMAGES"
variables:
GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
# a list of packages to install
FDO_DISTRIBUTION_PACKAGES:
$DEPENDENCIES
$LIBFPRINT_DEPENDENCIES

View File

237
INSTALL
View File

@ -1,237 +0,0 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
6. Often, you can also type `make uninstall' to remove the installed
files again.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround:
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

View File

@ -1,29 +0,0 @@
AUTOMAKE_OPTIONS = dist-bzip2
SUBDIRS = src data tests pam doc po
EXTRA_DIST = TODO intltool-extract.in intltool-merge.in intltool-update.in
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --with-systemdsystemunitdir='$${libdir}/systemd/system-distcheck'
all: check create-pot
check: check-translations
create-pot:
$(MAKE) -C po fprintd.pot
check-translations:
@for i in $(top_srcdir)/po/*.po ; do \
if ! grep -q `basename $$i | sed 's,.po,,'` $(top_srcdir)/po/LINGUAS ; then \
echo '**********************************'; \
echo '***' `basename $$i | sed 's,.po,,'` missing from po/LINGUAS '***' ; \
echo '**********************************'; \
exit 1; \
fi; \
done;
update-translations: create-pot check-translations
@tx -r $(srcdir) pull --all --force --skip
@if [ ! -d .tx ] ; then mkdir .tx ; fi ; cp -f $(srcdir)/.tx/config .tx/
@tx push --source
-include $(top_srcdir)/git.mk

95
NEWS
View File

@ -1,6 +1,101 @@
This file lists notable changes in each release. For the full history of all
changes, see ChangeLog.
Version 1.90.8:
It seems that we are finally reaching the end of the tunnel with regard
to regressions. One more issue that cropped up was that a pam_fprintd fix
to avoid a possible authentication bypass caused issues when fprintd was
just started on demand.
Highlights:
- pam: Only listen to NameOwnerChanged after fprintd is known to run (#94)
- Place new ObjectManager DBus API at /net/reactivated/Fprint
Version 1.90.7:
While 1.90.6 fixed a number of issues, we did have a bad regression due
causing pam_fprintd to crash when there are no fingerprint devices
installed.
Highlights:
- pam: Guard strdup calls against NULL pointers
Version 1.90.6:
The 1.90.5 release was unusable due to a number of inter-related issues
with the DBus interface and authorization. We also found a number of
problems with possible security implications.
Currently fprintd will do interactive authorization even if this was not
requested using the correct DBus method call flag. All API users MUST be
updated to set the flag as it will be enabled in the future!
Highlights:
- Fix fprintd DBus configuration
- Change details of what requires authorization
- Fix various race conditions in pam_fprintd
- Permit interactive authorization from fprintd utilities
- Do not allow deletion while another operation is ongoing
Version 1.90.5:
The 1.90.4 release contained some bad errors, this release addresses those.
Highlights:
- Permit building with polkit older than 0.114
- Fix possible issues with PAM test
- Fix incorrect DBus policy
- Fix build so that CFLAGS enviroment is correctly used
- Skip hotplug test with older libfprint (which times out otherwise)
Version 1.90.4:
This fprintd release contains major core reworkings and improved testing.
As such, only the most important changes are listed here, focusing on
changes relevant to distributors.
Highlights:
- Authentication is now required to enroll a new print (#5)
- Add support for the libfprint early reporting mechanism
- Proper hotplug support together with libfprint 1.90.4
- Handle STATE_DIRECTORY containing multiple paths
version 1.90.1:
- Add support for prints saved on the fingerprint device itself
- Add integration tests using the virtual image driver, and further
tests for the utilities
- Port build system to meson
- Loads of build warnings and memory leak fixes
- PAM module:
- Port PAM module to sd-bus from dbus-glib
- Use systemd to not ask for a fingerprint scan on remote logins
- Add man page for PAM module
- Add tests
This version requires libfprint 1.90.1, a 2.0 pre-release.
version 0.9.0:
- Fix hangs when there the verification error was "retry"
- Update for fp_get_pollfds() changes
- Fix "client_username" memory leak, fix memory leak when saving a file
- Create the fingerprint storage directory at install time,
the storage path is now hard-coded as /var/lib/fprint and created by
systemd when the service is started
version 0.8.1:
- Fix build when builddir != srcdir
- Fix possible crash on exit
- Avoid warnings in copy/paste header
- Sandbox fprintd daemon more
- Update website address
- Minimise debug output
- Updated translations
version 0.8.0:
- Lockdown the daemon to minimise potential security issues
- Don't wake up readers when there's no enrolled fingerprints

2
README
View File

@ -1,7 +1,7 @@
fprintd
=======
http://www.reactivated.net/fprint/wiki/Fprintd
https://fprint.freedesktop.org/
Daemon to offer libfprint functionality over D-Bus
Might eat your kangaroo.

View File

@ -1,10 +1,16 @@
Transifex.net Token Verification
=================================
Updating translations
=====================
The list of tokens bellow guarantee the respective users to be able to enable
The update-transifex.sh script should be run regularly to both pull
translations from the Transifex service, and push new strings to translate.
Transifex.net Token Verification
================================
The list of tokens below guarantee the respective users to be able to enable
submission on components using the following repository url:
ssh://git.freedesktop.org/git/libfprint/fprintd
https://gitlab.freedesktop.org/libfprint/fprintd/
Tokens:

12
TODO
View File

@ -1,17 +1,5 @@
Identification
Image transfer
Verify PAM messages fit with GDM/gnome-screensaver
Register fprintd' po file with Transifex, Rosetta or the Translation Project
Support insertion/removal of devices
Add some hardware protection by making sure devices aren't opened and
reading for more than a certain amount of time.
Add POS use case
Automatically show the fingerprint registration when logged in and
not having any registered prints?
http://uk.youtube.com/watch?v=F_x_vwCltbc

View File

@ -1,182 +0,0 @@
dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
dnl
dnl example
dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
AC_DEFUN([AS_AC_EXPAND],
[
EXP_VAR=[$1]
FROM_VAR=[$2]
dnl first expand prefix and exec_prefix if necessary
prefix_save=$prefix
exec_prefix_save=$exec_prefix
dnl if no prefix given, then use /usr/local, the default prefix
if test "x$prefix" = "xNONE"; then
prefix=$ac_default_prefix
fi
dnl if no exec_prefix given, then use prefix
if test "x$exec_prefix" = "xNONE"; then
exec_prefix=$prefix
fi
full_var="$FROM_VAR"
dnl loop until it doesn't change anymore
while true; do
new_full_var="`eval echo $full_var`"
if test "x$new_full_var"="x$full_var"; then break; fi
full_var=$new_full_var
done
dnl clean up
full_var=$new_full_var
AC_SUBST([$1], "$full_var")
dnl restore prefix and exec_prefix
prefix=$prefix_save
exec_prefix=$exec_prefix_save
])
dnl GNOME_COMPILE_WARNINGS
dnl Turn on many useful compiler warnings
dnl For now, only works on GCC
AC_DEFUN([GNOME_COMPILE_WARNINGS],[
dnl ******************************
dnl More compiler warnings
dnl ******************************
AC_ARG_ENABLE(compile-warnings,
AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],
[Turn on compiler warnings]),,
[enable_compile_warnings="m4_default([$1],[yes])"])
warnCFLAGS=
if test "x$GCC" != xyes; then
enable_compile_warnings=no
fi
warning_flags=
realsave_CFLAGS="$CFLAGS"
case "$enable_compile_warnings" in
no)
warning_flags=
;;
minimum)
warning_flags="-Wall"
;;
yes)
warning_flags="-Wall -Wmissing-prototypes"
;;
maximum|error)
warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
CFLAGS="$warning_flags $CFLAGS"
for option in -Wno-sign-compare; do
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $option"
AC_MSG_CHECKING([whether gcc understands $option])
AC_TRY_COMPILE([], [],
has_option=yes,
has_option=no,)
CFLAGS="$SAVE_CFLAGS"
AC_MSG_RESULT($has_option)
if test $has_option = yes; then
warning_flags="$warning_flags $option"
fi
unset has_option
unset SAVE_CFLAGS
done
unset option
if test "$enable_compile_warnings" = "error" ; then
warning_flags="$warning_flags -Werror"
fi
;;
*)
AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
;;
esac
CFLAGS="$realsave_CFLAGS"
AC_MSG_CHECKING(what warning flags to pass to the C compiler)
AC_MSG_RESULT($warning_flags)
AC_ARG_ENABLE(iso-c,
AC_HELP_STRING([--enable-iso-c],
[Try to warn if code is not ISO C ]),,
[enable_iso_c=no])
AC_MSG_CHECKING(what language compliance flags to pass to the C compiler)
complCFLAGS=
if test "x$enable_iso_c" != "xno"; then
if test "x$GCC" = "xyes"; then
case " $CFLAGS " in
*[\ \ ]-ansi[\ \ ]*) ;;
*) complCFLAGS="$complCFLAGS -ansi" ;;
esac
case " $CFLAGS " in
*[\ \ ]-pedantic[\ \ ]*) ;;
*) complCFLAGS="$complCFLAGS -pedantic" ;;
esac
fi
fi
AC_MSG_RESULT($complCFLAGS)
WARN_CFLAGS="$warning_flags $complCFLAGS"
AC_SUBST(WARN_CFLAGS)
])
dnl For C++, do basically the same thing.
AC_DEFUN([GNOME_CXX_WARNINGS],[
AC_ARG_ENABLE(cxx-warnings,
AC_HELP_STRING([--enable-cxx-warnings=@<:@no/minimum/yes@:>@]
[Turn on compiler warnings.]),,
[enable_cxx_warnings="m4_default([$1],[minimum])"])
AC_MSG_CHECKING(what warning flags to pass to the C++ compiler)
warnCXXFLAGS=
if test "x$GXX" != xyes; then
enable_cxx_warnings=no
fi
if test "x$enable_cxx_warnings" != "xno"; then
if test "x$GXX" = "xyes"; then
case " $CXXFLAGS " in
*[\ \ ]-Wall[\ \ ]*) ;;
*) warnCXXFLAGS="-Wall -Wno-unused" ;;
esac
## -W is not all that useful. And it cannot be controlled
## with individual -Wno-xxx flags, unlike -Wall
if test "x$enable_cxx_warnings" = "xyes"; then
warnCXXFLAGS="$warnCXXFLAGS -Wshadow -Woverloaded-virtual"
fi
fi
fi
AC_MSG_RESULT($warnCXXFLAGS)
AC_ARG_ENABLE(iso-cxx,
AC_HELP_STRING([--enable-iso-cxx],
[Try to warn if code is not ISO C++ ]),,
[enable_iso_cxx=no])
AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler)
complCXXFLAGS=
if test "x$enable_iso_cxx" != "xno"; then
if test "x$GXX" = "xyes"; then
case " $CXXFLAGS " in
*[\ \ ]-ansi[\ \ ]*) ;;
*) complCXXFLAGS="$complCXXFLAGS -ansi" ;;
esac
case " $CXXFLAGS " in
*[\ \ ]-pedantic[\ \ ]*) ;;
*) complCXXFLAGS="$complCXXFLAGS -pedantic" ;;
esac
fi
fi
AC_MSG_RESULT($complCXXFLAGS)
WARN_CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS"
AC_SUBST(WARN_CXXFLAGS)
])

View File

@ -1,20 +0,0 @@
#!/bin/sh
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
pushd $srcdir
aclocal || exit 1
autoheader || exit 1
glib-gettextize -f -c || exit 1
gtkdocize --copy || exit 1
intltoolize -c -f || exit 1
libtoolize -c || exit 1
autoconf || exit 1
automake -a -c || exit 1
popd
if test -z "$NOCONFIGURE"; then
$srcdir/configure --enable-maintainer-mode $*
fi

3
code-of-conduct.md Normal file
View File

@ -0,0 +1,3 @@
This project and its community follow the [Freedesktop.org code of conduct]
[Freedesktop.org code of conduct]: https://www.freedesktop.org/wiki/CodeOfConduct/

14
config.h.in Normal file
View File

@ -0,0 +1,14 @@
/* Define to the Gettext package name */
#mesondefine GETTEXT_PACKAGE
/* Version number of package */
#mesondefine PACKAGE_VERSION
/* Where the configuration file will be located */
#mesondefine SYSCONFDIR
/* Define to the version of this package. */
#mesondefine VERSION
/* Whether current polkit version supports autopointers */
#mesondefine POLKIT_HAS_AUTOPOINTERS

View File

@ -1,87 +0,0 @@
AC_INIT([fprintd], [0.8.0])
AM_INIT_AUTOMAKE([1.11 dist-xz no-dist-gzip check-news])
AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADERS([config.h])
# Enable silent build when available (Automake 1.11)
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
AC_PREREQ([2.50])
AC_PROG_LIBTOOL
AC_PROG_CC
AM_PROG_CC_C_O
GETTEXT_PACKAGE=fprintd
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], [Define to the Gettext package name])
AC_SUBST(GETTEXT_PACKAGE)
AM_GLIB_GNU_GETTEXT
IT_PROG_INTLTOOL([0.35.0])
PKG_CHECK_MODULES(FPRINT, [libfprint > 0.1.0])
AC_SUBST(FPRINT_LIBS)
AC_SUBST(FPRINT_CFLAGS)
PKG_CHECK_MODULES(GLIB, glib-2.0 dbus-glib-1)
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
PKG_CHECK_MODULES(DAEMON, glib-2.0 dbus-glib-1 gmodule-2.0 polkit-gobject-1 >= 0.91 gio-2.0 >= 2.26)
AC_SUBST(DAEMON_LIBS)
AC_SUBST(DAEMON_CFLAGS)
AC_ARG_ENABLE(pam, AC_HELP_STRING([--enable-pam],[Build the fprintd PAM module]), enable_pam="$enableval", enable_pam=yes)
has_pam=no
if test x$enable_pam = xyes; then
has_pam=yes
AC_CHECK_HEADER([security/pam_modules.h], [has_pam=yes] , [has_pam=no])
if test x$has_pam = xyes; then
has_pam=no
AC_CHECK_LIB(pam, pam_start, [PAM_LIBS="-lpam"
has_pam=yes],
has_pam=no)
fi
AC_SUBST(PAM_LIBS)
fi
AM_CONDITIONAL(HAVE_PAM, test "x$has_pam" = "xyes")
AC_MSG_CHECKING(for PAM headers and library)
AC_MSG_RESULT([$has_pam])
AC_CHECK_PROG([XMLLINT], [xmllint], [xmllint])
AC_CHECK_PROG([XSLTPROC], [xsltproc], [xsltproc])
AC_CHECK_PROG([POD2MAN], [pod2man], [pod2man])
AM_CONDITIONAL(BUILD_MAN, test x"$POD2MAN" != "x")
GTK_DOC_CHECK([1.3])
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
[],
[with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [
AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
])
AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$systemdsystemunitdir"])
AS_AC_EXPAND(DATADIR, $datadir)
DBUS_SERVICES_DIR="$DATADIR/dbus-1/services"
AC_SUBST(DBUS_SERVICES_DIR)
AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for DBUS is])
AC_DEFINE_UNQUOTED(SYSCONFDIR, "$sysconfdir", [Where the configuration file will be located])
GNOME_COMPILE_WARNINGS
AC_OUTPUT([
Makefile
src/Makefile
data/Makefile
tests/Makefile
pam/Makefile
doc/Makefile
doc/version.xml
doc/dbus/Makefile
po/Makefile.in
])

View File

@ -1,44 +0,0 @@
dbus_servicesdir = $(datadir)/dbus-1/system-services
dbus_services_in_files = net.reactivated.Fprint.service.in
dbus_services_DATA = $(dbus_services_in_files:.service.in=.service)
$(dbus_services_DATA): $(dbus_services_in_files)
sed -e "s|\@LIBEXECDIR\@|$(libexecdir)|" $< > $@
dbus_confdir = $(sysconfdir)/dbus-1/system.d
dbus_conf_DATA = net.reactivated.Fprint.conf
systemdservice_in_files = fprintd.service.in
if HAVE_SYSTEMD
systemdservicedir = $(systemdsystemunitdir)
systemdservice_DATA = $(systemdservice_in_files:.service.in=.service)
$(systemdservice_DATA): $(systemdservice_in_files) Makefile
@sed -e "s|\@libexecdir\@|$(libexecdir)|" -e "s|\@localstatedir\@|$(localstatedir)|" $< > $@
endif
polkitdir = $(datadir)/polkit-1/actions
polkit_in_files = net.reactivated.fprint.device.policy.in
@INTLTOOL_POLICY_RULE@
polkit_DATA = $(polkit_in_files:.policy.in=.policy)
confdir = $(sysconfdir)/
conf_DATA = fprintd.conf
man_MANS =
if BUILD_MAN
man_MANS += fprintd.1
fprintd.1: fprintd.pod
$(AM_V_GEN) pod2man -c "" -s 1 -q none -n fprintd -r freedesktop $< > $@
endif
EXTRA_DIST = $(dbus_services_in_files) $(dbus_conf_DATA) $(polkit_in_files) $(conf_DATA) $(systemdservice_in_files) fprintd.pod
CLEANFILES = $(polkit_DATA) $(dbus_services_DATA) $(systemdservice_DATA) fprintd.1
check:
@$(XMLLINT) --noout $(polkit_DATA)

View File

@ -1,4 +1,4 @@
.\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14)
.\" Automatically generated by Pod::Man 4.12 (Pod::Simple 3.39)
.\"
.\" Standard preamble:
.\" ========================================================================
@ -38,27 +38,36 @@
. 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 turned on, we'll generate index entries on stderr for
.\" 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.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
. nr % 0
. rr F
.\}
.el \{\
. 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.
@ -124,16 +133,16 @@
.\" ========================================================================
.\"
.IX Title "fprintd 1"
.TH fprintd 1 "2010-08-16" "freedesktop" ""
.TH fprintd 1 "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"
fprintd \- Fingerprint management daemon, and test applications
.SH "SYNOPSYS"
.IX Header "SYNOPSYS"
\&\fBfprintd-enroll\fR [username]
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBfprintd-enroll\fR [\-f finger] [usename]
.PP
\&\fBfprintd-list\fR username [usernames...]
.PP
@ -185,7 +194,7 @@ Will list the user's enrolled fingerprints.
.SS "fprintd-verify"
.IX Subsection "fprintd-verify"
.RS 8
Will enroll the user's right index finger into the database.
Will verify the user's fingerprints against the database.
.RE
.SS "fprintd-enroll"
.IX Subsection "fprintd-enroll"
@ -200,5 +209,5 @@ Will enroll the user's right index finger into the database.
By default, fprintd stores the fingerprints in \fB/var/lib/fprint/\fR
.SH "SEE ALSO"
.IX Header "SEE ALSO"
.IP "\fBdbus-daemon\fR, \fBgnome-about-me\fR" 8
.IX Item "dbus-daemon, gnome-about-me"
.IP "\fBgnome-control-center\fR" 8
.IX Item "gnome-control-center"

View File

@ -2,7 +2,7 @@
fprintd - Fingerprint management daemon, and test applications
=head1 SYNOPSYS
=head1 SYNOPSIS
B<fprintd-enroll> [-f finger] [usename]
@ -75,7 +75,7 @@ Will list the user's enrolled fingerprints.
=over 8
Will enroll the user's right index finger into the database.
Will verify the user's fingerprints against the database.
=back
@ -99,7 +99,7 @@ By default, fprintd stores the fingerprints in B</var/lib/fprint/>
=over 8
=item B<dbus-daemon>, B<gnome-about-me>
=item B<gnome-control-center>
=back

View File

@ -11,12 +11,14 @@ ExecStart=@libexecdir@/fprintd
ProtectSystem=strict
ProtectKernelTunables=true
ProtectControlGroups=true
ReadWritePaths=@localstatedir@/lib/fprint
# This always corresponds to /var/lib/fprint
StateDirectory=fprint
ProtectHome=true
PrivateTmp=true
# Network
PrivateNetwork=true
RestrictAddressFamilies=AF_UNIX AF_LOCAL AF_NETLINK
# Execute Mappings
MemoryDenyWriteExecute=true

72
data/meson.build Normal file
View File

@ -0,0 +1,72 @@
install_data('net.reactivated.Fprint.conf',
install_dir: dbus_conf_dir)
configure_file(
configuration: configuration_data({
'LIBEXECDIR': fprintd_installdir,
}),
input: 'net.reactivated.Fprint.service.in',
output: 'net.reactivated.Fprint.service',
install: true,
install_dir: dbus_service_dir,
)
if get_option('systemd')
configure_file(
configuration: configuration_data({
'libexecdir': fprintd_installdir,
}),
input: 'fprintd.service.in',
output: 'fprintd.service',
install: true,
install_dir: systemd_unit_dir,
)
endif
polkit_policy = 'net.reactivated.fprint.device.policy'
polkit_policy_target = i18n.merge_file(polkit_policy,
input: '@0@.in'.format(polkit_policy),
output: polkit_policy,
po_dir: meson.source_root() / 'po',
install: true,
install_dir: polkit_policy_directory,
)
if xmllint.found()
test(polkit_policy,
xmllint,
depends: polkit_policy_target,
args: [
'--noout',
polkit_policy_target.full_path(),
])
endif
install_data('fprintd.conf',
install_dir: sysconfdir)
if get_option('man')
manfiles = {
'fprintd': 1,
'pam_fprintd': 8,
}
foreach man_name, man_section: manfiles
custom_target('man_' + man_name + '.' + man_section.to_string(),
input: man_name + '.pod',
output: man_name + '.' + man_section.to_string(),
command: [
pod2man,
'-c', '',
'-s', man_section.to_string(),
'-q', 'none',
'-n', man_name,
'-r', 'freedesktop',
'@INPUT@',
'@OUTPUT@',
],
install: true,
install_dir: datadir / 'man' / 'man' + man_section.to_string(),
)
endforeach
endif

View File

@ -12,8 +12,18 @@
<!-- Anyone can talk to the service -->
<policy context="default">
<allow send_destination="net.reactivated.Fprint"/>
<allow send_interface="net.reactivated.Fprint"/>
<allow send_destination="net.reactivated.Fprint"
send_interface="net.reactivated.Fprint.Manager"/>
<allow send_destination="net.reactivated.Fprint"
send_interface="net.reactivated.Fprint.Device"/>
<!-- Basic D-Bus API stuff -->
<allow send_destination="net.reactivated.Fprint"
send_interface="org.freedesktop.DBus.Introspectable"/>
<allow send_destination="net.reactivated.Fprint"
send_interface="org.freedesktop.DBus.Properties"/>
<allow send_destination="net.reactivated.Fprint"
send_interface="org.freedesktop.DBus.ObjectManager"/>
</policy>
</busconfig>

View File

@ -6,12 +6,12 @@
<policyconfig>
<vendor>The FPrint Project</vendor>
<vendor_url>http://reactivated.net/fprint/</vendor_url>
<vendor_url>https://fprint.freedesktop.org/</vendor_url>
<icon_name>fprint</icon_name>
<action id="net.reactivated.fprint.device.verify">
<_description>Verify a fingerprint</_description>
<_message>Privileges are required to verify fingerprints.</_message>
<description>Verify a fingerprint</description>
<message>Privileges are required to verify fingerprints.</message>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
@ -20,18 +20,18 @@
</action>
<action id="net.reactivated.fprint.device.enroll">
<_description>Enroll new fingerprints</_description>
<_message>Privileges are required to enroll new fingerprints.</_message>
<description>Enroll new fingerprints</description>
<message>Privileges are required to enroll new fingerprints.</message>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
<allow_active>auth_self_keep</allow_active>
</defaults>
</action>
<action id="net.reactivated.fprint.device.setusername">
<_description>Select a user to enroll</_description>
<_message>Privileges are required to enroll new fingerprints for other users.</_message>
<description>Select a user to enroll</description>
<message>Privileges are required to enroll new fingerprints for other users.</message>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>

184
data/pam_fprintd.8 Normal file
View File

@ -0,0 +1,184 @@
.\" 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 minimum, and default, number of tries is 3.
.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.
.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"

63
data/pam_fprintd.pod Normal file
View File

@ -0,0 +1,63 @@
=head1 NAME
pam_fprintd - PAM module to authenticate against fprintd, the fingerprint daemon
=head1 SYNOPSIS
B<pam_fprintd.so> [debug|debug=[I<on>|I<off>|I<true>|I<false>|I<1>|I<0>]] [max-tries=I<MAX_TRIES>] [timeout=I<TIMEOUT>]
=head1 DESCRIPTION
The pam_fprintd module is used to verify a user's fingerprints against fingerprints
enrolled using fprintd, the fingerprint management daemon.
=head1 OPTIONS
=over 8
=item B<debug>
=item B<debug=[I<on>|I<off>|I<true>|I<false>|I<1>|I<0>]>
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.
=item B<max-tries=I<MAX_TRIES>>
The number of attempts at fingerprint authentication to try before returning an
authentication failure. The minimum, and default, number of tries is 3.
=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.
=back
=head1 LIMITATIONS
=over 8
=back
The PAM 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.
It is up to the application using the PAM services to implement separate
PAM processes and run separate authentication stacks separately. This
is the way multiple authentication methods are made available to users
of gdm for example.
=head1 AUTHOR
B<fprintd> was written by Bastien Nocera.
=head1 SEE ALSO
=over 8
=item B<fprintd>, B<PAM>
=back

View File

@ -1,81 +0,0 @@
SUBDIRS = dbus
NULL =
AUTOMAKE_OPTIONS = 1.7
# The name of the module.
DOC_MODULE=fprintd
# The top-level SGML file.
DOC_MAIN_SGML_FILE=fprintd-docs.xml
# Extra options to supply to gtkdoc-scan
SCAN_OPTIONS=--ignore-headers=config.h
# The directory containing the source code. Relative to $(srcdir)
DOC_SOURCE_DIR=../src
# Used for dependencies
HFILE_GLOB=
#$(top_srcdir)/policy/*.h
CFILE_GLOB=
#$(top_srcdir)/policy/*.c
# Headers to ignore
IGNORE_HFILES= \
$(NULL)
# CFLAGS and LDFLAGS for compiling scan program. Only needed
# if $(DOC_MODULE).types is non-empty.
INCLUDES = \
$(GLIB_CFLAGS) \
-I$(top_srcdir)/src \
$(NULL)
GTKDOC_LIBS = \
$(GLIB_LIBS) \
$(top_builddir)/src/libfprintd.la \
$(NULL)
# Extra options to supply to gtkdoc-mkdb
MKDB_OPTIONS=--sgml-mode --output-format=xml
# Extra options to supply to gtkdoc-mktmpl
MKTMPL_OPTIONS=
# Non-autogenerated SGML files to be included in $(DOC_MAIN_SGML_FILE)
content_files = \
version.xml \
dbus/net.reactivated.Fprint.Manager.ref.xml \
dbus/net.reactivated.Fprint.Device.ref.xml \
$(NULL)
# Images to copy into HTML directory
HTML_IMAGES = \
$(NULL)
# Extra options to supply to gtkdoc-fixref
FIXXREF_OPTIONS=
DISTCLEANFILES = \
net.reactivated.Fprint.Manager.ref.xml \
net.reactivated.Fprint.Device.ref.xml
MAINTAINERCLEANFILES = \
*~ \
Makefile.in \
fprintd.types \
fprintd-*.txt \
$(NULL)
if ENABLE_GTK_DOC
include $(top_srcdir)/gtk-doc.make
else
EXTRA_DIST = fprintd-docs.xml
endif
# Version information for marking the documentation
EXTRA_DIST += version.xml.in

View File

@ -1,15 +0,0 @@
noinst_DATA = net.reactivated.Fprint.Manager.ref.xml net.reactivated.Fprint.Device.ref.xml
net.reactivated.Fprint.Manager.ref.xml : $(top_srcdir)/src/manager.xml $(top_srcdir)/doc/dbus/spec-to-docbook.xsl
echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">" > $@
$(XSLTPROC) $(top_srcdir)/doc/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@
net.reactivated.Fprint.Device.ref.xml : $(top_srcdir)/src/device.xml $(top_srcdir)/doc/dbus/spec-to-docbook.xsl
echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\">" > $@
$(XSLTPROC) $(top_srcdir)/doc/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@
EXTRA_DIST = spec-to-docbook.xsl dbus-introspect-docs.dtd
clean-local :
rm -f *~ *.ref.xml

29
doc/dbus/meson.build Normal file
View File

@ -0,0 +1,29 @@
docbook_xml_header = custom_target('docbook_xml_header',
output: 'docbook-xml-header.xml',
command: [
'echo', '-n',
'<?xml version="1.0"?>\n',
'<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">\n',
],
capture: true,
)
dbus_interfaces_refs = []
foreach interface_file: dbus_interfaces_files
basename = run_command('basename', interface_file.full_path(), '.xml').stdout().strip()
dbus_interfaces_refs += custom_target(basename + '_ref',
input: docbook_xml_header,
output: basename + '.ref.xml',
build_by_default: true,
depends: interface_file,
capture: true,
command: [
bash, '-c',
'cat @INPUT@;' +
xsltproc.path() + ' @0@/@1@ '.format(
meson.source_root(),
files('spec-to-docbook.xsl')[0]) +
interface_file.full_path() + '| tail -n +2;',
],
)
endforeach

27
doc/meson.build Normal file
View File

@ -0,0 +1,27 @@
subdir('dbus')
version_file = configure_file(
input: 'version.xml.in',
output: 'version.xml',
configuration: configuration_data({
'VERSION': meson.project_version(),
}),
)
gnome.gtkdoc(meson.project_name(),
main_xml: 'fprintd-docs.xml',
src_dir: meson.source_root() / 'src',
dependencies: [
declare_dependency(
sources: dbus_interfaces_refs,
link_with: libfprintd_private,
),
],
content_files: [
version_file,
dbus_interfaces_refs,
],
ignore_headers: [
'config.h',
],
install: true)

196
git.mk
View File

@ -1,196 +0,0 @@
# git.mk
#
# Copyright 2009, Red Hat, Inc.
# Written by Behdad Esfahbod
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
#
# The canonical source for this file is pango/git.mk, or whereever the
# header of pango/git.mk suggests in the future.
#
# To use in your project, import this file in your git repo's toplevel,
# then do "make -f git.mk". This modifies all Makefile.am files in
# your project to include git.mk.
#
# This enables automatic .gitignore generation. If you need to ignore
# more files, add them to the GITIGNOREFILES variable in your Makefile.am.
# But think twice before doing that. If a file has to be in .gitignore,
# chances are very high that it's a generated file and should be in one
# of MOSTLYCLEANFILES, CLEANFILES, DISTCLEANFILES, or MAINTAINERCLEANFILES.
#
# The only case that you need to manually add a file to GITIGNOREFILES is
# when remove files in one of mostlyclean-local, clean-local, distclean-local,
# or maintainer-clean-local.
#
# Note that for files like editor backup, etc, there are better places to
# ignore them. See "man gitignore".
#
# If "make maintainer-clean" removes the files but they are not recognized
# by this script (that is, if "git status" shows untracked files still), send
# me the output of "git status" as well as your Makefile.am and Makefile for
# the directories involved.
#
# For a list of toplevel files that should be in MAINTAINERCLEANFILES, see
# pango/Makefile.am.
#
# Don't EXTRA_DIST this file. It is supposed to only live in git clones,
# not tarballs. It serves no useful purpose in tarballs and clutters the
# build dir.
#
# This file knows how to handle autoconf, automake, libtool, gtk-doc,
# gnome-doc-utils, intltool, GSettings.
#
#
# KNOWN ISSUES:
#
# - Recursive configure doesn't work as $(top_srcdir)/git.mk inside the
# submodule doesn't find us. If you have configure.{in,ac} files in
# subdirs, add a proxy git.mk file in those dirs that simply does:
# "include $(top_srcdir)/../git.mk". Add more ..'s to your taste.
# And add those files to git. See vte/gnome-pty-helper/git.mk for
# example.
#
git-all: git-mk-install
git-mk-install:
@echo Installing git makefile
@any_failed=; find $(top_srcdir) -name Makefile.am | while read x; do \
if grep 'include .*/git.mk' $$x >/dev/null; then \
echo $$x already includes git.mk; \
else \
failed=; \
echo "Updating $$x"; \
{ cat $$x; \
echo ''; \
echo '-include $$(top_srcdir)/git.mk'; \
} > $$x.tmp || failed=1; \
if test x$$failed = x; then \
mv $$x.tmp $$x || failed=1; \
fi; \
if test x$$failed = x; then : else \
echo Failed updating $$x; >&2 \
any_failed=1; \
fi; \
fi; done; test -z "$$any_failed"
.PHONY: git-all git-mk-install
### .gitignore generation
$(srcdir)/.gitignore: Makefile.am $(top_srcdir)/git.mk
$(AM_V_GEN) \
{ \
if test "x$(DOC_MODULE)" = x -o "x$(DOC_MAIN_SGML_FILE)" = x; then :; else \
for x in \
$(DOC_MODULE)-decl-list.txt \
$(DOC_MODULE)-decl.txt \
tmpl/$(DOC_MODULE)-unused.sgml \
"tmpl/*.bak" \
xml html \
; do echo /$$x; done; \
fi; \
if test "x$(DOC_MODULE)" = x -o "x$(DOC_LINGUAS)" = x; then :; else \
for x in \
$(_DOC_C_DOCS) \
$(_DOC_LC_DOCS) \
$(_DOC_OMF_ALL) \
$(_DOC_DSK_ALL) \
$(_DOC_HTML_ALL) \
$(_DOC_POFILES) \
$(_DOC_MOFILES) \
$(DOC_H_FILE) \
"*/.xml2po.mo" \
"*/*.omf.out" \
; do echo /$$x; done; \
fi; \
if test "x$(gsettings_SCHEMAS)" = x; then :; else \
for x in \
$(gsettings_SCHEMAS:.xml=.valid) \
$(gsettings__enum_file) \
; do echo /$$x; done; \
fi; \
if test -f $(srcdir)/po/Makefile.in.in; then \
for x in \
po/Makefile.in.in \
po/Makefile.in \
po/Makefile \
po/POTFILES \
po/stamp-it \
po/.intltool-merge-cache \
"po/*.gmo" \
"po/*.mo" \
po/$(GETTEXT_PACKAGE).pot \
intltool-extract.in \
intltool-merge.in \
intltool-update.in \
; do echo /$$x; done; \
fi; \
if test -f $(srcdir)/configure; then \
for x in \
autom4te.cache \
configure \
config.h \
stamp-h1 \
libtool \
config.lt \
; do echo /$$x; done; \
fi; \
for x in \
.gitignore \
$(GITIGNOREFILES) \
$(CLEANFILES) \
$(PROGRAMS) \
$(check_PROGRAMS) \
$(EXTRA_PROGRAMS) \
$(LTLIBRARIES) \
so_locations \
.libs _libs \
$(MOSTLYCLEANFILES) \
"*.$(OBJEXT)" \
"*.lo" \
$(DISTCLEANFILES) \
$(am__CONFIG_DISTCLEAN_FILES) \
$(CONFIG_CLEAN_FILES) \
TAGS ID GTAGS GRTAGS GSYMS GPATH tags \
"*.tab.c" \
$(MAINTAINERCLEANFILES) \
$(BUILT_SOURCES) \
$(DEPDIR) \
Makefile \
Makefile.in \
"*.orig" \
"*.rej" \
"*.bak" \
"*~" \
".*.sw[nop]" \
".dirstamp" \
; do echo /$$x; done; \
} | \
sed "s@^/`echo "$(srcdir)" | sed 's/\(.\)/[\1]/g'`/@/@" | \
sed 's@/[.]/@/@g' | \
LC_ALL=C sort | uniq > $@.tmp && \
mv $@.tmp $@;
all: $(srcdir)/.gitignore gitignore-recurse-maybe
gitignore-recurse-maybe:
@if test "x$(SUBDIRS)" = "x$(DIST_SUBDIRS)"; then :; else \
$(MAKE) $(AM_MAKEFLAGS) gitignore-recurse; \
fi;
gitignore-recurse:
@for subdir in $(DIST_SUBDIRS); do \
case " $(SUBDIRS) " in \
*" $$subdir "*) :;; \
*) test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse || echo "Skipping $$subdir");; \
esac; \
done
gitignore: $(srcdir)/.gitignore gitignore-recurse
maintainer-clean: gitignore-clean
gitignore-clean:
-rm -f $(srcdir)/.gitignore
.PHONY: gitignore-clean gitignore gitignore-recurse gitignore-recurse-maybe

199
meson.build Normal file
View File

@ -0,0 +1,199 @@
project('fprintd', 'c',
version: '1.90.8',
license: 'GPLv2+',
default_options: [
'buildtype=debugoptimized',
'warning_level=3',
'c_std=gnu99',
],
meson_version: '>= 0.50.0')
gnome = import('gnome')
i18n = import('i18n')
cc = meson.get_compiler('c')
common_cflags = cc.get_supported_arguments([
'-fno-strict-aliasing',
'-Wcast-align',
'-Werror=address',
'-Werror=array-bounds',
'-Werror=empty-body',
'-Werror=implicit',
'-Werror=init-self',
'-Werror=int-to-pointer-cast',
'-Werror=main',
'-Werror=missing-braces',
'-Werror=nonnull',
'-Werror=pointer-to-int-cast',
'-Werror=redundant-decls',
'-Werror=return-type',
'-Werror=sequence-point',
'-Werror=trigraphs',
'-Werror=write-strings',
'-Wformat-nonliteral',
'-Wformat-security',
'-Wformat=2',
'-Wignored-qualifiers',
'-Wimplicit-function-declaration',
'-Wlogical-op',
'-Wmissing-declarations',
'-Wmissing-format-attribute',
'-Wmissing-include-dirs',
'-Wmissing-noreturn',
'-Wmissing-prototypes',
'-Wnested-externs',
'-Wold-style-definition',
'-Wpointer-arith',
'-Wshadow',
'-Wstrict-prototypes',
'-Wtype-limits',
'-Wundef',
'-Wunused',
])
add_project_arguments(common_cflags, language: 'c')
common_cflags = cc.get_supported_arguments([
# The stub passes a lot of params that we do not use, maybe a good idea to
# mark it appropriately, but this works well for now.
'-Wno-unused-parameter',
# We use g_signal_handlers_disconnect_* which is not compatible with -Wpedantic
'-Wno-pedantic',
])
add_project_arguments(common_cflags, language: 'c')
host_system = host_machine.system()
# NOTE: Bump gdbus-codegen min version once we can depend on 2.64!
glib_min_version = '2.56'
libfprint_min_version = '1.90.1'
fprintd_installdir = get_option('prefix') / get_option('libexecdir')
fprintd_plugindir = get_option('prefix') / get_option('libdir') / meson.project_name() / 'modules'
storage_path = get_option('prefix') / get_option('localstatedir') / 'lib/fprint'
localedir = get_option('prefix') / get_option('localedir')
datadir = get_option('prefix') / get_option('datadir')
sysconfdir = get_option('sysconfdir')
if get_option('prefix') != '/usr'
sysconfdir = get_option('prefix') / sysconfdir
endif
# Dependencies
glib_dep = dependency('glib-2.0', version: '>=' + glib_min_version)
gio_dep = dependency('gio-2.0', version: '>=' + glib_min_version)
gio_unix_dep = dependency('gio-unix-2.0', version: '>=' + glib_min_version)
gmodule_dep = dependency('gmodule-2.0', version: '>=' + glib_min_version)
libfprint_dep = dependency('libfprint-2', version: '>=' + libfprint_min_version)
polkit_gobject_dep = dependency('polkit-gobject-1', version: '>= 0.91')
dbus_dep = dependency('dbus-1', required: false)
libsystemd_dep = dependency('libsystemd', required: get_option('pam'))
pam_dep = cc.find_library('pam',
required: get_option('pam'),
has_headers: 'security/pam_modules.h',
)
pod2man = find_program('pod2man', required: get_option('man'))
xsltproc = find_program('xsltproc', required: get_option('gtk_doc'))
# StateDirectory was introduced in systemd 235
systemd_dep = dependency('systemd', version: '>= 235', required: false)
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')
endif
if get_option('systemd') and systemd_unit_dir == ''
error('systemd development files or systemd_system_unit_dir is needed for systemd support.')
endif
dbus_service_dir = get_option('dbus_service_dir')
dbus_data_dir = datadir
dbus_interfaces_dir = ''
if dbus_dep.found()
if dbus_service_dir == ''
dbus_service_dir = dbus_dep.get_pkgconfig_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')
endif
dbus_conf_dir = dbus_data_dir / 'dbus-1/system.d'
if dbus_service_dir == ''
dbus_service_dir = datadir / 'dbus-1/system-services'
endif
if dbus_interfaces_dir == ''
dbus_interfaces_dir = datadir / 'dbus-1/interfaces'
endif
polkit_policy_directory = polkit_gobject_dep.get_pkgconfig_variable('policydir')
# Tests dependencies
pam_wrapper_dep = dependency('pam_wrapper', required: get_option('pam'))
xmllint = find_program('xmllint', required: false)
python3 = find_program('python3') # No meson without it!
python3_test_modules = {
'cairo': true,
'dbus': true,
'dbusmock': true,
'gi': true,
'gi.repository.FPrint': true,
'pypamtest': get_option('pam'),
}
python3_available_modules = []
foreach module, required : python3_test_modules
if required and run_command(python3, '-c', 'import @0@'.format(module)).returncode() != 0
error('Python3 module \'' + module + '\' required by test suite not found')
endif
endforeach
cdata = configuration_data()
cdata.set_quoted('GETTEXT_PACKAGE', meson.project_name())
cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
cdata.set_quoted('VERSION', meson.project_version())
cdata.set_quoted('SYSCONFDIR', sysconfdir)
cdata.set('POLKIT_HAS_AUTOPOINTERS', polkit_gobject_dep.version().version_compare('>= 0.114'))
config_h = configure_file(
input: 'config.h.in',
output: 'config.h',
configuration: cdata
)
subdir('src')
subdir('data')
subdir('utils')
if get_option('pam')
subdir('pam')
endif
if get_option('gtk_doc')
subdir('doc')
endif
subdir('tests')
subdir('po')
output = []
output += 'System paths:'
output += ' prefix: ' + get_option('prefix')
output += ' fprintd daemon directory: ' + fprintd_installdir
output += ' fprintd modules directory: ' + fprintd_plugindir
output += ' fprintd prints storage directory: ' + storage_path
output += ' DBus configuration directory: ' + dbus_conf_dir
output += ' DBus service directory: ' + dbus_service_dir
output += ' DBus interfaces directory: ' + dbus_interfaces_dir
output += ' Polkit policy directory: ' + polkit_policy_directory
output += ' Systemd service directory: ' + systemd_unit_dir
if get_option('pam')
output += ' PAM module directory: ' + pam_modules_dir
endif
output += '\nOptional features:\n'
output += ' PAM module: ' + pam_dep.found().to_string()
output += ' Manuals: ' + get_option('man').to_string()
output += ' GTK Doc: ' + get_option('gtk_doc').to_string()
output += ' XML Linter ' + xmllint.found().to_string()
output += '\nTest setup:\n'
output += ' With address sanitizer: ' + address_sanitizer.to_string()
message('\n'+'\n'.join(output)+'\n')

25
meson_options.txt Normal file
View File

@ -0,0 +1,25 @@
option('pam',
description: 'Build the fprintd PAM module',
type: 'boolean',
value: true)
option('man',
description: 'Generate the man files',
type: 'boolean',
value: true)
option('systemd',
description: 'Install system service files',
type: 'boolean',
value: true)
option('systemd_system_unit_dir',
description: 'Directory for systemd service files',
type: 'string')
option('dbus_service_dir',
description: 'Directory for dbus service files',
type: 'string')
option('pam_modules_dir',
description: 'Directory for PAM modules',
type: 'string')
option('gtk_doc',
type: 'boolean',
value: false,
description: 'Use gtk-doc to build documentation')

View File

@ -1,22 +0,0 @@
if HAVE_PAM
pammod_LTLIBRARIES = pam_fprintd.la
pammoddir=$(libdir)/security
pam_fprintd_la_SOURCES = pam_fprintd.c $(MARSHALFILES)
pam_fprintd_la_CFLAGS = -fPIC $(WARN_CFLAGS) $(GLIB_CFLAGS) -DLOCALEDIR="\"$(localedir)\""
pam_fprintd_la_LDFLAGS = -avoid-version -module -Wl,-z,nodelete
pam_fprintd_la_LIBADD = $(PAM_LIBS) $(GLIB_LIBS)
MARSHALFILES = marshal.c marshal.h
GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0`
BUILT_SOURCES = $(MARSHALFILES)
marshal.h: $(top_srcdir)/src/fprintd-marshal.list
( $(GLIB_GENMARSHAL) --prefix=fprintd_marshal $(top_srcdir)/src/fprintd-marshal.list --header > marshal.h )
marshal.c: marshal.h
( $(GLIB_GENMARSHAL) --prefix=fprintd_marshal $(top_srcdir)/src/fprintd-marshal.list --body --header > marshal.c )
endif
EXTRA_DIST = pam_fprintd.c fingerprint-strings.h

View File

@ -1,7 +1,7 @@
/*
* Helper functions to translate statuses and actions to strings
* Copyright (C) 2008 Bastien Nocera <hadess@hadess.net>
*
*
* Experimental code. This will be moved out of fprintd into it's own
* package once the system has matured.
*
@ -9,109 +9,147 @@
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
struct {
const char *dbus_name;
const char *place_str_generic;
const char *place_str_specific;
const char *swipe_str_generic;
const char *swipe_str_specific;
#ifndef _GNU_SOURCE
#error _GNU_SOURCE must be defined
#endif
#include <stdio.h>
#include <stdbool.h>
#define GNUC_UNUSED __attribute__((__unused__))
static bool
str_equal (const char *a, const char *b)
{
if (a == NULL && b == NULL)
return true;
if (a == NULL || b == NULL)
return false;
return strcmp (a, b) == 0;
}
struct
{
const char *dbus_name;
const char *place_str_generic;
const char *place_str_specific;
const char *swipe_str_generic;
const char *swipe_str_specific;
} fingers[] = {
{ "any",
N_("Place your finger on the fingerprint reader"),
N_("Place your finger on %s"),
N_("Swipe your finger across the fingerprint reader"),
N_("Swipe your finger across %s") },
{ "left-thumb",
N_("Place your left thumb on the fingerprint reader"),
N_("Place your left thumb on %s"),
N_("Swipe your left thumb across the fingerprint reader"),
N_("Swipe your left thumb across %s") },
{ "left-index-finger",
N_("Place your left index finger on the fingerprint reader"),
N_("Place your left index finger on %s"),
N_("Swipe your left index finger across the fingerprint reader"),
N_("Swipe your left index finger across %s") },
{ "left-middle-finger",
N_("Place your left middle finger on the fingerprint reader"),
N_("Place your left middle finger on %s"),
N_("Swipe your left middle finger across the fingerprint reader"),
N_("Swipe your left middle finger across %s") },
{ "left-ring-finger",
N_("Place your left ring finger on the fingerprint reader"),
N_("Place your left ring finger on %s"),
N_("Swipe your left ring finger across the fingerprint reader"),
N_("Swipe your left ring finger across %s") },
{ "left-little-finger",
N_("Place your left little finger on the fingerprint reader"),
N_("Place your left little finger on %s"),
N_("Swipe your left little finger across the fingerprint reader"),
N_("Swipe your left little finger across %s") },
{ "right-thumb",
N_("Place your right thumb on the fingerprint reader"),
N_("Place your right thumb on %s"),
N_("Swipe your right thumb across the fingerprint reader"),
N_("Swipe your right thumb across %s") },
{ "right-index-finger",
N_("Place your right index finger on the fingerprint reader"),
N_("Place your right index finger on %s"),
N_("Swipe your right index finger across the fingerprint reader"),
N_("Swipe your right index finger across %s") },
{ "right-middle-finger",
N_("Place your right middle finger on the fingerprint reader"),
N_("Place your right middle finger on %s"),
N_("Swipe your right middle finger across the fingerprint reader"),
N_("Swipe your right middle finger across %s") },
{ "right-ring-finger",
N_("Place your right ring finger on the fingerprint reader"),
N_("Place your right ring finger on %s"),
N_("Swipe your right ring finger across the fingerprint reader"),
N_("Swipe your right ring finger across %s") },
{ "right-little-finger",
N_("Place your right little finger on the fingerprint reader"),
N_("Place your right little finger on %s"),
N_("Swipe your right little finger across the fingerprint reader"),
N_("Swipe your right little finger across %s") },
{ NULL, NULL, NULL, NULL, NULL }
{ "any",
N_("Place your finger on the fingerprint reader"),
N_("Place your finger on %s"),
N_("Swipe your finger across the fingerprint reader"),
N_("Swipe your finger across %s") },
{ "left-thumb",
N_("Place your left thumb on the fingerprint reader"),
N_("Place your left thumb on %s"),
N_("Swipe your left thumb across the fingerprint reader"),
N_("Swipe your left thumb across %s") },
{ "left-index-finger",
N_("Place your left index finger on the fingerprint reader"),
N_("Place your left index finger on %s"),
N_("Swipe your left index finger across the fingerprint reader"),
N_("Swipe your left index finger across %s") },
{ "left-middle-finger",
N_("Place your left middle finger on the fingerprint reader"),
N_("Place your left middle finger on %s"),
N_("Swipe your left middle finger across the fingerprint reader"),
N_("Swipe your left middle finger across %s") },
{ "left-ring-finger",
N_("Place your left ring finger on the fingerprint reader"),
N_("Place your left ring finger on %s"),
N_("Swipe your left ring finger across the fingerprint reader"),
N_("Swipe your left ring finger across %s") },
{ "left-little-finger",
N_("Place your left little finger on the fingerprint reader"),
N_("Place your left little finger on %s"),
N_("Swipe your left little finger across the fingerprint reader"),
N_("Swipe your left little finger across %s") },
{ "right-thumb",
N_("Place your right thumb on the fingerprint reader"),
N_("Place your right thumb on %s"),
N_("Swipe your right thumb across the fingerprint reader"),
N_("Swipe your right thumb across %s") },
{ "right-index-finger",
N_("Place your right index finger on the fingerprint reader"),
N_("Place your right index finger on %s"),
N_("Swipe your right index finger across the fingerprint reader"),
N_("Swipe your right index finger across %s") },
{ "right-middle-finger",
N_("Place your right middle finger on the fingerprint reader"),
N_("Place your right middle finger on %s"),
N_("Swipe your right middle finger across the fingerprint reader"),
N_("Swipe your right middle finger across %s") },
{ "right-ring-finger",
N_("Place your right ring finger on the fingerprint reader"),
N_("Place your right ring finger on %s"),
N_("Swipe your right ring finger across the fingerprint reader"),
N_("Swipe your right ring finger across %s") },
{ "right-little-finger",
N_("Place your right little finger on the fingerprint reader"),
N_("Place your right little finger on %s"),
N_("Swipe your right little finger across the fingerprint reader"),
N_("Swipe your right little finger across %s") },
{ NULL, NULL, NULL, NULL, NULL }
};
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
static char *finger_str_to_msg(const char *finger_name, const char *driver_name, gboolean is_swipe)
GNUC_UNUSED static char *
finger_str_to_msg (const char *finger_name, const char *driver_name, bool is_swipe)
{
int i;
int i;
if (finger_name == NULL)
return NULL;
if (finger_name == NULL)
return NULL;
for (i = 0; fingers[i].dbus_name != NULL; i++) {
if (g_str_equal (fingers[i].dbus_name, finger_name)) {
if (is_swipe == FALSE) {
if (driver_name)
return g_strdup_printf (TR (fingers[i].place_str_specific), driver_name);
else
return g_strdup (TR (fingers[i].place_str_generic));
} else {
if (driver_name)
return g_strdup_printf (TR (fingers[i].swipe_str_specific), driver_name);
else
return g_strdup (TR (fingers[i].swipe_str_generic));
}
}
}
for (i = 0; fingers[i].dbus_name != NULL; i++)
{
if (!str_equal (fingers[i].dbus_name, finger_name))
continue;
if (is_swipe == false)
{
if (driver_name)
{
char *s;
int ret;
ret = asprintf (&s, TR (fingers[i].place_str_specific), driver_name);
return ret >= 0 ? s : NULL;
}
else
{
return strdup (TR (fingers[i].place_str_generic));
}
}
else
{
if (driver_name)
{
char *s;
int ret;
ret = asprintf (&s, TR (fingers[i].swipe_str_specific), driver_name);
return ret >= 0 ? s : NULL;
}
else
{
return strdup (TR (fingers[i].swipe_str_generic));
}
}
}
return NULL;
return NULL;
}
#pragma GCC diagnostic pop
@ -121,25 +159,27 @@ static char *finger_str_to_msg(const char *finger_name, const char *driver_name,
* verify-match
* verify-unknown-error
*/
static const char *verify_result_str_to_msg(const char *result, gboolean is_swipe)
GNUC_UNUSED static const char *
verify_result_str_to_msg (const char *result, bool is_swipe)
{
if (result == NULL)
return NULL;
if (result == NULL)
return NULL;
if (strcmp (result, "verify-retry-scan") == 0) {
if (is_swipe == FALSE)
return N_("Place your finger on the reader again");
else
return N_("Swipe your finger again");
}
if (strcmp (result, "verify-swipe-too-short") == 0)
return N_("Swipe was too short, try again");
if (strcmp (result, "verify-finger-not-centered") == 0)
return N_("Your finger was not centered, try swiping your finger again");
if (strcmp (result, "verify-remove-and-retry") == 0)
return N_("Remove your finger, and try swiping your finger again");
if (strcmp (result, "verify-retry-scan") == 0)
{
if (is_swipe == false)
return TR (N_("Place your finger on the reader again"));
else
return TR (N_("Swipe your finger again"));
}
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 (strcmp (result, "verify-remove-and-retry") == 0)
return TR (N_("Remove your finger, and try swiping your finger again"));
return NULL;
return NULL;
}
/* Cases not handled:
@ -147,24 +187,25 @@ static const char *verify_result_str_to_msg(const char *result, gboolean is_swip
* enroll-failed
* enroll-unknown-error
*/
static const char *enroll_result_str_to_msg(const char *result, gboolean is_swipe)
GNUC_UNUSED static const char *
enroll_result_str_to_msg (const char *result, bool is_swipe)
{
if (result == NULL)
return NULL;
if (result == NULL)
return NULL;
if (strcmp (result, "enroll-retry-scan") == 0 || strcmp (result, "enroll-stage-passed") == 0) {
if (is_swipe == FALSE)
return N_("Place your finger on the reader again");
else
return N_("Swipe your finger again");
}
if (strcmp (result, "enroll-swipe-too-short") == 0)
return N_("Swipe was too short, try again");
if (strcmp (result, "enroll-finger-not-centered") == 0)
return N_("Your finger was not centered, try swiping your finger again");
if (strcmp (result, "enroll-remove-and-retry") == 0)
return N_("Remove your finger, and try swiping your finger again");
if (strcmp (result, "enroll-retry-scan") == 0 || strcmp (result, "enroll-stage-passed") == 0)
{
if (is_swipe == false)
return TR (N_("Place your finger on the reader again"));
else
return TR (N_("Swipe your finger again"));
}
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 (strcmp (result, "enroll-remove-and-retry") == 0)
return TR (N_("Remove your finger, and try swiping your finger again"));
return NULL;
return NULL;
}

30
pam/meson.build Normal file
View File

@ -0,0 +1,30 @@
mapfile = files('pam_fprintd.ver')
pam_modules_dir = get_option('pam_modules_dir')
if pam_modules_dir == ''
pam_modules_dir = '/' / get_option('libdir') / 'security'
endif
pam_fprintd = shared_module('pam_fprintd',
name_prefix: '',
include_directories: [
include_directories('..'),
],
sources: [
'pam_fprintd.c',
'fingerprint-strings.h',
],
dependencies: [
libsystemd_dep,
pam_dep,
],
c_args: [
'-DLOCALEDIR="@0@"'.format(localedir),
],
link_args: [
'-Wl,--version-script,@0@/@1@'.format(meson.source_root(), mapfile[0]),
'-Wl,--unresolved-symbols=report-all',
],
link_depends: mapfile,
install: true,
install_dir: pam_modules_dir,
)

File diff suppressed because it is too large Load Diff

6
pam/pam_fprintd.ver Normal file
View File

@ -0,0 +1,6 @@
{
global:
pam_*;
local:
*;
};

View File

@ -0,0 +1,61 @@
/*
* pam_fprint: PAM module for fingerprint authentication through fprintd
* Copyright (C) 2020 Marco Trevisan <marco.trevisan@canonical.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
#include <stdlib.h>
/* Define auto-pointers functions, based on GLib Macros */
#define _CLEANUP_FUNC(func) __attribute__((cleanup (func)))
#define _PF_AUTOPTR_FUNC_NAME(TypeName) pf_autoptr_cleanup_ ## TypeName
#define _PF_AUTOPTR_TYPENAME(TypeName) TypeName ## _pf_autoptr
#define PF_DEFINE_AUTOPTR_CLEANUP_FUNC(TypeName, cleanup) \
typedef TypeName *_PF_AUTOPTR_TYPENAME (TypeName); \
static __attribute__((__unused__)) inline void \
_PF_AUTOPTR_FUNC_NAME (TypeName) (TypeName **_ptr) \
{ if (_ptr) (cleanup) (*_ptr); }
#define PF_DEFINE_AUTO_CLEAN_FUNC(TypeName, cleanup) \
static __attribute__((__unused__)) inline void \
_PF_AUTOPTR_FUNC_NAME (TypeName) (TypeName *_ptr) \
{ cleanup (_ptr); }
static inline void
autoptr_cleanup_generic_free (void *p)
{
void **pp = (void **) p;
free (*pp);
}
#define pf_autofree _CLEANUP_FUNC (autoptr_cleanup_generic_free)
#define pf_autoptr(TypeName) \
_CLEANUP_FUNC (_PF_AUTOPTR_FUNC_NAME (TypeName)) \
_PF_AUTOPTR_TYPENAME (TypeName)
#define pf_auto(TypeName) \
_CLEANUP_FUNC (_PF_AUTOPTR_FUNC_NAME (TypeName)) TypeName
PF_DEFINE_AUTOPTR_CLEANUP_FUNC (sd_bus, sd_bus_unref)
PF_DEFINE_AUTOPTR_CLEANUP_FUNC (sd_bus_message, sd_bus_message_unref)
PF_DEFINE_AUTOPTR_CLEANUP_FUNC (sd_bus_slot, sd_bus_slot_unref)
PF_DEFINE_AUTO_CLEAN_FUNC (sd_bus_error, sd_bus_error_free)

View File

@ -1,6 +1,8 @@
ar
as
ast
az
be
bg
bn_IN
ca
@ -19,6 +21,7 @@ fa
fi
fo
fr
fur
ga
gl
gu

View File

@ -3,3 +3,4 @@ src/main.c
src/manager.c
src/device.c
pam/fingerprint-strings.h
pam/pam_fprintd.c

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Arabic (http://www.transifex.com/freedesktop/fprintd/language/ar/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Assamese (http://www.transifex.com/freedesktop/fprintd/language/as/)\n"

270
po/ast.po Normal file
View File

@ -0,0 +1,270 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-08-27 03:15+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Asturian (http://www.transifex.com/freedesktop/fprintd/language/ast/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ast\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to verify fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr ""
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr ""
#: ../pam/fingerprint-strings.h:31
msgid "Place your finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
msgid "Swipe your finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
msgid "Place your left thumb on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:38
msgid "Swipe your left thumb across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:39
#, c-format
msgid "Swipe your left thumb across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:41
msgid "Place your left index finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:42
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:43
msgid "Swipe your left index finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:44
#, c-format
msgid "Swipe your left index finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:46
msgid "Place your left middle finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:47
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:48
msgid "Swipe your left middle finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:49
#, c-format
msgid "Swipe your left middle finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:51
msgid "Place your left ring finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:52
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:53
msgid "Swipe your left ring finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:54
#, c-format
msgid "Swipe your left ring finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:56
msgid "Place your left little finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:57
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:58
msgid "Swipe your left little finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:59
#, c-format
msgid "Swipe your left little finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:61
msgid "Place your right thumb on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:62
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:63
msgid "Swipe your right thumb across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:64
#, c-format
msgid "Swipe your right thumb across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:66
msgid "Place your right index finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:67
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:68
msgid "Swipe your right index finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:69
#, c-format
msgid "Swipe your right index finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:71
msgid "Place your right middle finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:72
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:73
msgid "Swipe your right middle finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:74
#, c-format
msgid "Swipe your right middle finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:76
msgid "Place your right ring finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:77
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:78
msgid "Swipe your right ring finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:79
#, c-format
msgid "Swipe your right ring finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:81
msgid "Place your right little finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:82
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:83
msgid "Swipe your right little finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:84
#, c-format
msgid "Swipe your right little finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:131 ../pam/fingerprint-strings.h:157
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:133 ../pam/fingerprint-strings.h:159
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:136 ../pam/fingerprint-strings.h:162
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:138 ../pam/fingerprint-strings.h:164
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:140 ../pam/fingerprint-strings.h:166
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Azerbaijani (http://www.transifex.com/freedesktop/fprintd/language/az/)\n"

270
po/be.po Normal file
View File

@ -0,0 +1,270 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2018-04-08 18:46+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Belarusian (http://www.transifex.com/freedesktop/fprintd/language/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: be\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to verify fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr ""
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr ""
#: ../pam/fingerprint-strings.h:31
msgid "Place your finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
msgid "Swipe your finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
msgid "Place your left thumb on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:38
msgid "Swipe your left thumb across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:39
#, c-format
msgid "Swipe your left thumb across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:41
msgid "Place your left index finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:42
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:43
msgid "Swipe your left index finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:44
#, c-format
msgid "Swipe your left index finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:46
msgid "Place your left middle finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:47
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:48
msgid "Swipe your left middle finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:49
#, c-format
msgid "Swipe your left middle finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:51
msgid "Place your left ring finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:52
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:53
msgid "Swipe your left ring finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:54
#, c-format
msgid "Swipe your left ring finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:56
msgid "Place your left little finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:57
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:58
msgid "Swipe your left little finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:59
#, c-format
msgid "Swipe your left little finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:61
msgid "Place your right thumb on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:62
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:63
msgid "Swipe your right thumb across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:64
#, c-format
msgid "Swipe your right thumb across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:66
msgid "Place your right index finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:67
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:68
msgid "Swipe your right index finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:69
#, c-format
msgid "Swipe your right index finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:71
msgid "Place your right middle finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:72
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:73
msgid "Swipe your right middle finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:74
#, c-format
msgid "Swipe your right middle finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:76
msgid "Place your right ring finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:77
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:78
msgid "Swipe your right ring finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:79
#, c-format
msgid "Swipe your right ring finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:81
msgid "Place your right little finger on the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:82
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:83
msgid "Swipe your right little finger across the fingerprint reader"
msgstr ""
#: ../pam/fingerprint-strings.h:84
#, c-format
msgid "Swipe your right little finger across %s"
msgstr ""
#: ../pam/fingerprint-strings.h:131 ../pam/fingerprint-strings.h:157
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:133 ../pam/fingerprint-strings.h:159
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:136 ../pam/fingerprint-strings.h:162
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:138 ../pam/fingerprint-strings.h:164
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:140 ../pam/fingerprint-strings.h:166
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

View File

@ -4,13 +4,14 @@
#
# Translators:
# Alexander Shopov <ash@kambanaria.org>, 2011
# Tony Ivanov <duskull88@fastmail.fm>, 2017
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-12-26 22:04+0000\n"
"Last-Translator: Tony Ivanov <duskull88@fastmail.fm>\n"
"Language-Team: Bulgarian (http://www.transifex.com/freedesktop/fprintd/language/bg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -54,12 +55,12 @@ msgstr "Устройството е заето от друг потребите
#: ../pam/fingerprint-strings.h:31
msgid "Place your finger on the fingerprint reader"
msgstr ""
msgstr "Поставете вашия пръст на четеца за пръстови отпечатъци"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your finger on %s"
msgstr ""
msgstr "Поставете вашият пръст на %s"
#: ../pam/fingerprint-strings.h:33
msgid "Swipe your finger across the fingerprint reader"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-08-03 17:23+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Bengali (India) (http://www.transifex.com/freedesktop/fprintd/language/bn_IN/)\n"
"MIME-Version: 1.0\n"

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2015-10-11 18:50+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:46+0000\n"
"Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n"
"Language-Team: Catalan (http://www.transifex.com/freedesktop/fprintd/language/ca/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-08-03 17:23+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Catalan (Valencian) (http://www.transifex.com/freedesktop/fprintd/language/ca@valencia/)\n"
"Language-Team: Catalan (Valencian) (http://www.transifex.com/freedesktop/fprintd/language/ca%40valencia/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

14
po/check-translations.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
po_dir=$(dirname $0)
for i in $po_dir/*.po ; do
if ! grep -q `basename $i | sed 's,.po,,'` $po_dir/LINGUAS; then
echo '**********************************';
echo '***' `basename $i | sed 's,.po,,'` missing from po/LINGUAS '***' ;
echo '**********************************';
exit 1;
fi;
done;
exit 0

View File

@ -8,15 +8,15 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech (http://www.transifex.com/freedesktop/fprintd/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Welsh (http://www.transifex.com/freedesktop/fprintd/language/cy/)\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-12-21 18:41+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 21:51+0000\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish (http://www.transifex.com/freedesktop/fprintd/language/da/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2014-09-22 15:28+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
"Language-Team: German (http://www.transifex.com/freedesktop/fprintd/language/de/)\n"
"MIME-Version: 1.0\n"

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:46+0000\n"
"Last-Translator: thanos <tomtryf@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.com/freedesktop/fprintd/language/el/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/freedesktop/fprintd/language/en_GB/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 10:24+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Esperanto (http://www.transifex.com/freedesktop/fprintd/language/eo/)\n"
"MIME-Version: 1.0\n"

View File

@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Adolfo Jayme-Barrientos, 2015
# Adolfo Jayme-Barrientos, 2014
# Adolfo Jayme Barrientos, 2015
# Adolfo Jayme Barrientos, 2014
# Daniel Mustieles <inactive+leo@transifex.com>, 2012
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2015-03-14 20:15+0000\n"
"Last-Translator: Adolfo Jayme-Barrientos\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Adolfo Jayme Barrientos\n"
"Language-Team: Spanish (http://www.transifex.com/freedesktop/fprintd/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Estonian (http://www.transifex.com/freedesktop/fprintd/language/et/)\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Basque (http://www.transifex.com/freedesktop/fprintd/language/eu/)\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Persian (http://www.transifex.com/freedesktop/fprintd/language/fa/)\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2013
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2013,2018
# Ville Skyttä <ville.skytta@iki.fi>, 2011,2016
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2016-08-04 21:07+0000\n"
"Last-Translator: Ville Skyttä <ville.skytta@iki.fi>\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2018-01-25 07:36+0000\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish (http://www.transifex.com/freedesktop/fprintd/language/fi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -21,7 +21,7 @@ msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"
msgstr "Tarkista sormenjälki"
msgstr "Vahvista sormenjälki"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to verify fingerprints."

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Faroese (http://www.transifex.com/freedesktop/fprintd/language/fo/)\n"
"MIME-Version: 1.0\n"

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:42+0000\n"
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
"Language-Team: French (http://www.transifex.com/freedesktop/fprintd/language/fr/)\n"
"MIME-Version: 1.0\n"

271
po/fur.po Normal file
View File

@ -0,0 +1,271 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Fabio Tomat <f.t.public@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-11-30 14:32+0000\n"
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
"Language-Team: Friulian (http://www.transifex.com/freedesktop/fprintd/language/fur/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fur\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"
msgstr "Verifiche une impronte digjitâl"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to verify fingerprints."
msgstr "I privileçs a son necessaris par verificâ lis improntis digjitâls."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Enroll new fingerprints"
msgstr "Regjistre gnovis improntis digjitâls"
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to enroll new fingerprints."
msgstr "I privileçs a son necessaris par regjistrâ gnovis improntis digjitâls."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Selezione un utent di regjistrâ"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr "I privileçs a son necessaris par regjistrâ gnovis improntis digjitâls par altris utents."
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Il dispositîf nol è stât rivendicât prime jessi doprât"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Il dispositîf al è za doprât di un altri utent"
#: ../pam/fingerprint-strings.h:31
msgid "Place your finger on the fingerprint reader"
msgstr "Met il to dêt sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your finger on %s"
msgstr "Met il to dêt su %s"
#: ../pam/fingerprint-strings.h:33
msgid "Swipe your finger across the fingerprint reader"
msgstr "Fâs cori il to dêt sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your finger across %s"
msgstr "Fâs cori il to dêt su %s"
#: ../pam/fingerprint-strings.h:36
msgid "Place your left thumb on the fingerprint reader"
msgstr "Met il poleâr de man çampe sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your left thumb on %s"
msgstr "Met il poleâr de man çampe su %s"
#: ../pam/fingerprint-strings.h:38
msgid "Swipe your left thumb across the fingerprint reader"
msgstr "Fâs cori il poleâr de man çampe sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:39
#, c-format
msgid "Swipe your left thumb across %s"
msgstr "Fâs cori il poleâr de man çampe su %s"
#: ../pam/fingerprint-strings.h:41
msgid "Place your left index finger on the fingerprint reader"
msgstr "Met l'indiç de man çampe sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:42
#, c-format
msgid "Place your left index finger on %s"
msgstr "Met l'indiç de man çampe su %s"
#: ../pam/fingerprint-strings.h:43
msgid "Swipe your left index finger across the fingerprint reader"
msgstr "Fâs cori l'indiç de man çampe sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:44
#, c-format
msgid "Swipe your left index finger across %s"
msgstr "Fâs cori l'indiç de man çampe su %s"
#: ../pam/fingerprint-strings.h:46
msgid "Place your left middle finger on the fingerprint reader"
msgstr "Met il dêt di mieç de man çampe sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:47
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Met il dêt di mieç de man çampe su %s"
#: ../pam/fingerprint-strings.h:48
msgid "Swipe your left middle finger across the fingerprint reader"
msgstr "Fâs cori il dêt di mieç de man çampe sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:49
#, c-format
msgid "Swipe your left middle finger across %s"
msgstr "Fâs cori il dêt di mieç de man çampe su %s"
#: ../pam/fingerprint-strings.h:51
msgid "Place your left ring finger on the fingerprint reader"
msgstr "Met il dêt dal anel de man çampe sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:52
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Met il dêt dal anel de man çampe su %s"
#: ../pam/fingerprint-strings.h:53
msgid "Swipe your left ring finger across the fingerprint reader"
msgstr "Fâs cori il dêt dal anel de man çampe sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:54
#, c-format
msgid "Swipe your left ring finger across %s"
msgstr "Fâs cori il dêt dal anel de man çampe su %s"
#: ../pam/fingerprint-strings.h:56
msgid "Place your left little finger on the fingerprint reader"
msgstr "Met il dêt piçul de man çampe su letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:57
#, c-format
msgid "Place your left little finger on %s"
msgstr "Met il dêt piçul de man çampe su %s"
#: ../pam/fingerprint-strings.h:58
msgid "Swipe your left little finger across the fingerprint reader"
msgstr "Fâs cori il dêt piçul de man çampe su letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:59
#, c-format
msgid "Swipe your left little finger across %s"
msgstr "Fâs cori il dêt piçul de man çampe su %s"
#: ../pam/fingerprint-strings.h:61
msgid "Place your right thumb on the fingerprint reader"
msgstr "Met il poleâr de man drete sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:62
#, c-format
msgid "Place your right thumb on %s"
msgstr "Met il poleâr de man drete su %s"
#: ../pam/fingerprint-strings.h:63
msgid "Swipe your right thumb across the fingerprint reader"
msgstr "Fâs cori il poleâr de man drete sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:64
#, c-format
msgid "Swipe your right thumb across %s"
msgstr "Fâs cori il poleâr de man drete su %s"
#: ../pam/fingerprint-strings.h:66
msgid "Place your right index finger on the fingerprint reader"
msgstr "Met l'indiç de man drete sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:67
#, c-format
msgid "Place your right index finger on %s"
msgstr "Met l'indiç de man drete su %s"
#: ../pam/fingerprint-strings.h:68
msgid "Swipe your right index finger across the fingerprint reader"
msgstr "Fâs cori l'indiç de man drete sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:69
#, c-format
msgid "Swipe your right index finger across %s"
msgstr "Fâs cori l'indiç de man drete su %s"
#: ../pam/fingerprint-strings.h:71
msgid "Place your right middle finger on the fingerprint reader"
msgstr "Met il dêt di mieç de man drete sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:72
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Met il dêt di mieç de man drete su %s"
#: ../pam/fingerprint-strings.h:73
msgid "Swipe your right middle finger across the fingerprint reader"
msgstr "Fâs cori il dêt di mieç de man drete sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:74
#, c-format
msgid "Swipe your right middle finger across %s"
msgstr "Fâs cori il dêt di mieç de man drete su %s"
#: ../pam/fingerprint-strings.h:76
msgid "Place your right ring finger on the fingerprint reader"
msgstr "Met il dêt dal anel de man drete sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:77
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Met il dêt dal anel de man drete su %s"
#: ../pam/fingerprint-strings.h:78
msgid "Swipe your right ring finger across the fingerprint reader"
msgstr "Fâs cori il dêt dal anel de man drete sul letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:79
#, c-format
msgid "Swipe your right ring finger across %s"
msgstr "Fâs cori il dêt dal anel de man drete su %s"
#: ../pam/fingerprint-strings.h:81
msgid "Place your right little finger on the fingerprint reader"
msgstr "Met il dêt piçul de man drete su letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:82
#, c-format
msgid "Place your right little finger on %s"
msgstr "Met il dêt piçul de man drete su %s"
#: ../pam/fingerprint-strings.h:83
msgid "Swipe your right little finger across the fingerprint reader"
msgstr "Fâs cori il dêt piçul de man drete su letôr di improntis digjitâls"
#: ../pam/fingerprint-strings.h:84
#, c-format
msgid "Swipe your right little finger across %s"
msgstr "Fâs cori il dêt piçul de man drete su %s"
#: ../pam/fingerprint-strings.h:131 ../pam/fingerprint-strings.h:157
msgid "Place your finger on the reader again"
msgstr "Torne met il dêt sul letôr"
#: ../pam/fingerprint-strings.h:133 ../pam/fingerprint-strings.h:159
msgid "Swipe your finger again"
msgstr "Torne fâs cori il dêt"
#: ../pam/fingerprint-strings.h:136 ../pam/fingerprint-strings.h:162
msgid "Swipe was too short, try again"
msgstr "La passade e jere masse curte, torne prove"
#: ../pam/fingerprint-strings.h:138 ../pam/fingerprint-strings.h:164
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Il dêt nol jere centrât, prove a tornâ a fâ cori il dêt di gnûf"
#: ../pam/fingerprint-strings.h:140 ../pam/fingerprint-strings.h:166
msgid "Remove your finger, and try swiping your finger again"
msgstr "Gjave il dêt e prove a tornâ a fâ cori il dêt di gnûf"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-08-03 17:23+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Irish (http://www.transifex.com/freedesktop/fprintd/language/ga/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-23 18:02+0000\n"
"Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician (http://www.transifex.com/freedesktop/fprintd/language/gl/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Gujarati (http://www.transifex.com/freedesktop/fprintd/language/gu/)\n"

View File

@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-08-03 17:23+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Hebrew (http://www.transifex.com/freedesktop/fprintd/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-08-03 17:23+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Hindi (http://www.transifex.com/freedesktop/fprintd/language/hi/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 14:12+0000\n"
"Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
"Language-Team: Croatian (http://www.transifex.com/freedesktop/fprintd/language/hr/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: kelemeng <kelemeng@ubuntu.com>\n"
"Language-Team: Hungarian (http://www.transifex.com/freedesktop/fprintd/language/hu/)\n"
"MIME-Version: 1.0\n"

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2015-10-18 19:57+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 14:10+0000\n"
"Last-Translator: Martijn Dekker <mcdutchie@hotmail.com>\n"
"Language-Team: Interlingua (http://www.transifex.com/freedesktop/fprintd/language/ia/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/freedesktop/fprintd/language/id/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
"Language-Team: Italian (http://www.transifex.com/freedesktop/fprintd/language/it/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 10:41+0000\n"
"Last-Translator: Tomoyuki KATO <inactive+katomo@transifex.com>\n"
"Language-Team: Japanese (http://www.transifex.com/freedesktop/fprintd/language/ja/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Georgian (http://www.transifex.com/freedesktop/fprintd/language/ka/)\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ka\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-08-03 17:23+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Kazakh (http://www.transifex.com/freedesktop/fprintd/language/kk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: kk\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Kannada (http://www.transifex.com/freedesktop/fprintd/language/kn/)\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: kn\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2015-01-17 11:53+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:46+0000\n"
"Last-Translator: Shinjo Park <kde@peremen.name>\n"
"Language-Team: Korean (http://www.transifex.com/freedesktop/fprintd/language/ko/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-08-03 17:23+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Lithuanian (http://www.transifex.com/freedesktop/fprintd/language/lt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lt\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 10:32+0000\n"
"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian (http://www.transifex.com/freedesktop/fprintd/language/lv/)\n"
"MIME-Version: 1.0\n"

6
po/meson.build Normal file
View File

@ -0,0 +1,6 @@
i18n.gettext(meson.project_name(), preset: 'glib')
test('check-translations',
find_program('check-translations.sh'),
suite: ['dist'],
)

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Malayalam (http://www.transifex.com/freedesktop/fprintd/language/ml/)\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Marathi (http://www.transifex.com/freedesktop/fprintd/language/mr/)\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Malay (http://www.transifex.com/freedesktop/fprintd/language/ms/)\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Norwegian Bokmål (http://www.transifex.com/freedesktop/fprintd/language/nb/)\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 10:52+0000\n"
"Last-Translator: Richard E. van der Luit <nippur@fedoraproject.org>\n"
"Language-Team: Dutch (http://www.transifex.com/freedesktop/fprintd/language/nl/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Norwegian Nynorsk (http://www.transifex.com/freedesktop/fprintd/language/nn/)\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2016-02-26 17:03+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-23 20:04+0000\n"
"Last-Translator: Cédric Valmary <cvalmary@yahoo.fr>\n"
"Language-Team: Occitan (post 1500) (http://www.transifex.com/freedesktop/fprintd/language/oc/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Oriya (http://www.transifex.com/freedesktop/fprintd/language/or/)\n"

View File

@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# A S Alam <apreet.alam@gmail.com>, 2012-2013
# A S Alam <alam.yellow@gmail.com>, 2012-2013
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"Last-Translator: A S Alam <apreet.alam@gmail.com>\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:46+0000\n"
"Last-Translator: A S Alam <alam.yellow@gmail.com>\n"
"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/freedesktop/fprintd/language/pa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -8,15 +8,15 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2016-08-29 15:56+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/freedesktop/fprintd/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2015-12-01 10:12+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 21:51+0000\n"
"Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n"
"Language-Team: Portuguese (http://www.transifex.com/freedesktop/fprintd/language/pt/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 11:53+0000\n"
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/freedesktop/fprintd/language/pt_BR/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: hadess <hadess@hadess.net>\n"
"Language-Team: Romanian (http://www.transifex.com/freedesktop/fprintd/language/ro/)\n"
"MIME-Version: 1.0\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:46+0000\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian (http://www.transifex.com/freedesktop/fprintd/language/ru/)\n"
"MIME-Version: 1.0\n"

View File

@ -3,21 +3,21 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# pavolzetor <pavol@klacansky.com>, 2012
# pavolzetor <inactive+pavolzetor@transifex.com>, 2012
# Pavol Šimo <palo.simo@gmail.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"Last-Translator: pavolzetor <pavol@klacansky.com>\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:37+0000\n"
"Last-Translator: pavolzetor <inactive+pavolzetor@transifex.com>\n"
"Language-Team: Slovak (http://www.transifex.com/freedesktop/fprintd/language/sk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sk\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Matej Urbančič <>\n"
"Language-Team: Slovenian (http://www.transifex.com/freedesktop/fprintd/language/sl/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Albanian (http://www.transifex.com/freedesktop/fprintd/language/sq/)\n"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2014-11-22 10:45+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian (http://www.transifex.com/freedesktop/fprintd/language/sr/)\n"
"MIME-Version: 1.0\n"

Some files were not shown because too many files have changed in this diff Show More