682 Commits

Author SHA1 Message Date
564502577e Update README 2021-12-11 14:18:39 -05:00
ab9bc17ed5 fix segfault, remove unnecessary files 2021-12-11 13:24:01 -05:00
8d59ec751f Differentiate file name 2021-12-09 23:24:07 -05:00
2f22fab80a clean unneeded files 2021-12-09 23:22:07 -05:00
6870e3c370 Fix build, undo remove config 2021-12-09 23:10:26 -05:00
c87dc3de93 Gross Hack implementation base 2021-12-09 22:22:17 -05:00
6981e033be Translated using Weblate (Indonesian)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Andika Triwidada <andika@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/id/
Translation: fprintd/fprintd
2021-12-08 13:16:24 +01:00
160229a645 Translated using Weblate (Korean)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: simmon <simmon@nplob.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/ko/
Translation: fprintd/fprintd
2021-12-08 13:16:24 +01:00
cdf61c423f Translated using Weblate (Swedish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Luna Jernberg <bittin@reimu.nl>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/sv/
Translation: fprintd/fprintd
2021-12-08 13:16:24 +01:00
650d3499a1 Translated using Weblate (Turkish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/tr/
Translation: fprintd/fprintd
2021-12-08 13:16:24 +01:00
674008cabd Translated using Weblate (Ukrainian)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Yuri Chornoivan <yurchor@ukr.net>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/uk/
Translation: fprintd/fprintd
2021-12-08 13:16:24 +01:00
c43dde880e Translated using Weblate (German)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/de/
Translation: fprintd/fprintd
2021-12-08 13:16:23 +01:00
a6efa2a7c2 Translated using Weblate (Polish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Piotr Drąg <piotrdrag@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/pl/
Translation: fprintd/fprintd
2021-12-08 13:16:23 +01:00
9a1a641b03 Translated using Weblate (Russian)
Currently translated at 88.3% (53 of 60 strings)

Co-authored-by: D P <dpokrasko@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/ru/
Translation: fprintd/fprintd
2021-12-08 13:16:23 +01:00
8fb67836b8 Translated using Weblate (Czech)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Pavel Borecki <pavel.borecki@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/cs/
Translation: fprintd/fprintd
2021-12-08 13:16:23 +01:00
73cb590acc Translated using Weblate (Finnish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Jan Kuparinen <copper_fin@hotmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/fi/
Translation: fprintd/fprintd
2021-12-08 13:16:23 +01:00
abf3831755 Translated using Weblate (French)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Thibault HEINRICH <thibault@lexikal-seo.net>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/fr/
Translation: fprintd/fprintd
2021-12-08 13:16:23 +01:00
7c1e1f67bf po: Update PO files based on template 2021-12-02 10:59:28 +01:00
4ed76ba997 Translated using Weblate (French)
Currently translated at 100.0% (56 of 56 strings)

Co-authored-by: Thibault HEINRICH <thibault@lexikal-seo.net>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/fr/
Translation: fprintd/fprintd
2021-11-30 11:10:56 +01:00
2d9543fe94 po: Update POT template
This was forgotten after the last string changes in commit b483edbe.

Co-authored-by: Thibault HEINRICH <thibault.heinrich@ac-nancy-metz.fr>

Fixes: #123
2021-11-30 09:28:26 +00:00
865439a665 Translated using Weblate (Friulian)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Fabio Tomat <f.t.public@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/fur/
Translation: fprintd/fprintd
2021-11-07 17:18:56 +01:00
a734ceff71 Release 1.94.1 2021-11-03 15:34:26 +01:00
0595f416f9 data: Fix udev event delivery for systemd service
PrivateNetwork=true is a bad idea, as it means that udev events cannot
be delivered. Remove it, we already restrict the address families
sufficiently anyway.

Closes: #119
2021-11-03 10:46:03 +00:00
38c21e3952 Fix typo in 0.5.1 release notes 2021-11-02 15:13:05 +00:00
50943b1bd4 build: Do not use positional arguments in i18n.merge_file
This was never really used and it's breaking meson 60.
While this may just become a warning in 60.1, it's just better to avoid
using it.

See: https://github.com/mesonbuild/meson/issues/9441
2021-11-02 15:06:29 +00:00
245dcfa218 fix: fix typo in man page 2021-10-30 16:49:45 -03:00
090016fdcd Translated using Weblate (Spanish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Emilio Herrera <ehespinosa57@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/es/
Translation: fprintd/fprintd
2021-10-03 17:05:10 +02:00
90babad082 Translated using Weblate (Croatian)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Gogo Gogsi <linux.hr@protonmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/hr/
Translation: fprintd/fprintd
2021-10-03 17:05:10 +02:00
47af2bada5 Update it.po 2021-09-15 15:26:45 +00:00
c1bc6b4da0 Translated using Weblate (Czech)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Pavel Borecki <pavel.borecki@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/cs/
Translation: fprintd/fprintd
2021-09-15 17:24:36 +02:00
0bb8271ede Translated using Weblate (German)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/de/
Translation: fprintd/fprintd
2021-09-15 17:24:36 +02:00
b393eddd4b Translated using Weblate (Croatian)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Gogo Gogsi <linux.hr@protonmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/hr/
Translation: fprintd/fprintd
2021-09-15 17:24:36 +02:00
2c9cf975a2 Translated using Weblate (Japanese)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Takuro Onoue <kusanaginoturugi@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/ja/
Translation: fprintd/fprintd
2021-09-15 17:24:36 +02:00
29a976b483 Translated using Weblate (Marathi)
Currently translated at 100.0% (60 of 60 strings)

Translated using Weblate (Marathi)

Currently translated at 5.0% (3 of 60 strings)

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: girish joshi <girish946@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/mr/
Translation: fprintd/fprintd
2021-09-15 17:24:36 +02:00
7d4331b29a ci: Reference image directly for forks
Otherwise forks will not find the image and things fall apart (due to
the method of how we build the image).
2021-09-15 17:20:14 +02:00
b440acb57d tests: Use dbusmock start_system_bus instead of GLib server 2021-09-15 15:06:06 +00:00
0cf0fea902 tests: Better cleanup helper processes and objects
We were leaking the bus connections for the proxy objects. Also, now the
subprocesses will be forcefully killed at shutdown.
2021-09-15 15:06:06 +00:00
b3d6bf0825 tests: Set G_MESSAGES_DEBUG=all for daemon as it is needed
Otherwise executing the test script outside of the meson environment
will fail as the inhibitor test relies on being able to parse the log.
2021-09-15 15:06:06 +00:00
fc65055279 device: Always report selected finger if there is only one
If the user specified "any" finger, then we would mirror this back even
if there is only one finger available. Change it so that we act as if
that finger was passed explicitly, meaning we use the "verify" method
and also send the signal for the selected finger accordingly.
2021-09-15 15:00:14 +00:00
02468366b2 ci: Add patch to dependencies
Seems like this is not pulled in indirectly anymore.
2021-09-15 16:48:54 +02:00
3d309ea400 ci: Update to new FDO templates 2021-09-15 16:33:31 +02:00
b483edbe92 device.policy: Fix permission dialogue titles
Fix the action description for some actions which are used to both
enroll and delete fingerprints for users.

Closes: #116
2021-09-02 17:14:07 +02:00
e4c155d5b8 tests: Give fprintd some more time to be ready
While the delay inhibitor is grabbed almost immediately, this can be
slow enough to not have happened immediately after the bus name has been
registered. Add a generous timeout to prevent issues.
2021-08-25 15:27:26 +02:00
717a919996 tests: Make class cleanup more robust
Use addClassCleanup rather than doing cleanup in tearDownClass, which
may not be called in all cases.
2021-08-25 15:22:42 +02:00
e6fc854a9a tests: Use addCleanup to stop polkitd 2021-08-25 15:19:43 +02:00
5d7422e17a tests: Cleanup inhibitor fifo properly
Unlink the fifo itself and use addCleanup to close it.
2021-08-25 13:43:30 +02:00
fc7e058e93 Release 1.94.0 2021-08-20 13:59:06 +00:00
ff4ba1da47 data: Allow access to hidraw devices
The elanspi driver needs access to a hidraw device in order to reset the
SPI reader.
2021-08-20 13:59:06 +00:00
626128a0fa device: Remove local storage prints if they've been removed from device
If a print we have stored locally is not available in device anymore, we
need to cleanup the local database.

We do not get a proper DATA_NOT_FOUND error for most devices (indeed, at
this point no device does this properly). As such, do this when we see a
DATA_NOT_FOUND error and the first time that we get a verify-no-match
results on a device which is capable of listing all known prints.

Co-Authored-by: Marco Trevisan (Treviño) <mail@3v1n0.net>
2021-08-19 18:22:36 +02:00
0bba073dff device: Handle data not-found error as verify-no-match
In case we got a data-not-found error, it means that the device has not
such prints stored, and thus the verification failed, and there's no
need to expose the internal reasons to fprintd clients.
2021-08-18 13:09:38 +02:00
ec74c849be Translated using Weblate (Indonesian)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Andika Triwidada <andika@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/id/
Translation: fprintd/fprintd
2021-08-17 04:04:53 +02:00
e09d90c81b Update ca.po 2021-08-15 12:03:43 +00:00
e3b0d52ce5 device: Catch client disconnect during Release
If the client disconnected while the release call was stopping the
current action, then the disconnect will be processed. This means that
the device can be closed already and the session is destroyed.

Add a check for this, in the same way that the vanished handler deals
with this corner case.
2021-08-11 08:58:26 +00:00
70182083a1 Implement suspend/resume handling 2021-08-09 13:25:11 +02:00
66e7df1105 Keep alive fprintd if any device is WARM or HOT
This renames the internal "in-use" property to "busy" and redefines the
value to be TRUE either if a client is connected or if the device is
considered WARM or HOT.

This prevents fprintd shutdown while devices are warm in order to ensure
that the libfprint hardware protection is functional.
2021-08-09 13:25:11 +02:00
96b911913e data: Allow tuning USB parameters
Newer libfprint versions try to tune the wakeup and persist option of
USB devices. Add access rules to permit this.
2021-08-06 15:31:24 +02:00
37e6939fa9 tests: Verify PAM VerifyStop/disconnect behaviour
For verify-match, the PAM module should simply drop off the bus. In
other cases it should correctly run VerifyStop and Release the device.
Verify this for verify-match and verify-no-match.
2021-08-02 13:00:43 +02:00
bb23b7e9d0 pam: Immediately return verify-match/verify-no-match
In the verify-match case, this means disconnecting from the bus rather
than stopping the verification. This is the only way to make sure that
the result is immediately reported and we do not wait for the device to
be idle again (which generally means waiting for finger removal).

In the verify-no-match case we simply send the string first before the
operation is stopped. An exceeded retry limit is only reported after
VerifyStop has finished.
2021-08-02 13:00:43 +02:00
80eb673e83 tests: Remove broken test_verify_stop_restarts_immediately test
Before VerifyStart can be called again the current verify operation
needs to be completed. This requires waiting for VerifyStop to happen.

As such, remove the test, which is expected to fail randomly.
2021-08-02 13:00:43 +02:00
88d7d97c0d device: Remove incorrect comment about delaying verify-no-match result
We report a verify-match/verify-no-match immediately to the user. The
comment is not accurate.
2021-08-02 13:00:43 +02:00
6bc19c8892 tests: Speed up tests by only using parts of the image
We just need large enough samples to tell them apart correctly. For this
a 128x128 area from the center of each image is sufficient.

This speeds up the test run considerably. Other ways of achieving this
could be to also lower the number of enroll steps for the image device.
2021-07-31 11:53:33 +02:00
c690542e7c ci: Conveniently expose coverage report 2021-07-31 11:53:33 +02:00
5f6e80de01 file_storage: Ensure username/finger match our expectations
Otherwise we would need to track this separately, which would be a bit
of a pain.

The alternative would be simply overriding the values.
2021-07-30 23:52:00 +02:00
3c8ac241b8 tests: Try to show backtrace when killed by SIGTERM
This means that we may manage to show a backtrace if meson kills the
test process due to a timeout.
2021-07-30 23:52:00 +02:00
2bf6d6a266 device: Print error if deletion fails during garbage collection 2021-07-30 23:52:00 +02:00
be45b44337 meson: Set GLIB_VERSION_{MIN_REQUIRED,MAX_ALLOWED}
To help catch errors where we accidentally use the wrong symbols.

Closes: #42
2021-07-30 15:52:22 +02:00
572c119fd4 device: Do not use GLib 2.62 API to extend GPtrArray
We are currently only depending on 2.56.
2021-07-30 15:52:22 +02:00
980bab5135 device: Do not use GLib 2.58 API to pop from GPtrArray
We currently only depend on GLib 2.52.
2021-07-30 15:52:22 +02:00
161278cacd device: Add a memory barrier when getting session pointer
The test suite ran into a very rare error where it seemed to get stuck
during authorization. A possible explanation is that the priv->_session
pointer re-fetching is optimized away and the pointer just continues to
contain the invalid placeholder rather than an updated value.

Use g_atomic_pointer_get in order to avoid this possibility entirely.
2021-07-26 13:09:13 +00:00
2dd1cd8fc3 Translated using Weblate (French)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Claude Paroz <claude@2xlibre.net>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/fr/
Translation: fprintd/fprintd
2021-07-25 14:04:40 +02:00
0de01da150 Translated using Weblate (Polish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Piotr Drąg <piotrdrag@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/pl/
Translation: fprintd/fprintd
2021-07-24 13:08:32 +02:00
0844002b78 Translated using Weblate (Finnish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Jan Kuparinen <copper_fin@hotmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/fi/
Translation: fprintd/fprintd
2021-07-23 14:04:35 +02:00
9ae3c16f2d tests: Pull more OutputChecker fixes
While debugging the g-s-d testsuite a few more issues in the
OutputChecker code came up. Pull in these fixes ensuring that EOF and
the read side FD are handled correctly.
2021-07-23 13:50:52 +02:00
f4995dcabe tests: Pull OutputChecker fixes
Mark the thread as daemon. Also use poll and fix a wrong variable
reference.
2021-07-19 21:38:25 +00:00
8c0876ae49 Translated using Weblate (Korean)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: simmon <simmon@nplob.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/ko/
Translation: fprintd/fprintd
2021-07-16 22:04:35 +02:00
3a96b6f2f0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Rafael Fontenelle <rafaelff@gnome.org>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/pt_BR/
Translation: fprintd/fprintd
2021-07-16 22:04:35 +02:00
688f9b0acf Translated using Weblate (Swedish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Anders Jonsson <anders.jonsson@norsjovallen.se>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/sv/
Translation: fprintd/fprintd
2021-07-16 22:04:35 +02:00
5b9e237884 Translated using Weblate (Turkish)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/tr/
Translation: fprintd/fprintd
2021-07-16 22:04:35 +02:00
8288c0efc7 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (60 of 60 strings)

Co-authored-by: Yuri Chornoivan <yurchor@ukr.net>
Translate-URL: https://translate.fedoraproject.org/projects/fprintd/fprintd/uk/
Translation: fprintd/fprintd
2021-07-16 22:04:35 +02:00
0d2dbc6179 Switch to the Fedora weblate instance for translations
Closes: #78
2021-07-01 13:11:20 +02:00
b760a82ac6 Update for 1.92.0 2021-07-01 13:06:08 +02:00
f398d09b23 device: Delete existing print in EnrollStart
gnome-control-center expects to be able to re-enroll an existing print
when calling EnrollStart without deleting it first. As such, implicitly
delete the existing print rather than throwing an error.

Ideally, we'll change the API, but we need to give API users time to
adjust to the world.
2021-07-01 12:59:11 +02:00
9ec1747b84 Revert "pam_fprintd: Just return a PAM_AUTH_ERROR on unknown errors"
This reverts commit ecf6b7c323.

The idea of the commit was to make device failures less fatal to the
system. Unfortunately, we can fail quickly in this case, and returning
PAM_AUTH_ERR means that the user might run into a retry limit due to
this.

Go back to reporting PAM_AUTHINFO_UNAVAIL, it appears as the lesser evil
right now. Ideally we want to a way to tell the upper stack to retry
authentication whenever there is a good opportunity, but to not consider
it as an authentication failure.
2021-07-01 12:59:11 +02:00
6482e2dbd4 Update .po files and add .pot into git 2021-07-01 12:59:11 +02:00
ac9a1538bb po: Update translations from transifex 2021-07-01 12:59:11 +02:00
7aecec1449 data: Restrict syscall usage of fprintd
fprintd only needs very few syscalls. Mainly normal IO operations and
ioctl for USB access. All of this is covered by @system-service, we
could likely restrict it quite a bit more though.
2021-06-29 21:10:59 +02:00
0f7340130e data: Disallow fprintd to read kernel logs 2021-06-29 21:10:03 +02:00
fcd7e9bc76 data: Only allow access to USB and SPI devices
That is all that fprintd. Note that ProtectClock already restricts
device access and other device types need to be listed explicitly
because of this.
2021-06-29 20:48:16 +02:00
00629fc374 pam: Mark no-match error message as translatable 2021-06-25 16:07:53 +00:00
d7da04fa4b tests: Check storage is cleared if device does not support listing
On the first enroll, the storage must be cleared. Check that this is the
case for the first enroll but not the second.
2021-06-25 16:56:49 +02:00
7f2b5fe7ff device: Avoid clearing storage when we can garbage collect
If the device supports listing prints, then we can do more targeted
deletes once the storage runs out. As such, do not try to clear the
storage on first enroll (therefore allowing dual boot setups to work to
a limited degree).
2021-06-25 15:52:41 +02:00
f44233461f device: Clear storage before enrolling the first print
Clear the device storage before we enroll the first print. At that
point, we know that the storage should be completely empty and we have
no way of deleting "garbage" prints later if the device does not support
listing prints.
2021-04-30 14:41:12 +02:00
9e8139e6d4 README: Add note on how to enable debugging 2021-04-19 16:17:43 +00:00
e8baf4c9a9 device: Switch to new fp_device_has_feature API
The old API has been deprecated.
2021-04-19 18:12:10 +02:00
3b787aa8d1 ci: Allow failing stable build
The libfprint version in rawhide is currently too old for master
fprintd.
2021-04-19 15:59:34 +00:00
4f4b0d5f11 tests/fprintd: Check that garbage collecting works on duplicated print 2021-04-02 00:22:16 +02:00
aae37304e5 tests/fprintd: Cleanup FPrintdVirtualStorageDeviceTests
Avoid repeating the same things multiple times
2021-04-02 00:22:16 +02:00
8869b8296f tests/fprintd: Check an error is thrown if trying to re-enroll a finger 2021-04-02 00:22:16 +02:00
bc55deab2a device: Do not allow enrolling a finger that is already enrolled
This makes little sense. Users should delete the finger before trying to
enroll the same one again. So throw an error at them from EnrollStart
right away.

Fixes: #95
2021-04-02 00:22:16 +02:00
41086ac4c6 tests/fprintd: Test enroll multiple prints with duplicates 2021-04-02 00:22:16 +02:00
4e075ba491 tests/fprintd: Repeat enroll tests with virtual device with no storage
No storage-device does not support identification so we need to try this
case as well
2021-04-01 23:09:30 +02:00
e8622b3e63 device: Support enrolling on devices with no identification support 2021-04-01 23:09:29 +02:00
5785dc65b4 device: Add duplicate checking during enroll
Always do an identify step before starting an enroll. If we find an
existing print, delete or throw an error depending on what is
appropriate.

Doing this ensures that we should not get duplicate prints system wide.
This means we will be able to identify the user that is trying to log
in. But more importantly, we need to do these checks for MoC devices,
which always run "identify" against all device stored prints rather than
the passed gallery.
2021-04-01 22:47:42 +02:00
b7b91e77bb dbus: Add new enroll-duplicate error code
This will be returned if the print has alread been enrolled on the
system.
2021-04-01 16:21:22 +02:00
084e5bfafd tests/dbusmock/polkitd: Remove unwanted method, from a fprintd copy-paste 2021-03-23 19:00:33 +01:00
d53eaa7d89 tests/dbusmock/polkitd: Do not look for mock object again
We already get it as the parameter of the load function, so no need
to find it
2021-03-23 19:00:23 +01:00
29a83ec49a tests/dbusmock/fprintd: Do not redefine device object methods multiple times
They will picked anyways by python dbusmock
2021-03-23 18:59:22 +01:00
a5ff42394e main: De-init the storage when main loop is over 2021-03-03 19:51:07 +01:00
0af8cf1d56 tests/fprintd: Use intermediate timeouts based on default setup 2021-03-03 19:51:07 +01:00
3a05589685 utils/delete: Add ability to delete single user fingerprints by finger name
Each user can now be followed by an `-f`/`--finger` parameter that when
available will be used to delete a single fingerprint for the user.

Add tests
2021-03-03 19:51:07 +01:00
8485985ed3 delete: Use GOptionContext to handle help 2021-03-03 19:50:44 +01:00
bb722a0373 tests/fprintd: Add tests for 'verify' utility 2021-03-03 19:49:07 +01:00
022ee1a4c5 tests/fprintd: Add test for the enroll utility using virtual device commands 2021-03-03 19:49:07 +01:00
8d14af379f utils/verify: Terminate with EXIT_FAILURE when enrollment failed 2021-03-03 19:49:07 +01:00
9a13293818 utils/enroll: Terminate with EXIT_FAILURE when enrollment failed 2021-03-03 19:49:07 +01:00
c66d5d0fa6 utils/enroll: Fix typo on error 2021-03-03 19:49:07 +01:00
aba0f0a714 tests/fprintd: Add test for device error during Claim 2021-03-03 19:49:07 +01:00
b1a218d56a tests/fprintd: Add tests to check errors when using the 'delete' tool 2021-03-03 19:49:07 +01:00
59c2dc5df2 tests/fprintd: Use output checker in FPrintdUtilsTest 2021-03-03 19:49:07 +01:00
f4d2e905bd tests/fprintd: Use storage device for more tests
It's quicker to use for various operations, so better to use it
2021-03-03 19:49:07 +01:00
6f355797f8 device: Throw a NoEnrolledPrints error if trying to delete a device with no prints
Adjust tests accordingly
2021-03-03 19:49:07 +01:00
4b246d3ce2 utils/delete: Use proper error string on deletion 2021-03-03 19:49:07 +01:00
8da1b5e7f5 device: Do not set the device in verification state if we've errored
During VerifyStart we may return early if there are no enrolled prints.
In such case we don't require the verification to be stopped if we're
using identification, but in the verification case we may leave the
device into the verification state.

So ensure we only set the device current state only when we're about to
start it.

Add tests ensuring those cases
2021-03-02 17:15:14 +01:00
6d21128b89 device: Simplify VerifyStart handler using prints loading functions 2021-03-02 17:15:14 +01:00
1511eb93ea device: Do not list invalid prints as enrolled
The user may have some invalid prints saved (like the ones enrolled with
fprintd 1) in the storage, this lead to list such prints as enrolled but
they're actually not valid.

So load the prints to ensure that those are of the valid type instead of
just discovering them.

We may make just store.discover_prints to be aware of this, but this
would break some assumptions we do in tests, so better to go this way.
2021-03-02 17:15:14 +01:00
8f3b48e261 device: Add utility function to load all user prints
We may want to be able to load the user prints to check whether they
are usable, so add an utility function for this.

And use it also in load_all_prints().
2021-03-02 17:15:14 +01:00
bc8ff3e3f6 device: Add helper routine to load all prints
It might make sense to push this into the storage layer. But, overall,
it is OK to live here, and if we do make changes on the storage layer we
probably want to change more than just this.
2021-03-02 17:15:14 +01:00
d07e81acae meson: Consider the 'pam' option in the summary
We may show that we build it even when it's disabled but available in
the system
2021-03-02 17:15:14 +01:00
a04a60cd8e tests/fprintd: Add better tests for ListEnrolledFingers in unclaimed state 2021-03-02 17:15:14 +01:00
ecf6b7c323 pam_fprintd: Just return a PAM_AUTH_ERROR on unknown errors
If something under the hood failed with a generic device error we'd just
mark the PAM module not available, this is probably too much as it may
just be due to a device temporary error.

So make it stop but allow the loading system to retry with it
2021-03-02 17:15:14 +01:00
df6ebefef7 pam_fprintd: Consistently return PAM_AUTHINFO_UNAVAIL when device has no prints
Loading saved prints may lead to an error if they were stored long time
ago and so they're using a wrong format.

In such case we list the prints as available even though they are really
not, so the PAM module won't return PAM_AUTHINFO_UNAVAIL as in the
no-prints case but PAM_USER_UNKNOWN.

This will lead some auth systems (such as gdm) to keep retrying using
PAM fprintd module, even if it's not really available.
2021-03-02 17:15:14 +01:00
b7aa0c455d tests: Update output checker
This pulls in some changes done in gnome-settings-daemon to be able to
force close the FD at the end of the test.
2021-02-15 17:45:08 +01:00
fe95889f2e pam_fprintd.pod: Adapt documentation on max-tries to match code 2021-02-01 18:08:25 +01:00
556f8928a6 pam: Allow values bigger than 9 to be used as max tries match 2021-02-01 18:07:52 +01:00
02bd36d8d9 tests/fprintd: Check that we can't try to release a device while closing 2021-01-27 18:18:57 +01:00
b92f39be3d tests/fprintd: Add test to check errors during release 2021-01-27 18:18:57 +01:00
b46aba6fb2 tests/fprintd: Ensure stored print deletion error has higher prio than device error 2021-01-27 18:18:57 +01:00
2b81184b42 device: Fail with any non-zero return value on storage print_data_save()
When saving the prints we use g_file_set_contents under the hood and in
case return its error code that is a positive value.

So in such case we don't fail if we have a write failure at the end of
the enrollment.

While we could ensure in file storage to always return a negative value,
it's always better to ensure that is has to be 0 when we didn't get an
error.

Add a test checking for this case.
2021-01-27 17:52:05 +01:00
2af0e6407a tests/fprintd: Make prints not writable by turning them into directories
Given that the storage will use unlink to delete them, we'll just fail
while writing them, in this way we'll be able to run such tests also in
CI.
2021-01-27 17:52:05 +01:00
9a39f1fde8 tests/fprintd: Verify the case we can't delete prints from device 2021-01-27 17:52:05 +01:00
1deb1e2044 tests/fprintd: Add ability to force-kill the daemon if we're fine to hang 2021-01-27 15:55:48 +01:00
75989bd2be tests/fprintd: Compute timeout for daemon-stop phase depending on platform 2021-01-26 20:52:29 +01:00
3df730faeb tests/fprintd: Make possible to store duplicated prints for an user
Since we so far we had no duplicated-check for prints in fprintd an user
may have enrolled the same print for multiple accounts or even for
different fingers, so we need to simulate this case.

Given that fprintd may not allow to enroll duplicated prints soon, it's
better to just copy the storage value so that we simulate a duplicated
enrollment in the past.
2021-01-26 20:52:29 +01:00
f2514f43f6 tests/fprintd: Return more data about the enrolled prints
It may be useful to be able to associate them to their user
2021-01-26 20:52:29 +01:00
8ef255a3bd tests/fprintd: Add option to claim device for user on enroll_image 2021-01-26 20:52:29 +01:00
15b41aa7c2 tests/fprintd: Add function and tests to enroll multiple users fingers/images
Allow to enroll multiple data in a single shot so that we don't have to
do it for each user, and add a test that uses it to match each possible
combination.
2021-01-26 20:52:29 +01:00
bec42959ad tests/fprintd: Add an utility function to easily check for match/no-match 2021-01-26 20:52:29 +01:00
5e00b01cf1 tests/fprintd: Ensure that the selected finger is emitted as expected 2021-01-26 19:41:53 +01:00
b3bf4ac1a3 tests/fprintd: Unset the values we monitor for results on wait_for_result
We need to ensure those assume the value we want after waiting
2021-01-26 19:41:48 +01:00
4aa70fb6c6 tests/fprintd: Reimplement the tests relying on specific image driver features
Some tests were delaying VerifyStop by not reporting the finger status
in the image driver, we can do the same using sleeps in the virtual
device driver, so let's reimplement such calls
2021-01-26 16:56:31 +01:00
d2c8a383e6 tests/fprintd: Implement device removal via the 'UNPLUG' command 2021-01-26 04:38:09 +01:00
9a85bfa57f tests/fprintd: Ensure the scan type can be changed and is notified 2021-01-25 19:50:46 +01:00
7f2133cc79 tests/fprintd: Verify using no-identification device with 'any' finger 2021-01-25 19:50:46 +01:00
8491d35eef tests/fprintd: Verify that we can enroll with one stage only 2021-01-25 19:50:46 +01:00
32ae65fae6 tests/fprintd: Reduce the enroll stages when possible to avoid operations 2021-01-25 19:50:46 +01:00
8799fd296a tests/fprintd: Repeat all relevant tests with the storage device
Now that FPrintdVirtualStorageDeviceBaseTest is a
FPrintdVirtualDeviceBaseTest we can implement the needed `send_*`
functions that we use in the tests in order to get easily an interface
that can be used to repeat all the tests we've already written with the
new virtual device.

To do this, we've only to create new test classes that use the
FPrintdVirtualStorageDeviceBaseTest as main base class and that
also implement the test class.
2021-01-25 19:50:40 +01:00
157bcf0ff5 device: Check if the device is open if we didn't fail in claiming it
When claiming a device for delete operation we'd not get an error in
case we can claim it but it's not already claimed, so in such case we
should explicitly check that the device has been opened.
2021-01-25 19:15:09 +01:00
d7431c9654 ci: Do not use verbose logging for tests, just rely on artifacts
Only print errors if any
2021-01-25 19:15:09 +01:00
2348876ba0 ci: Enable Virtual Device (with storage or not) tests 2021-01-25 19:15:05 +01:00
0b80245e8a tests/fprintd: Inherit storage tests from FPrintdVirtualDeviceBaseTest
We can avoid lots of duplication
2021-01-25 18:18:40 +01:00
72a2504fc4 device: Wait device to finish for a timeout before completing VerifyStop
When a device has reported the verification status the client should
call VerifyStop to stop the device, however this under the hood may lead
to a premature cancellation, causing the device not to react as expected
in case the finger is still on the sensor or in case it may return to us
some errors that we may want to handle (like the data-missing one).

So, in case we are about to stop the verification and the operation is
still in process, wait for a maximum timeout before proceed to the
cancellation.

However, while waiting, the action may be also cancelled because of a
call to Release() or because the client vanished, and in such case we
have to ensure that the current invocation is saved for being invoked by
stoppable_action_completed() when callback will return. That will also
unset it, and that's a clear indication for us that it has been already
consumed, and thus that we can just return doing nothing else.

Fixes: #100
2021-01-25 18:18:40 +01:00
8d8c181f31 tests/fprintd: Check that errors happening after we got a result are ignored 2021-01-25 18:18:40 +01:00
cce9551c98 tests/fprintd: Be more flexible in accepting async results with exceptions
Some tests may have different behaviors depending on the CPU load when
using parallel tests, so async results could arrive in different order.

Then we need to accept multiple results:
  - A specific exception has to happen all the times
  - One of the accepted exception has to happen all the times
  - No exception or one of the allowed exception may happen

Depending on the test, use one of the possible strategies.
2021-01-25 18:18:40 +01:00
c8c543672d tests/fprintd: Make assertFprintError to accept list of errors we accept
It can be used to check if any of the error that is passed is raised
2021-01-25 18:18:40 +01:00
5acf13cf51 tests/fprintd: Ensure that all the methods can be called concurrently
As per GDBus we can now get async calls (from the same client) happening
while we're still processing a previous request, so we need to ensure
that we react properly.
2021-01-25 18:18:40 +01:00
f3a8adf3c8 tests/fprintd: Make possible to organize async replies per proxy and method 2021-01-25 18:18:40 +01:00
c32737f4d4 tests/fprintd: Use global definitions for Fprint namespace and paths
So avoid repeating it everywhere
2021-01-25 18:18:40 +01:00
804aff3c30 tests/fprintd: Use a class to compare permissions easily 2021-01-25 18:18:40 +01:00
f87cb27163 device: Fix debug statement string ordering and be more consistent
We were inverting the values in the `Authorization granted` message, so
be consistent in the ordering we show the message.
2021-01-25 18:18:40 +01:00
457cbd46cd device: Stop any further EnrollStop/VerifyStop request once we got one
In case we get concurrent requests on EnrollStart/EnrollStop we'd just
continue with the operation, making the first processed request to start
the process and the second to hang (in code before the introduction of
stoppable_action_stop()) or to crash (in the current code).

So in such case we should always check that we're not handling already
the request, by checking priv->current_cancel_invocation value.

Add tests to verify the race.
2021-01-25 18:18:39 +01:00
32b70c0edc device: Add an unique function to check if we can stop the current action 2021-01-25 18:18:13 +01:00
ff798edc51 device: Move duplicated code for stopping a stoppable action into a function
We can handle this in a generic way for all the cancellable cases.
2021-01-22 22:06:07 +01:00
56436fb8b1 device: Always use stoppable_action_completed to terminate actions
Avoid having repeated code for doing the same, nothing changes as before
we were doing the same only in case we had not a cancellable set.
2021-01-22 22:06:01 +01:00
dbf01399ad device: Throw an error if we failed to delete a device storage print
Although this error is not fatal as the local print reference has been
properly removed.
2021-01-22 15:19:21 +01:00
0f29cfc0c7 tests/fprintd: Check the storage errors are emitted if we fail delete prints 2021-01-22 15:19:21 +01:00
e0a643f3b9 device: Return more specific error if we failed cleaning up the storage 2021-01-22 15:19:21 +01:00
3fa0f232ef tests/fprintd: Ensure DeleteEnrolledFingers2 works for multiple fingers 2021-01-22 15:19:21 +01:00
3c91ac9a3f tests/fprintd: Add utility functions to check if prints are stored 2021-01-22 15:19:20 +01:00
3fe268f6f2 tests/fprintd: Move permissions checks to a single function 2021-01-22 15:18:39 +01:00
76c6e9e030 device: Return errors on deletion of prints from storage 2021-01-22 15:17:57 +01:00
5dde80c136 device: Expose an error if we are not able to remove a print from storage
This is case we should notify, as in such case the print will still
usable.
2021-01-22 15:17:57 +01:00
0203c8aed8 tests: Add more tests to verify AlreadyInUse error on deletion methods 2021-01-22 15:17:57 +01:00
7d87f5e664 device: Set an error if trying to delete a print that is not enrolled 2021-01-22 15:17:57 +01:00
fd72c0b81b device: Support deleting a single fingerprint for user
Add a method to delete only a Fingerprint for a device, this is required
by they g-c-c UI design and at the same time it reflects the libfprint
API, where so far only a fingerprint at time can be deleted.
2021-01-22 15:17:57 +01:00
1835d99265 device: Expose finger status as DBus properties
libfprint v1.90.4 introduced a new finger status API to expose to the UI
the finger status on sensor.

Add two new properties to the Device interface that represent the
possible values.

Add new tests.
2021-01-22 14:10:04 +00:00
30eaaf2def device: Take advantage of the DBus skeleton properties caching
The device DBus skeleton interface already implements caching for the
properties and can smartly handle their update sending (batched) dbus
events on changes.

Even if the default properties are only read only and we don't care, we
are going to introduce properties that will change values, and so having
the skeleton to handle this for us is quite convenient.

Given that we don't really need to override those properties, we can
just set them at start and leave the skeleton cache to handle the rest.

In case we'd ever need to override them, however the skeleton also
provides a way to override all the properties and to get a reference of
the number of properties it defines, ensuring to keep the order they are
defined.
This would allow us to get back the parent's properties IDs and to use
this to implement ours properties getters/setters using the parent one
as fallback.
2021-01-22 14:10:04 +00:00
657f58fd64 pam: Handle sigint by using a signalfd
It makes sense to allow interrupting fingerprint authentication, but PAM
does not provide a way to define an interruptable operation.

We can work around this somewhat though by at least reacting to SIGINT
in an interactive terminal. Obviously, we shouldn't override the signal
handler, because that would be too intrusive. But creating a signalfd is
easy enough and doesn't affect the rest of the process state as much.
2021-01-22 13:23:36 +00:00
584933aad7 pam_fprintd: Fix a few issues found by static analysis
Just dead stores and an ignored return value that we really do not care
about.
2021-01-22 13:16:19 +00:00
eadf4fced8 tests: Add test to verify deletion
This enrolls a few prints, deletes them. Then checks that all the new
prints have been deleted, but all the garbage prints still exist.
2021-01-20 23:25:52 +01:00
27a76c9b79 tests: Add test to check order of garbage collection 2021-01-20 23:25:52 +01:00
9301693c83 tests: Allow use of other virtual devices 2021-01-20 23:25:52 +01:00
00fbf19079 device: Prefer older prints when garbage collecting
This makes garbage collection a bit more predictable overall. Note that
we'll first delete prints that we do not know the age of.

If we cannot sort them by age, then randomize the order so that we don't
end up deleting in the order that the device returned the prints.
2021-01-20 23:25:52 +01:00
6fd1aa51cd data: Use the correct mode for the state dir
The code (in file_storage.c) expects mode 0700. However, systemd
defaults to 0755. This causes strange behavior.

https://bugs.archlinux.org/task/68932
2021-01-19 22:18:55 +00:00
0e428d34ec tests: Make tests executable
This makes it easier to use them in out-of-tree tests.
2021-01-13 14:47:00 +01:00
da60bddb3e Release 1.90.9 2021-01-13 13:23:24 +01:00
506d99e90c tests: Check that two consecutive runs work 2021-01-11 12:59:06 +00:00
e7f47e28d7 tests: Add finger and connection sharing for virtual image
This allows testing some more conditions (e.g. forcing VerifyStop to run
into a cancellation).
2021-01-11 12:59:06 +00:00
938c1aac5a device: Add common stoppable_action_completed function
The stoppable actions (Verify/Enroll) have the same logic during
completion. Create a common function to share this logic instead of
copying it in each of the handlers.

Fixes: #97
2021-01-11 12:59:06 +00:00
fd02922608 pam: Pick the device with more enrolled finger prints
When multiple devices are available PAM module will just pick the first
one, even if it has not enrolled fingers.

Since this can't be user configured (yet) we can be a bit smarter and
select the device that has more fingerprints configured for the user.
2021-01-05 12:16:09 +00:00
195f7eaf5f tests/fprintd: Check that fingers deletion will remove user print
But will keep state dir where it is
2021-01-05 13:07:19 +01:00
48ea3b89c9 file_storage: Cleanup the user storage path when removing prints
Try to remove user and devices directories if they are empty.
2021-01-05 13:07:19 +01:00
4cfa6b5b37 file_storage: Remove debug leftovers and add actual debug statements 2021-01-05 13:07:19 +01:00
c685f0d34c file_storage: Don't return an error if the print doesn't exist
We may just try to remove something isn't there so it's not an actual
error from our POV.
2021-01-05 13:07:19 +01:00
eece834231 file_storage: Do not remove the finger path two times
Return the actual operation error instead
2021-01-05 13:07:19 +01:00
3faaa81257 file_storage: Do not ignore STATE_DIRECTORY if it's set to an actual path 2021-01-05 13:07:19 +01:00
b9cdb58a1a device: Load the current finger print and not always the first print
In the garbage collection code we always ended up to load the first
enrolled print, and this may lead to removing from device storage prints
that are actually in use.
2021-01-05 12:57:55 +01:00
ab8dcfaa61 treewide: fix typos 2021-01-04 11:04:13 +01:00
25a97c8276 tests: Add disconnect tests for enroll/verify/identify
We test both the scenario where VerifyStop/EnrollStop is not called
while the operation is still ongoing or when the operation is already
finished.
2021-01-04 11:00:18 +01:00
8057e49d31 tests: Allow claiming in secondary bus helper
This saves an extra step when creating tests that disconnect.
2021-01-04 11:00:18 +01:00
f75e800d5c tests: Allow enrolling from different device
This simplfies disconnect tests as we can do the enroll from the client
that will disconnect later on.
2021-01-04 11:00:18 +01:00
6ae4f5e939 tests: Add get_secondary_bus_and_device helper
It returns a new bus object and the device on that bus. This allows
testing what happens if a client disconnects from the bus.
2021-01-04 11:00:18 +01:00
7c9a04c2ae device: Fix race when client vanishes from bus
We have a condition where a client vanishing instead of cleaning up the
operation using VerifyStop would cause fprintd to hang. This only
happens if the underlying enroll/verify/identify operation has already
finished when the client vanishes.

Fix this by correctly interpreting current_cancellable as a flag for
these operations.

Fixes: #97
2021-01-04 11:00:18 +01:00
7b7aa6e99d device: Fix typos 2021-01-04 09:49:24 +08:00
b624f8c8c7 manager: Do not use unnecessary volatile qualifier on GQuark
As per new GLib in CI image fprintd doesn't build anymore, since
g_once_init_enter now warns about using a volatile value, as this has
never been supposed to be the case, despite its signature [1].

Related to: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719

[1] https://gitlab.gnome.org/GNOME/glib/-/issues/600
2020-12-19 22:34:12 +01:00
3e81179eca device: Add auto-cleanup function to unset the current action
This is useful in the functions where we have to unset the device's
current action but we may use early-return to handle multiple conditions
such as in open, close and delete functions.
The latest also currently is a bit buggy as it won't reset the state on
some failures.
2020-12-17 16:33:58 +01:00
c6647ba875 tests: Add test that enforces a verify/identify operation restart
In the usual test we cancel the operation immediately by calling
VerifyStop. This (often) tests the case where we don't end up restarting
the Verify operation internally.

We can easily force fprintd to have restarted already internally, so add
a test that does so by sleeping a bit. This should give us a slightly
higher branch coverage in the verify_cb/identify_cb tests.
2020-12-16 14:44:23 +01:00
988ee01f66 tests: Add retry test for PAM 2020-12-16 14:12:37 +01:00
32ee94c8a0 Add compatibility defines to allow compiling with older glib
We need at least the GFlagsClass autoptr, but just pull in most of the
definitions from libfprint.
2020-12-14 11:30:45 +01:00
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
8eba309920 0.8.0 2017-09-13 16:27:53 +02:00
6494efa94e data: Stop privilege escalations in daemon
Using the NoNewPrivileges stanza from systemd.
2017-09-13 15:48:17 +02:00
e55ad52ded device: Fix warning when open the device fails
The error should be initialised to NULL before being set.
2017-02-16 15:51:22 +01:00
0d28678118 device: dbus_g_method_return_error() does not free the error
So free the errors after sending them on the bus.

https://bugs.freedesktop.org/show_bug.cgi?id=99838
2017-02-16 15:44:12 +01:00
051eb0427d pam: Don't poke the hardware if user has no registered prints
Before claiming the device and therefore potentially activating
the actual hardware, make a call to see if the user has any
prints registered at all.

https://bugs.freedesktop.org/show_bug.cgi?id=99811
2017-02-16 14:49:58 +01:00
f54a90ea80 pam: separate device opening and claiming
For some operations, i.e. listing the enrolled prints, the device
does not need to be claimed. Therefore the claiming can be delayed
until we actually start the verification process, allowing us to
query the fingerprint system if the user has any prints enrolled.

https://bugs.freedesktop.org/show_bug.cgi?id=99811
2017-02-16 14:46:35 +01:00
da87d1d7ee pam: Only call g_type_init when using an old glib
Calling g_type_init() is not needed anymore and deprecated since
glib version 2.36.

https://bugs.freedesktop.org/show_bug.cgi?id=99812
2017-02-14 17:14:20 +01:00
3d2d73d615 main: call g_type_init only if using an old glib
Calling g_type_init() is not needed anymore and deprecated since
glib version 2.36.

https://bugs.freedesktop.org/show_bug.cgi?id=99812
2017-02-14 17:14:20 +01:00
06ea385260 tests: call g_type_init only if using an old glib
Calling g_type_init() is not needed anymore and deprecated since
glib version 2.36.

https://bugs.freedesktop.org/show_bug.cgi?id=99812
2017-02-14 17:14:20 +01:00
8fa3dcd5cd main: Plug tiny memory leak
dbus_g_method_get_sender() returns an allocated-string which we need to
free. This is handled properly in the rest of the codebase.

https://bugs.freedesktop.org/show_bug.cgi?id=99811
2017-02-14 14:29:54 +01:00
32307570fe po: Update translations 2017-02-11 18:17:40 +01:00
7ae196a0dd po: Remove duplicate Bulgarian and Persian translations
https://bugs.freedesktop.org/show_bug.cgi?id=99773
2017-02-11 18:16:23 +01:00
36d3d9d749 data: Lockdown the fprintd service
Give read-write access to USB devices in /dev, and the location of the
fingerprints, access to Unix sockets for D-Bus and
close everything else down.

See systemd.exec(5) for details about the options.
2017-01-05 13:04:48 +01:00
b3c1ed0d2a main: Don't hardcode fingerprint storage directory
It used to be hard-coded to /var/lib/fprint, but is now set to
$(localstatedir)/lib/fprint/.
2017-01-05 12:50:06 +01:00
eabeaa258e 0.7.0 2016-10-13 17:33:26 +02:00
e2ba6321f8 po: Update translations 2016-10-13 17:28:26 +02:00
efe2a5b00c build: Fix updating translations with builddir != srcdir
tx supports a single "--root" argument to pass both where it expects to
read the created data file (the .pot file) and the configuration. As
those are two separate directories with builddir != srcdir, copy the .tx
file from srcdir to builddir to upload the updated .pot file.
2016-10-13 17:28:26 +02:00
9acacefa18 pam: Fix "format-nonliteral" warning
In file included from tests/enroll.c:29:0:
pam/fingerprint-strings.h: In function ‘finger_str_to_msg’:
pam/fingerprint-strings.h:99:6: error: format not a string literal, argument types not checked [-Werror=format-nonliteral]
      return g_strdup_printf (TR (fingers[i].place_str_specific), driver_name);
      ^~~~~~
pam/fingerprint-strings.h:104:6: error: format not a string literal, argument types not checked [-Werror=format-nonliteral]
      return g_strdup_printf (TR (fingers[i].swipe_str_specific), driver_name);
      ^~~~~~
2016-07-19 11:27:17 +02:00
ac1a99ad06 build: Fix running autogen.sh out-of-tree 2016-07-19 11:19:21 +02:00
e437d20108 device: Don't call fp_async_dev_close() with NULL device
In some cases, the priv->dev is already freed and NULL, so ensure
that we don't try to close NULL devices and crash.
2015-10-14 12:12:39 +02:00
fa31b0aec2 Update translations, and add 21 of them 2015-02-09 18:14:47 +01:00
431adc4c5b Update Transifex configuration 2015-02-09 18:11:10 +01:00
c4f3cc2dc3 0.6.0 2015-02-03 17:07:15 +01:00
4edc17ac99 manager: Fix sorting in GetDevices() output
Sort the devices by ID for the GetDevices() output.
2015-02-03 17:07:15 +01:00
56683b1098 tests: Fix listing/deleting with more than one reader
We were always reading the information for reader 0.
2015-02-03 16:44:31 +01:00
f7c51b0d58 tests: Fix segfault in verify when used without -f
We tried to use strcmp on a NULL string.

https://bugs.freedesktop.org/show_bug.cgi?id=85736
2014-11-02 16:34:02 +01:00
f94c8727d2 main: Don't log about normal operation
Administrators don't need to see this stuff on every boot.  The system
bus itself already logs this anyways (which is itself a bit too
chatty).

https://bugs.freedesktop.org/show_bug.cgi?id=71889
2014-04-25 11:28:20 +02:00
4f9256c033 manager: Don't log when we're exiting
This happens on hardware without fingerprint readers on every boot; we
don't need to log anything about it, it's totally normal.

This patch is part of an initiative to reduce logging spew in GNOME
so that actual errors and important messages are more visible.

https://bugs.freedesktop.org/show_bug.cgi?id=71889
2014-04-25 11:28:20 +02:00
73ed60a60d tests: Fix possible crash in fprintd-verify
https://bugs.freedesktop.org/show_bug.cgi?id=75111
2014-02-18 18:32:48 +01:00
d7e326a776 tests: List possible values for finger when enrolling
When the "-f" parameter of fprintd-enroll is incorrect, list
the possible values.
2014-02-18 18:32:08 +01:00
7e4630ced2 pam: Fix eventfd leak
When we create our own GMainContext, we need to be the ones
disposing of it as well, as GMainLoop won't take ownership of it.

From https://bugzilla.redhat.com/show_bug.cgi?id=1050827
2014-01-27 12:25:57 +01:00
fc228b9976 README: Update README 2013-09-30 09:43:46 +02:00
7710040ea7 data: Fix syntax error in fprintd.pod
fprintd.pod around line 100: =over without closing =back
POD document had syntax errors at /usr/bin/pod2man line 69.
2013-08-11 18:58:20 +02:00
3330b8f351 0.5.1 2013-08-11 17:58:52 +02:00
4183c3cdec build: Dist as a .tar.xz file 2013-08-11 17:58:32 +02:00
7eb1f0fd86 tests: Support -f 'finger' option for enroll
Add support for -f 'finger' option to fprintd-enroll.
Update docs accordingly.

https://bugs.freedesktop.org/show_bug.cgi?id=62644
2013-06-26 13:10:17 +02:00
b4f5304565 pam: return PAM_UNKNOWN_USER when user is unenrolled
This commit makes pam_fprintd return PAM_UNKNOWN_USER when
the user has not enrolled a fingerprint.

This lets the administrator set up pam_fprintd as a required
authentication, method, but only for users that have enrolled a
fingerprint, as such:

auth  [success=ok user_unknown=ignore default=die] pam_fprintd.so max_tries=1 timeout=-1
auth  [success=1  default=ignore]                  pam_unix.so nullok_secure
auth  requisite                                    pam_deny.so

With this config, users w/o an enrolled fingerprint will just be
asked for a password.  Users with an enrolled fingerprint will
required to login using both their fingerprint and a password.

https://bugs.freedesktop.org/show_bug.cgi?id=64781
2013-06-03 08:56:22 -04:00
9c99e5cd59 pam: Make max_tries and timeout arguments.
https://bugs.freedesktop.org/show_bug.cgi?id=49918
2013-03-26 12:45:58 +01:00
cb72e9790d 0.5.0 2013-03-05 15:50:45 +01:00
197e139a45 doc: Fix generation of the D-Bus API docs 2013-03-05 15:50:45 +01:00
21459e6d7d build: Fix distcheck'ing of the systemd service file 2013-03-05 15:50:44 +01:00
476b175cc0 data: Fix left-over build files from systemd service 2013-03-05 15:50:44 +01:00
c35cf36ba8 data: Add systemd unit file to the dist 2013-03-05 15:27:40 +01:00
9ea025d9cb Add a systemd unit file
It's just better if we get activated via systemd rather than dbus.
Various bits of configury/makefile taken from polkit.

https://bugs.freedesktop.org/show_bug.cgi?id=58468
2012-12-18 17:29:26 +01:00
870a7a8361 build: Fix checks for pod2man
Previous commit had two obviously broken parts.
2012-11-19 00:44:16 +01:00
0aaff3a6c6 device: Use non-deprecated PolKit call 2012-11-17 09:10:35 +01:00
2e434a062d po: Update LINGUAS and remove unused translations
Fixes the build.
2012-11-17 09:08:36 +01:00
78623147bc build: Only use pod2man if it exists
This fixes the build in gnome-ostree, where we don't have pod2man
to generate the manpages.
2012-11-17 09:07:04 +01:00
8266f354cc po: Remove empty translation 2012-11-16 20:05:40 +01:00
da44184115 po: Add missing PO files from Transifex 2012-11-16 19:43:08 +01:00
4fa35c3207 autogen.sh: Honor NOCONFIGURE=1
See http://people.gnome.org/~walters/docs/build-api.txt
2012-11-16 19:32:50 +01:00
4b05658597 README: Correct GPL version used
All the headers mention "GPL v2 or later", so reflect that in
the README.
2012-11-16 12:52:58 +01:00
486c0bb347 po: Update translations 2012-11-13 17:19:52 +01:00
42dd4a8b3a po: Add missing languages to LINGUAS 2012-11-13 17:19:42 +01:00
9577b6db03 main: request name unconditionally at startup
the dbus activation machinery depends on daemons taking a name on
the bus to complete activation without timeouts.

fprintd fails prematurely if there is USB bus (as found in some
virtual machine setups).

This commit moves the bus-name-acquisition code to happen before
the fail-from-no-usb-bus code to keep callers from timing out
when activating fprintd.

https://bugs.freedesktop.org/show_bug.cgi?id=57025
2012-11-13 17:17:21 +01:00
71bc81468f tests: Another uninitialised variable use
The GError was used without being initialised.

https://bugs.freedesktop.org/show_bug.cgi?id=53900
2012-08-28 22:10:39 +01:00
b80f7359c3 tests: Fix uninitialised variable use
The GError was used without being initialised.

https://bugs.freedesktop.org/show_bug.cgi?id=53900
2012-08-28 19:29:20 +01:00
1bd948ac16 po: Updated translations 2012-05-28 14:30:26 +01:00
73edad087f pam: Avoid segfault on login without devices
Avoid crashing if paths_array is NULL.

https://bugs.freedesktop.org/show_bug.cgi?id=49904
2012-05-14 15:09:25 +01:00
4c120e487b pam: Fix crash when enumerating the devices
We don't need to free this by hand, it'll get freed when
we free the array itself.
2012-02-07 21:43:28 +00:00
cde767cbc9 pam: Don't get a list of devices twice
GetDefaultDevice just gives you the first device in the list.
Use that fact to check for > 1 device, and get the default device
in one swoop.
2012-02-01 19:53:26 +00:00
d77b59cd36 pam: don't use device name if there is only one reader 2012-02-01 19:41:58 +00:00
77fa713920 po: Updated translations 2011-08-15 22:10:40 +01:00
b10180503d 0.4.1
And fix distcheck.
2011-04-19 00:27:09 +01:00
815df79451 build: Enable gtk-doc when dist'ing 2011-04-19 00:22:48 +01:00
91 changed files with 1388 additions and 12301 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

View File

@ -1,8 +0,0 @@
[main]
host = https://www.transifex.net
[fprintd.fprintd-po-fprintd-pot]
file_filter = po/<lang>.po
source_file = po/fprintd.pot
source_lang = en

View File

@ -1,3 +1,4 @@
Daniel Drake <dsd@gentoo.org>
Bastien Nocera <hadess@hadess.net>
Misha <mishakmak@gmail.com>

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,26 +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
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 pull --all --force --skip
@tx push --source
-include $(top_srcdir)/git.mk

10
NEWS
View File

@ -1,10 +0,0 @@
This file lists notable changes in each release. For the full history of all
changes, see ChangeLog.
version 0.4.0:
- Loads of new translations
- Fix crasher when PAM module gets unloaded
- Use GIO to monitor D-Bus clients instead of custom code
version 0.2.0:
- First actual release

58
README
View File

@ -1,17 +1,52 @@
This is a fork of the pam module which implements the simultaneous
password and fingerprint behaviour present in pam_thinkfinger. It
was called a 'gross hack' by the fprintd developers in their README
for the PAM module, but it works, and I am not beneath using it.
Compilation uses meson/ninja. Configure with "meson-build . build"
and run "meson compile -C build" to compile. To install, move the
generated pam_fprintd_grosshack.so to the correct directory on the
system. Alternatively, Arch users can install pam-fprint-grosshack
from the AUR.
To use this module, add the following lines to the appropriate files
in /etc/pam.d/ (i.e. /etc/pam.d/system-auth for any use):
auth sufficient pam_fprintd_grosshack.so
auth sufficient pam_unix.so try_first_pass nullok
Warning! The original developers called this implementation a gross
hack for a reason. This code may have major security flaws or other
unforeseen bugs, so use with caution. And, of course, the standard
legalese applies: No warranty, provided as-is, whatever you do or
whatever happens to you is not my fault, etc.
-- Misha
-----------------------------------------------------------
Original README
-----------------------------------------------------------
fprintd
=======
http://www.reactivated.net/fprint/wiki/Fprintd
https://fprint.freedesktop.org/
Daemon to offer libfprint functionality over D-Bus
Currently in early stages. Might eat your kangaroo.
Might eat your kangaroo.
Written in C. Requires bleeding edge libfprint (libusb-1.0 port).
Written in C.
Licensed under the GPL version 2 (see COPYING).
Licensed under the GPL version 2 or any later version (see COPYING).
An experimental PAM login module is included in the 'pam' directory.
This will be moved to a separate package once the system has matured.
A PAM login module is included in the 'pam' directory.
Translating
===========
fprintd and pam_fprintd are translated using weblate. Please visit
https://translate.fedoraproject.org/projects/fprintd/ to contribute
translations.
API use cases
=============
@ -34,3 +69,14 @@ API use cases
of PIN code authentication and/or tokens)
* Given a list of users, verify which one has scanned their finger
Debugging
=========
To enable debug output run `systemctl edit fprintd.service` then enter:
```
[Service]
Environment=G_MESSAGES_DEBUG=all
```
Save the result and restart fprintd using `systemctl restart fprintd.service`.
After that, you can grab the logs using `journalctl -u fprintd.service`.

View File

@ -1,11 +0,0 @@
Transifex.net Token Verification
=================================
The list of tokens bellow guarantee the respective users to be able to enable
submission on components using the following repository url:
ssh://git.freedesktop.org/git/libfprint/fprintd
Tokens:
dKfMSehAGCsQ5gxT4r2DAp9PyEMsKAMp / hadess

18
TODO
View File

@ -1,18 +0,0 @@
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,10 +0,0 @@
#!/bin/sh
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
./configure $*

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,76 +0,0 @@
AC_INIT([fprintd], [0.4.0])
AM_INIT_AUTOMAKE([1.11 dist-bzip2 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])
GTK_DOC_CHECK([1.3])
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,31 +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
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 = fprintd.1
fprintd.1: fprintd.pod
$(AM_V_GEN) pod2man -c "" -s 1 -q none -n fprintd -r freedesktop $< > $@
EXTRA_DIST = $(dbus_services_in_files) $(dbus_conf_DATA) $(polkit_in_files) $(conf_DATA) fprintd.pod
CLEANFILES = $(polkit_DATA) $(dbus_services_DATA) fprintd.1
check:
@$(XMLLINT) --noout $(polkit_DATA)

View File

@ -1,204 +0,0 @@
.\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14)
.\"
.\" 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" ''
'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
.\" 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"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" 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 "fprintd 1"
.TH fprintd 1 "2010-08-16" "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]
.PP
\&\fBfprintd-list\fR username [usernames...]
.PP
\&\fBfprintd-verify\fR [\-f finger] [usename]
.PP
\&\fBfprintd-delete\fR username [usernames...]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
This manual page documents briefly the \fBfprintd\fR command-line utilities.
.PP
The \fBfprintd\fR daemon is accessed through \fBD\-Bus\fR by those command-line utilities.
.SH "ARGUMENTS"
.IX Header "ARGUMENTS"
.IP "\fBusername\fR" 8
.IX Item "username"
The username for the user for which you want to query or modify the fingerprint database.
.Sp
Not that \fBfprintd-list\fR and \fBfprintd-delete\fR require at least one username to be passed, and support multiple usernames.
.Sp
\&\fBfprintd-enroll\fR and \fBfprintd-verify\fR will use the current username if none are passed on the command-line.
.IP "\fB\-f finger\fR" 8
.IX Item "-f finger"
For \fBfprintd-enroll\fR, the finger to enroll. Possible values are:
.Sp
left-thumb,
left-index-finger,
left-middle-finger,
left-ring-finger,
left-little-finger,
right-thumb,
right-index-finger,
right-middle-finger,
right-ring-finger,
right-little-finger.
.Sp
The default is automatic, selecting the first available finger for swipe devices, or all the enrolled fingers, for press devices.
.SH "TEST APPLICATIONS"
.IX Header "TEST APPLICATIONS"
.SS "fprintd-enroll"
.IX Subsection "fprintd-enroll"
.RS 8
Will enroll the user's right index finger into the database.
.RE
.SS "fprintd-list"
.IX Subsection "fprintd-list"
.RS 8
Will list the user's enrolled fingerprints.
.RE
.SS "fprintd-verify"
.IX Subsection "fprintd-verify"
.RS 8
Will enroll the user's right index finger into the database.
.RE
.SS "fprintd-enroll"
.IX Subsection "fprintd-enroll"
.RS 8
Will enroll the user's right index finger into the database.
.RE
.SH "AUTHOR"
.IX Header "AUTHOR"
\&\fBfprintd\fR was written by Bastien Nocera and Daniel Drake.
.SH "DIRECTORIES"
.IX Header "DIRECTORIES"
By default, fprintd stores the fingerprints in \fB/var/lib/fprint/\fR
.SH "SEE ALSO"
.IX Header "SEE ALSO"
.IP "\fBdbus-daemon\fR, \fBgnome-about-me\fR" 8
.IX Item "dbus-daemon, gnome-about-me"

View File

@ -1,2 +0,0 @@
[storage]
type=file

View File

@ -1,102 +0,0 @@
=head1 NAME
fprintd - Fingerprint management daemon, and test applications
=head1 SYNOPSYS
B<fprintd-enroll> [username]
B<fprintd-list> username [usernames...]
B<fprintd-verify> [-f finger] [usename]
B<fprintd-delete> username [usernames...]
=head1 DESCRIPTION
This manual page documents briefly the B<fprintd> command-line utilities.
The B<fprintd> daemon is accessed through B<D-Bus> by those command-line utilities.
=head1 ARGUMENTS
=over 8
=item B<username>
The username for the user for which you want to query or modify the fingerprint database.
Not that B<fprintd-list> and B<fprintd-delete> require at least one username to be passed, and support multiple usernames.
B<fprintd-enroll> and B<fprintd-verify> will use the current username if none are passed on the command-line.
=item B<-f finger>
For B<fprintd-enroll>, the finger to enroll. Possible values are:
left-thumb,
left-index-finger,
left-middle-finger,
left-ring-finger,
left-little-finger,
right-thumb,
right-index-finger,
right-middle-finger,
right-ring-finger,
right-little-finger.
The default is automatic, selecting the first available finger for swipe devices, or all the enrolled fingers, for press devices.
=back
=head1 TEST APPLICATIONS
=over 8
=back
=head2 fprintd-enroll
=over 8
Will enroll the user's right index finger into the database.
=back
=head2 fprintd-list
=over 8
Will list the user's enrolled fingerprints.
=back
=head2 fprintd-verify
=over 8
Will enroll the user's right index finger into the database.
=back
=head2 fprintd-enroll
=over 8
Will enroll the user's right index finger into the database.
=back
=head1 AUTHOR
B<fprintd> was written by Bastien Nocera and Daniel Drake.
=head1 DIRECTORIES
By default, fprintd stores the fingerprints in B</var/lib/fprint/>
=head1 SEE ALSO
=over 8
=item B<dbus-daemon>, B<gnome-about-me>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- Only root can own the service -->
<policy user="root">
<allow own="net.reactivated.Fprint"/>
</policy>
<!-- Anyone can talk to the service -->
<policy context="default">
<allow send_destination="net.reactivated.Fprint"/>
<allow send_interface="net.reactivated.Fprint"/>
</policy>
</busconfig>

View File

@ -1,4 +0,0 @@
[D-BUS Service]
Name=net.reactivated.Fprint
Exec=@LIBEXECDIR@/fprintd
User=root

View File

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig>
<vendor>The FPrint Project</vendor>
<vendor_url>http://reactivated.net/fprint/</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>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
<action id="net.reactivated.fprint.device.enroll">
<_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>
</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>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>auth_admin_keep</allow_active>
</defaults>
</action>
</policyconfig>

View File

@ -1,77 +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=
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 @@
all : 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

View File

@ -1,32 +0,0 @@
<!-- DTD for D-Bus Introspection Documentation -->
<!ELEMENT doc (summary?,description?,errors?,permission?,since?,deprecated,seealso?)>
<!ELEMENT summary (#PCDATA|ref)*>
<!ELEMENT description (#PCDATA|para|example)*>
<!ELEMENT errors (error)*>
<!ELEMENT permission (#PCDATA|ref|para)*>
<!ELEMENT since EMPTY>
<!ATTLIST since version CDATA #REQUIRED>
<!ELEMENT deprecated (#PCDATA|ref)>
<!ATTLIST deprecated version CDATA #REQUIRED>
<!ATTLIST deprecated instead CDATA #REQUIRED>
<!ELEMENT seealso (ref+)>
<!ELEMENT error (#PCDATA|para)*>
<!ATTLIST error name CDATA #REQUIRED>
<!ELEMENT para (#PCDATA|example|code|list|ref)*>
<!ELEMENT example (#PCDATA|para|code|ref)*>
<!ATTLIST language (c|glib|python|shell) #REQUIRED>
<!ATTLIST title CDATA #IMPLIED>
<!ELEMENT list (item*)>
<!ATTLIST list type (bullet|number) #REQUIRED>
<!ELEMENT item (term|definition)*>
<!ELEMENT term (#PCDATA|ref)*>
<!ELEMENT definition (#PCDATA|para)*>
<!ELEMENT code (#PCDATA)>
<!ATTLIST code lang CDATA #IMPLIED>
<!ELEMENT ref CDATA>
<!ATTLIST ref type (parameter|arg|signal|method|interface) #REQUIRED>
<!ATTLIST ref to CDATA #REQUIRED>

View File

@ -1,550 +0,0 @@
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd"
exclude-result-prefixes="doc">
<!--
Convert D-Bus Glib xml into DocBook refentries
Copyright (C) 2007 William Jon McCann
License: GPL
-->
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:variable name="interface" select="//interface/@name"/>
<xsl:variable name="basename">
<xsl:call-template name="interface-basename">
<xsl:with-param name="str" select="$interface"/>
</xsl:call-template>
</xsl:variable>
<refentry><xsl:attribute name="id"><xsl:value-of select="$basename"/></xsl:attribute>
<refmeta>
<refentrytitle role="top_of_page"><xsl:value-of select="//interface/@name"/></refentrytitle>
</refmeta>
<refnamediv>
<refname><xsl:value-of select="//interface/@name"/></refname>
<refpurpose><xsl:value-of select="$basename"/> interface</refpurpose>
</refnamediv>
<refsynopsisdiv role="synopsis">
<title role="synopsis.title">Methods</title>
<synopsis>
<xsl:call-template name="methods-synopsis">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</synopsis>
</refsynopsisdiv>
<xsl:choose>
<xsl:when test="count(///signal) > 0">
<refsect1 role="signal_proto">
<title role="signal_proto.title">Signals</title>
<synopsis>
<xsl:call-template name="signals-synopsis">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</synopsis>
</refsect1>
</xsl:when>
</xsl:choose>
<refsect1 role="impl_interfaces">
<title role="impl_interfaces.title">Implemented Interfaces</title>
<para>
Objects implementing <xsl:value-of select="$interface"/> also implements
org.freedesktop.DBus.Introspectable,
org.freedesktop.DBus.Properties
</para>
</refsect1>
<xsl:choose>
<xsl:when test="count(///property) > 0">
<refsect1 role="properties">
<title role="properties.title">Properties</title>
<synopsis>
<xsl:call-template name="properties-synopsis">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</synopsis>
</refsect1>
</xsl:when>
</xsl:choose>
<refsect1 role="desc">
<title role="desc.title">Description</title>
<para>
<xsl:apply-templates select="//interface/doc:doc"/>
</para>
</refsect1>
<refsect1 role="details">
<title role="details.title">Details</title>
<xsl:call-template name="method-details">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</refsect1>
<xsl:choose>
<xsl:when test="count(///signal) > 0">
<refsect1 role="signals">
<title role="signals.title">Signal Details</title>
<xsl:call-template name="signal-details">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</refsect1>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="count(///property) > 0">
<refsect1 role="property_details">
<title role="property_details.title">Property Details</title>
<xsl:call-template name="property-details">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</refsect1>
</xsl:when>
</xsl:choose>
</refentry>
</xsl:template>
<xsl:template name="property-doc">
<xsl:apply-templates select="doc:doc/doc:description"/>
<variablelist role="params">
<xsl:for-each select="arg">
<varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
<listitem><simpara><xsl:value-of select="doc:doc/doc:summary"/></simpara></listitem>
</varlistentry>
</xsl:for-each>
</variablelist>
<xsl:apply-templates select="doc:doc/doc:since"/>
<xsl:apply-templates select="doc:doc/doc:deprecated"/>
<xsl:apply-templates select="doc:doc/doc:permission"/>
<xsl:apply-templates select="doc:doc/doc:seealso"/>
</xsl:template>
<xsl:template name="property-details">
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="///property">
<refsect2>
<title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$basename"/>:<xsl:value-of select="@name"/></xsl:attribute></anchor>The "<xsl:value-of select="@name"/>" property</title>
<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$basename"/></secondary></indexterm>
<programlisting>'<xsl:value-of select="@name"/>'<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="2"/></xsl:call-template>
<xsl:call-template name="property-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/></xsl:call-template></programlisting>
</refsect2>
<xsl:call-template name="property-doc"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="signal-doc">
<xsl:apply-templates select="doc:doc/doc:description"/>
<variablelist role="params">
<xsl:for-each select="arg">
<varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
<listitem><simpara><xsl:value-of select="doc:doc/doc:summary"/></simpara></listitem>
</varlistentry>
</xsl:for-each>
</variablelist>
<xsl:apply-templates select="doc:doc/doc:since"/>
<xsl:apply-templates select="doc:doc/doc:deprecated"/>
<xsl:apply-templates select="doc:doc/doc:permission"/>
<xsl:apply-templates select="doc:doc/doc:seealso"/>
</xsl:template>
<xsl:template name="signal-details">
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="///signal">
<refsect2>
<title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$basename"/>::<xsl:value-of select="@name"/></xsl:attribute></anchor>The <xsl:value-of select="@name"/> signal</title>
<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$basename"/></secondary></indexterm>
<programlisting><xsl:value-of select="@name"/> (<xsl:call-template name="signal-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/><xsl:with-param name="prefix" select="."/></xsl:call-template>)</programlisting>
</refsect2>
<xsl:call-template name="signal-doc"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="doc:code">
<programlisting>
<xsl:apply-templates />
</programlisting>
</xsl:template>
<xsl:template match="doc:tt">
<literal>
<xsl:apply-templates />
</literal>
</xsl:template>
<xsl:template match="doc:i">
<emphasis>
<xsl:apply-templates />
</emphasis>
</xsl:template>
<xsl:template match="doc:b">
<emphasis role="bold">
<xsl:apply-templates />
</emphasis>
</xsl:template>
<xsl:template match="doc:ulink">
<ulink>
<xsl:attribute name="url"><xsl:value-of select="@url"/></xsl:attribute>
<xsl:value-of select="."/>
</ulink>
</xsl:template>
<xsl:template match="doc:summary">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="doc:example">
<informalexample>
<xsl:apply-templates />
</informalexample>
</xsl:template>
<xsl:template name="listitems-do-term">
<xsl:param name="str"/>
<xsl:choose>
<xsl:when test="string-length($str) > 0">
<emphasis role="bold"><xsl:value-of select="$str"/>: </emphasis>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template name="do-listitems">
<xsl:for-each select="doc:item">
<listitem>
<xsl:call-template name="listitems-do-term"><xsl:with-param name="str" select="doc:term"/></xsl:call-template>
<xsl:apply-templates select="doc:definition"/>
</listitem>
</xsl:for-each>
</xsl:template>
<xsl:template match="doc:list">
<para>
<xsl:choose>
<xsl:when test="contains(@type,'number')">
<orderedlist>
<xsl:call-template name="do-listitems"/>
</orderedlist>
</xsl:when>
<xsl:otherwise>
<itemizedlist>
<xsl:call-template name="do-listitems"/>
</itemizedlist>
</xsl:otherwise>
</xsl:choose>
</para>
</xsl:template>
<xsl:template match="doc:para">
<para>
<xsl:apply-templates />
</para>
</xsl:template>
<xsl:template match="doc:title">
<refsect2><title role="title.description"><anchor role="description"><xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute></anchor><xsl:value-of select="."/></title></refsect2>
</xsl:template>
<xsl:template match="doc:description">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="doc:since">
<para role="since">Since <xsl:value-of select="@version"/>
</para>
</xsl:template>
<xsl:template match="doc:deprecated">
<xsl:variable name="name" select="../../@name"/>
<xsl:variable name="parent">
<xsl:call-template name="interface-basename">
<xsl:with-param name="str" select="../../../@name"/>/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="type" select="name(../..)"/>
<para role="deprecated">
<warning><para><literal><xsl:value-of select="$name"/></literal> is deprecated since version <xsl:value-of select="@version"/> and should not be used in newly-written code. Use
<xsl:variable name="to">
<xsl:choose>
<xsl:when test="contains($type,'property')">
<xsl:value-of select="$parent"/>:<xsl:value-of select="@instead"/>
</xsl:when>
<xsl:when test="contains($type,'signal')">
<xsl:value-of select="$parent"/>::<xsl:value-of select="@instead"/>
</xsl:when>
<xsl:when test="contains($type,'method')">
<xsl:value-of select="$parent"/>.<xsl:value-of select="@instead"/>
</xsl:when>
<xsl:when test="contains($type,'interface')">
<xsl:value-of select="@instead"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@instead"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="create-link">
<xsl:with-param name="type" select="$type"/>
<xsl:with-param name="to" select="$to"/>
<xsl:with-param name="val" select="@instead"/>
</xsl:call-template>
instead.</para></warning>
</para>
</xsl:template>
<xsl:template match="doc:permission">
<para role="permission">
<xsl:apply-templates />
</para>
</xsl:template>
<xsl:template match="doc:errors">
<para role="errors">
<xsl:apply-templates />
</para>
</xsl:template>
<xsl:template match="doc:seealso">
<para>
See also:
<xsl:apply-templates />
</para>
</xsl:template>
<xsl:template name="create-link">
<xsl:param name="type"/>
<xsl:param name="to"/>
<xsl:param name="val"/>
<xsl:choose>
<xsl:when test="contains($type,'property')">
<link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><literal><xsl:value-of select="$val"/></literal></link>
</xsl:when>
<xsl:when test="contains($type,'signal')">
<link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><literal><xsl:value-of select="$val"/></literal></link>
</xsl:when>
<xsl:when test="contains($type,'method')">
<link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><function><xsl:value-of select="$val"/></function></link>
</xsl:when>
<xsl:when test="contains($type,'interface')">
<link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><xsl:value-of select="$val"/></link>
</xsl:when>
<xsl:when test="contains($type,'description')">
<link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><xsl:value-of select="$val"/></link>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="doc:ref">
<xsl:call-template name="create-link">
<xsl:with-param name="type" select="@type"/>
<xsl:with-param name="to" select="@to"/>
<xsl:with-param name="val" select="."/>
</xsl:call-template>
</xsl:template>
<xsl:template name="method-doc">
<xsl:apply-templates select="doc:doc/doc:description"/>
<variablelist role="params">
<xsl:for-each select="arg">
<varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
<listitem><simpara><xsl:apply-templates select="doc:doc/doc:summary"/></simpara></listitem>
</varlistentry>
</xsl:for-each>
</variablelist>
<xsl:apply-templates select="doc:doc/doc:since"/>
<xsl:apply-templates select="doc:doc/doc:deprecated"/>
<xsl:choose>
<xsl:when test="count(doc:doc/doc:errors) > 0">
<refsect3>
<title>Errors</title>
<variablelist role="errors">
<xsl:for-each select="doc:doc/doc:errors/doc:error">
<varlistentry>
<term><parameter><xsl:value-of select="@name"/></parameter>:</term>
<listitem><simpara><xsl:apply-templates select="."/></simpara></listitem>
</varlistentry>
</xsl:for-each>
</variablelist>
</refsect3>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="count(doc:doc/doc:permission) > 0">
<refsect3>
<title>Permissions</title>
<xsl:apply-templates select="doc:doc/doc:permission"/>
</refsect3>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select="doc:doc/doc:seealso"/>
</xsl:template>
<xsl:template name="method-details">
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="///method">
<refsect2>
<title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$basename"/>.<xsl:value-of select="@name"/></xsl:attribute></anchor><xsl:value-of select="@name"/> ()</title>
<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$basename"/></secondary></indexterm>
<programlisting><xsl:value-of select="@name"/> (<xsl:call-template name="method-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/><xsl:with-param name="prefix" select="."/></xsl:call-template>)</programlisting>
</refsect2>
<xsl:call-template name="method-doc"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="properties-synopsis">
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="///property/@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="///property">
<link><xsl:attribute name="linkend"><xsl:value-of select="$basename"/>:<xsl:value-of select="@name"/></xsl:attribute>'<xsl:value-of select="@name"/>'</link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template> <xsl:call-template name="property-args"><xsl:with-param name="indent" select="$longest + 2"/></xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="signals-synopsis">
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="///signal/@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="///signal">
<link><xsl:attribute name="linkend"><xsl:value-of select="$basename"/>::<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template>(<xsl:call-template name="signal-args"><xsl:with-param name="indent" select="$longest + 2"/><xsl:with-param name="prefix" select="///signal"/></xsl:call-template>)
</xsl:for-each>
</xsl:template>
<xsl:template name="methods-synopsis">
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="///method/@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="///method">
<link><xsl:attribute name="linkend"><xsl:value-of select="$basename"/>.<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template>(<xsl:call-template name="method-args"><xsl:with-param name="indent" select="$longest + 2"/><xsl:with-param name="prefix" select="///method"/></xsl:call-template>)
</xsl:for-each>
</xsl:template>
<xsl:template name="method-args"><xsl:param name="indent"/><xsl:param name="prefix"/><xsl:variable name="longest"><xsl:call-template name="find-longest"><xsl:with-param name="set" select="$prefix/arg/@type"/></xsl:call-template></xsl:variable><xsl:for-each select="arg"><xsl:value-of select="@direction"/>
<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="4 - string-length(@direction)"/></xsl:call-template>'<xsl:value-of select="@type"/>'<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@type) + 1"/></xsl:call-template>
<xsl:value-of select="@name"/><xsl:if test="not(position() = last())">,
<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$indent"/></xsl:call-template></xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="signal-args"><xsl:param name="indent"/><xsl:param name="prefix"/><xsl:variable name="longest"><xsl:call-template name="find-longest"><xsl:with-param name="set" select="$prefix/arg/@type"/></xsl:call-template></xsl:variable><xsl:for-each select="arg">'<xsl:value-of select="@type"/>'<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@type) + 1"/></xsl:call-template>
<xsl:value-of select="@name"/><xsl:if test="not(position() = last())">,
<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$indent"/></xsl:call-template></xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="property-args"><xsl:param name="indent"/>
<xsl:value-of select="@access"/><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="9 - string-length(@access) + 1"/></xsl:call-template>'<xsl:value-of select="@type"/>'
</xsl:template>
<xsl:template name="pad-spaces">
<xsl:param name="width"/>
<xsl:variable name="spaces" xml:space="preserve"> </xsl:variable>
<xsl:value-of select="substring($spaces,1,$width)"/>
</xsl:template>
<xsl:template name="find-longest">
<xsl:param name="set"/>
<xsl:param name="index" select="1"/>
<xsl:param name="longest" select="0"/>
<xsl:choose>
<xsl:when test="$index > count($set)">
<!--finished looking-->
<xsl:value-of select="$longest"/>
</xsl:when>
<xsl:when test="string-length($set[$index])>$longest">
<!--found new longest-->
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="$set"/>
<xsl:with-param name="index" select="$index + 1"/>
<xsl:with-param name="longest" select="string-length($set[$index])"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!--this isn't any longer-->
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="$set"/>
<xsl:with-param name="index" select="$index + 1"/>
<xsl:with-param name="longest" select="$longest"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="interface-basename">
<xsl:param name="str"/>
<xsl:choose>
<xsl:when test="contains($str,'.')">
<xsl:call-template name="interface-basename">
<xsl:with-param name="str" select="substring-after($str,'.')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,82 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY version SYSTEM "version.xml">
]>
<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
<title>fprintd Reference Manual</title>
<releaseinfo>Version &version;</releaseinfo>
<authorgroup>
<author>
<firstname>Bastien</firstname>
<surname>Nocera</surname>
<affiliation>
<address>
<email>hadess@hadess.net</email>
</address>
</affiliation>
</author>
</authorgroup>
<copyright>
<year>2008</year>
<holder>The fprintd Authors</holder>
</copyright>
<legalnotice>
<para>
Permission is granted to copy, distribute and/or modify this
document under the terms of the <citetitle>GNU Free
Documentation License</citetitle>, Version 1.1 or any later
version published by the Free Software Foundation with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. You may obtain a copy of the <citetitle>GNU Free
Documentation License</citetitle> from the Free Software
Foundation by visiting <ulink type="http"
url="http://www.fsf.org">their Web site</ulink> or by writing
to:
<address>
The Free Software Foundation, Inc.,
<street>59 Temple Place</street> - Suite 330,
<city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>,
<country>USA</country>
</address>
</para>
<para>
Many of the names used by companies to distinguish their
products and services are claimed as trademarks. Where those
names appear in any GNOME documentation, and those trademarks
are made aware to the members of the GNOME Documentation
Project, the names have been printed in caps or initial caps.
</para>
</legalnotice>
</bookinfo>
<reference id="ref-dbus">
<title>D-Bus API Reference</title>
<partintro>
<para>
This part documents the D-Bus interface used to access the
fprintd daemon.
</para>
</partintro>
<xi:include href="dbus/net.reactivated.Fprint.Manager.ref.xml"/>
<xi:include href="dbus/net.reactivated.Fprint.Device.ref.xml"/>
</reference>
<index>
<title>Index</title>
</index>
<!-- License -->
<appendix id="license">
<title>License</title>
<para>
<programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../COPYING" parse="text"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting>
</para>
</appendix>
</book>

View File

@ -1 +0,0 @@
@VERSION@

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

208
meson.build Normal file
View File

@ -0,0 +1,208 @@
project('fprintd', 'c',
version: '1.94.1',
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.94.0'
glib_version_def = 'GLIB_VERSION_@0@_@1@'.format(
glib_min_version.split('.')[0], glib_min_version.split('.')[1])
common_cflags = cc.get_supported_arguments([
'-DGLIB_VERSION_MIN_REQUIRED=' + glib_version_def,
'-DGLIB_VERSION_MAX_ALLOWED=' + glib_version_def,
])
add_project_arguments(common_cflags, language: 'c')
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',
)
pthread_dep = dependency('threads')
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() and get_option('pam')).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: false)
option('systemd',
description: 'Install system service files',
type: 'boolean',
value: false)
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,78 +9,177 @@
* 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;
const char *swipe_str;
} fingers[11] = {
{ "left-thumb", N_("Place your left thumb on %s"), N_("Swipe your left thumb on %s") },
{ "left-index-finger", N_("Place your left index finger on %s"), N_("Swipe your left index finger on %s") },
{ "left-middle-finger", N_("Place your left middle finger on %s"), N_("Swipe your left middle finger on %s") },
{ "left-ring-finger", N_("Place your left ring finger on %s"), N_("Swipe your left ring finger on %s") },
{ "left-little-finger", N_("Place your left little finger on %s"), N_("Swipe your left little finger on %s") },
{ "right-thumb", N_("Place your right thumb on %s"), N_("Swipe your right thumb on %s") },
{ "right-index-finger", N_("Place your right index finger on %s"), N_("Swipe your right index finger on %s") },
{ "right-middle-finger", N_("Place your right middle finger on %s"), N_("Swipe your right middle finger on %s") },
{ "right-ring-finger", N_("Place your right ring finger on %s"), N_("Swipe your right ring finger on %s") },
{ "right-little-finger", N_("Place your right little finger on %s"), N_("Swipe your right little finger on %s") },
{ NULL, NULL, NULL }
#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 }
};
static const char *finger_str_to_msg(const char *finger_name, gboolean is_swipe)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
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)
return fingers[i].place_str;
else
return fingers[i].swipe_str;
}
}
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
/* Cases not handled:
* verify-no-match
* 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:
@ -88,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;
}

31
pam/meson.build Normal file
View File

@ -0,0 +1,31 @@
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_grosshack',
name_prefix: '',
include_directories: [
include_directories('..'),
],
sources: [
'pam_fprintd.c',
'fingerprint-strings.h',
],
dependencies: [
libsystemd_dep,
pam_dep,
pthread_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,35 +0,0 @@
ar
bg_BG
bn_IN
ca
ca@valencia
cs
de
el
en_GB
es
fa_IR
fr
fo
ga
gl
hi
hu
id
it
kk
ko
pa
pl
ro
ru
sk
sl
sr
sr@latin
sv
tr
uk
wa
zh_CN
zh_TW

View File

@ -1,5 +0,0 @@
data/net.reactivated.fprint.device.policy.in
src/main.c
src/manager.c
src/device.c
pam/fingerprint-strings.h

172
po/ar.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "تسجيل بصمات جديدة"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr "الصلاحيات مطلوبة لتسجيل بصمات جديدة للمستخدمين الآخرين."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "الصلاحيات مطلوبة لتسجيل بصمات جديدة."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "ضع إبهامك الأيسر على %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "انقر بإبهامك الأيسر على %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "ضع سبابتك اليسرى على %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "انقر بسبابتك اليسرى على %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "ضع أصبعك الوسطى اليسرى على %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "انقر بأصبعك الوسطى اليسرى على %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "ضع بنصرك الأيسر على %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "انقر ببنصرك الأيسر على %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "ضع خنصرك الأيسر على %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "انقر بخنصرك الأيسر على %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "ضع إبهامك الأيمن على %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "انقر بإبهامك الأيمن على %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "ضع سبابتك اليمنى على %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "انقر بسبابتك اليمنى على %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "ضع أصبعك الوسطى اليمنى على %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "انقر بأصبعك الوسطى اليمنى على %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "ضع بنصرك الأيمن على %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "انقر ببنصرك الأيمن على %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "ضع خنصرك الأيمن على %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "انقر بخنصرك الأيمن على %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "ضع أصبعك على القارئ مرة أخرى"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "انقر بأصبعك مرة أخرى"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "النقرة كانت سريعة، حاول ثانيا"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "لم يكن أصبعك موسطّا، حاول ثانيا"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "ارفع أصبعك، ثم حاول ثانيا"

175
po/bg.po
View File

@ -1,175 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-03-22 15:29+0000\n"
"Last-Translator: al_shopov <ash@kambanaria.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Добавяне на нови отпечатъци"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Необходими са допълнителни привилегии, за да добавяте нови отпечатъци за "
"други потребители."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
"Необходими са допълнителни привилегии, за да добавяте нови отпечатъци."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Поставете левия си палец върху %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Прекарайте левия си палец върху %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Поставете левия си показалец върху %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Прекарайте левия си показалец върху %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Поставете левия си среден пръст върху %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Прекарайте левия си среден пръст върху %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Поставете левия си безименен пръст върху %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Прекарайте левия си безименен пръст върху %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Поставете лявото си кутре върху %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Прекарайте лявото си кутре върху %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Поставете десния си палец върху %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Прекарайте десния си палец върху %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Поставете десния си показалец върху %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Прекарайте десния си показалец върху %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Поставете десния си среден пръст върху %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Прекарайте десния си среден пръст върху %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Поставете десния си безименен пръст върху %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Прекарайте десния си безименен пръст върху %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Поставете дясното си кутре върху %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Прекарайте дясното си кутре върху %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Отново поставете пръста си върху четеца"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Отново прекарайте пръста си върху четеца"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Прекалено бързо прекарахте пръста си, опитайте отново"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Пръстът ви не бе центриран, прекарайте го отново"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Махнете пръста си и го прекарайте отново"

View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bulgarian (Bulgaria) <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bengali (India) <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bn_IN\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

172
po/ca.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan (Valencian) <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca@valencia\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

174
po/cs.po
View File

@ -1,174 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Czech <>\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"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Registrovat nové otisky prstů"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"K registraci nových otisků prstů pro jiné uživatele jsou zapotřebí "
"oprávnění."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "K registraci nových otisků prstů jsou zapotřebí oprávnění."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "K ověření otisků prstů jsou zapotřebí oprávnění."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Zvolte uživatele k registraci"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Ověřit otisk prstů"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Zařízení nebylo před použitím získáno"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Zařízení je již používáno jiným uživatelem"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Položte palec levé ruky na %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Otiskněte palec levé ruky na %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Položte ukazováček levé ruky na %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Otiskněte ukazováček levé ruky na %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Položte prostředníček levé ruky na %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Otiskněte prostředníček levé ruky na %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Položte prsteníček levé ruky na %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Otiskněte prsteníček levé ruky na %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Položte malíček levé ruky na %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Otiskněte malíček levé ruky na %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Položte palec pravé ruky na %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Otiskněte palec pravé ruky na %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Položte ukazováček pravé ruky na %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Otiskněte ukazováček pravé ruky na %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Položte prostředníček pravé ruky na %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Otiskněte prostředníček pravé ruky na %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Položte prsteníček pravé ruky na %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Otiskněte prsteníček pravé ruky na %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Položte malíček pravé ruky na %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Otiskněte malíček pravé ruky na %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Položte prst na čtečku znovu"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Otiskněte prst znovu"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Otisknutí bylo příliš rychlé, zkuste to znovu"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Prst nebyl položen na střed, zkuste prst otisknout znovu"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Sejměte prst a zkuste jej znovu otisknout"

180
po/de.po
View File

@ -1,180 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: German <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Neue Fingerabdrücke eintragen"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Systemverwalterrechte sind zum Eintragen neuer Fingerabdrücke für andere "
"Benutzer erforderlich."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
"Systemverwalterrechte sind zum Eintragen neuer Fingerabdrücke erforderlich."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr ""
"Systemverwalterrechte sind zum Überprüfen neuer Fingerabdrücke erforderlich."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Einzutragenden Benutzer auswählen"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Einen Fingerabdruck überprüfen"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Nutzung des Gerätes wurde vorher nicht angefragt"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Gerät wird bereits von einem anderen Benutzer beansprucht"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Legen Sie Ihren linken Daumen auf %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Streifen Sie Ihren linken Daumen über %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Legen Sie Ihren linken Zeigefinger auf %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Streifen Sie Ihren linken Zeigefinger über %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Legen Sie Ihren linken Zeigefinger auf %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Streifen Sie Ihren linken Mittelfinger über %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Legen Sie Ihren linken Ringfinger auf %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Streifen Sie Ihren linken Ringfinger über %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Legen Sie Ihren linken kleinen Finger auf %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Streifen Sie Ihren linken kleinen Finger über %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Legen Sie Ihren rechten Daumen auf %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Streifen Sie Ihren linken Daumen über %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Legen Sie Ihren rechten Zeigefinger auf %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Streifen Sie Ihren rechten Zeigefinger über %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Legen Sie Ihren rechten Mittelfinger auf %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Streifen Sie Ihren rechten Mittelfinger über %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Legen Sie Ihren rechten Ringfinger auf %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Streifen Sie Ihren rechten Ringfinger über %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Legen Sie Ihren rechten kleinen Finger auf %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Streifen Sie Ihren rechten kleinen Finger über %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Legen Sie Ihren Finger erneut auf den Leser"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Streifen Sie Ihren Finger erneut"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Das Abstreifen war zu kurz, versuchen Sie es erneut"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
"Ihr Finger war nicht zentriert, versuchen Sie erneut Ihren Finger "
"abzustreifen"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""
"Entfernen Sie Ihren Finger und versuchen Sie erneut Ihren Finger "
"abzustreifen"

172
po/el.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Greek <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en_GB\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Enroll new fingerprints"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr "Privileges are required to enroll new fingerprints for other users."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Privileges are required to enroll new fingerprints."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Privileges are required to verify fingerprints."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Select a user to enroll"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Verify a fingerprint"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Device was not claimed before use"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Device already in use by another user"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Place your left thumb on %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Swipe your left thumb on %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Place your left index finger on %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Swipe your left index finger on %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Place your left middle finger on %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Swipe your left middle finger on %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Place your left ring finger on %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Swipe your left ring finger on %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Place your left little finger on %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Swipe your left little finger on %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Place your right thumb on %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Swipe your right thumb on %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Place your right index finger on %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Swipe your right index finger on %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Place your right middle finger on %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Swipe your right middle finger on %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Place your right ring finger on %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Swipe your right ring finger on %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Place your right little finger on %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Swipe your right little finger on %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Place your finger on the reader again"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Swipe your finger again"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Swipe was too short, try again"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Your finger was not centred, try swiping your finger again"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Remove your finger, and try swiping your finger again"

173
po/es.po
View File

@ -1,173 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Registrar huellas nuevas"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Se requieren privilegios para enrollar huellas nuevas para otros usuarios."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Se requieren privilegios para registrar huellas nuevas."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Se requieren privilegios para verificar huellas."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Seleccionar un usuario para registrar"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Verificar una huella"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "No se llamó al dispositivo antes de usarlo"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "El dispositivo ya está en uso por otro usuario"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Ponga su pulgar izquierdo en %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Pase su pulgar izquierdo sobre %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Ponga su dedo índice izquierdo en %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Pase su dedo índice izquierdo sobre %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Ponga su dedo corazón izquierdo en %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Pase su dedo corazón izquierdo sobre %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Ponga su dedo anular izquierdo en %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Pase su dedo anular izquierdo sobre %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Ponga su dedo meñique izquierdo en %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Pase su dedo meñique izquierdo sobre %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Ponga su pulgar derecho en %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Pase su pulgar derecho sobre %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Ponga su dedo índice derecho en %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Pase su dedo índice derecho sobre %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Ponga su dedo corazón derecho en %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Pase su dedo corazón derecho sobre %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Ponga su dedo anular derecho en %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Pase su dedo anular derecho sobre %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Ponga su dedo meñique derecho en %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Pase su dedo meñique derecho sobre %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Ponga de nuevo su dedo en el lector"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Pase su dedo de nuevo"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "La pasada fue demasiado corta, inténtelo de nuevo"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Su dedo no estaba centrado, intente pasar su dedo de nuevo"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Quite su dedo e intente pasar su dedo de nuevo"

View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Persian (Iran) <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fa_IR\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

174
po/fo.po
View File

@ -1,174 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-03-22 15:29+0000\n"
"Last-Translator: Gunleif <fo.umseting@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fo\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Skráset nýggj fingramerki"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Serrættindi eru krøvd, til at skráseta nýggj fingramerki fyri arðar "
"brúkarar."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Serrættindi eru krøvd til at skráseta nýggj gingramerki."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Serrættindi eru krøvd til at vátta fingramerki"
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Vel ein brúkara at skráseta"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Vátta eitt fingramerki"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Tóleind varð ikki kravd áðrenn nýtslu"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Tóleind er longu í brúka, av einum ørðum brúkara"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Set vinstra tummil á %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Drag vinstra tummil eftir %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Set vinstra peikifingur á %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Drag vinstra peikifingur eftir %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Set vinstra longutong á %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Drag vinstra longutong eftir %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Set vinstra ringfingur á %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Drag vinstra ringfingur eftir %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Set vinstra lítlafingur á %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Drag vinstra lítlafingur eftir %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Set høgra tummil á %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Drag høgra tummil eftir %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Set høgra peikifingur á %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Drag høgra peikifingur eftir %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Set høgra longutong á %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Drag høgra longutong eftir %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Set høgra ringfingur á %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Drag høgra ringfingur eftir %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Set høgra lítlafingur á %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Drag høgra lítlafingur eftir %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Set fingurin á lesaran umaftur"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Drag fingurin enn eina ferð"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Dragið var ov stutt, royn aftur"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Fingurin var ikki á miðjuni, royn at draga fingurin ein ferð afturat"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Flyt fingurin, og royn aftur at draga hann"

179
po/fr.po
View File

@ -1,179 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-03-22 15:29+0000\n"
"Last-Translator: claudep <claude@2xlibre.net>\n"
"Language-Team: French <traduc@traduc.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Introduire de nouvelles empreintes"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Des permissions sont nécessaires pour introduire de nouvelles empreintes "
"digitales pour d'autres utilisateurs."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
"Des permissions sont nécessaires pour introduire de nouvelles empreintes "
"digitales."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr ""
"Des permissions sont nécessaires pour contrôler des empreintes digitales."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Choisir un utilisateur pour l'introduction"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Vérifier une empreinte digitale"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Le périphérique n'a pas été réservé avant utilisation"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Le périphérique est déjà utilisé par un autre utilisateur"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Placez votre pouce gauche sur %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Glissez votre pouce gauche sur %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Placez votre index gauche sur %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Glissez votre index gauche sur %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Placez votre majeur gauche sur %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Glissez votre majeur gauche sur %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Placez votre annulaire gauche sur %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Glissez votre annulaire gauche sur %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Placez votre auriculaire gauche sur %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Glissez votre auriculaire gauche sur %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Placez votre pouce droit sur %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Glissez votre pouce droit sur %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Placez votre index droit sur %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Glissez votre index droit sur %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Placez votre majeur droit sur %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Glissez votre majeur droit sur %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Placez votre annulaire droit sur %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Glissez votre annulaire droit sur %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Placez votre auriculaire droit sur %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Glissez votre auriculaire droit sur %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Placez à nouveau votre doigt sur le lecteur"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Glissez à nouveau votre doigt"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Le glissement était trop bref, essayez une nouvelle fois"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
"Votre doigt n'était pas centré, essayez de le glisser une nouvelle fois"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""
"Enlevez votre doigt du lecteur et essayez de le glisser une nouvelle fois"

172
po/ga.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Irish <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ga\n"
"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

174
po/gl.po
View File

@ -1,174 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Rexistrar novas pegadas dixitais"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Requírense privilexios para rexistrar novas pegadas dixitais para outros "
"usuarios."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Requírense privilexios para rexistrar novas pegadas dixitais."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Requírense privilexios para verificar pegadas dixitais."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Seleccione o usuario a rexistrar"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Verificar a pegada dixital"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "O dispositivo non foi solicitado antes do seu uso"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "O dispositivo está sendo usado por outro usuario"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Dispoña o dedo polgar esquerdo en %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Deslice o seu dedo polgar esquerdo en %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Dispoña o seu dedo índice esquerdo en %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Deslice o seu dedo índice esquerdo en %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Dispoña o seu dedo mediano esquerdo en %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Deslice o seu dedo mediano esquerdo en %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Dispoña o seu dedo anular esquerdo en %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Dispoña o seu dedo anular esquerdo en %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Dispoña o seu dedo maimiño esquerdo en %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Deslice o seu dedo maimiño esquerdo en %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Dispoña o seu dedo polgar dereito en %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Deslice o seu dedo polgar dereito en %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Dispoña o seu dedo índice dereito en %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Deslice o seu dedo índice dereito en %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Dispoña o seu dedo mediano dereito en %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Deslice o seu dedo mediano dereito en %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Dispoña o seu dedo anular dereito en %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Deslice o seu dedo anular dereito en %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Dispoña o seu dedo maimiño dereito en %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Deslice o seu dedo maimiño dereito en %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Dispoña de novo o seu dedo no lector"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Deslice de novo o seu dedo"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "A lectura foi moi curta, ténteo de novo"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "O seu dedo non estaba centrado, tente a deslizar o seu dedo de novo"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Retire o seu dedo e tente deslizar o seu dedo de novo"

172
po/hi.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hindi <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hi\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

173
po/hu.po
View File

@ -1,173 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian <openscope@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Új újjlenyomatok felvétele"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Jogosultság szükséges új ujjlenyomatok felvételéhez más felhasználóknak."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Jogosultság szükséges új ujjlenyomatok felvételéhez."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Jogosultság szükséges az ujjlenyomatok ellenőrzéséhez."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Válassza ki a felveendő felhasználót"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Ujjlenyomat ellenőrzése"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Az eszközt használat előtt nem foglalták le"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Az eszközt már másik felhasználó használja"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Helyezze a bal hüvelykujját ide: %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Húzza le a bal hüvelykujját ezen: %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Helyezze a bal mutatóujját ide: %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Húzza le a bal mutatóujját ezen: %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Helyezze a bal középső ujját ide: %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Húzza le a bal középső ujját ezen: %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Helyezze a bal gyűrűsujját ide: %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Húzza le a bal gyűrűsujját ezen: %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Helyezze a bal kisujját ide: %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Húzza le a bal kisujját ezen: %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Helyezze a jobb hüvelykujját ide: %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Húzza le a jobb hüvelykujját ezen: %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Helyezze a jobb mutatóujját ide: %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Húzza le a jobb mutatóujját ezen: %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Helyezze a jobb középső ujját ide: %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Húzza le a jobb középső ujját ezen: %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Helyezze a jobb gyűrűsujját ide: %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Húzza le a jobb gyűrűsujját ezen: %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Helyezze a jobb kisujját ide: %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Húzza le a jobb kisujját ezen: %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Helyezze ismét az olvasóra az ujját"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Húzza le ismét az ujját"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "A lehúzás túl gyors volt, próbálja újra"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Az ujja nem volt középen, próbálj ismét lehúzni"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Vegye el az ujját és próbálja újra lehúzni"

173
po/id.po
View File

@ -1,173 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Indonesian <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Mendaftar sidik jari baru"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Diperlukan hak khusus untuk mendaftarkan sidik jari baru bagi pengguna lain."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Diperlukan hak khusus untuk mendaftarkan sidik jari baru."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Diperlukan hak khusus untuk memeriksa kebenaran sidik jari."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Pilih pengguna untuk didaftar"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Periksa kebenaran sidik jari"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Perangkat tak diklaim sebelum dipakai"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Perangkat telah sedang dipakai oleh pengguna lain"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Letakkan jempol kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Gesekkan jempol kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Letakkan telunjuk kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Gesekkan telunjuk kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Letakkan jari tengah kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Gesekkan jari tengah kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Letakkan jari manis kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Gesekkan jari manis kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Letakkan kelingking kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Gesekkan kelingking kiri Anda pada %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Letakkan jempol kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Gesekkan jempol kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Letakkan telunjuk kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Gesekkan telunjuk kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Letakkan jari tengah kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Gesekkan jari tengah kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Letakkan jari manis kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Gesekkan jari manis kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Letakkan kelingking kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Gesekkan kelingking kanan Anda pada %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Letakkan jari Anda pada pembaca lagi"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Gesekkan lagi jari Anda"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Gesekan terlalu pendek, coba lagi"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Jari Anda tidak di tengah, coba gesekkan jari Anda lagi"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Angkat jari Anda, lalu coba gesekkan lagi"

173
po/it.po
View File

@ -1,173 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Italian <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Registra nuove impronte"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Sono richiesti dei privilegi per registrare nuove impronte per altri utenti."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Sono richiesti dei privilegi per registrare nuove impronte."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Sono richiesti dei privilegi per verificare le impronte."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Seleziona un utente da registrare"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Verifica una impronta"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Il device non è stato richiesto prima dell'uso"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Un altro utente sta già usando il device"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Posizionare il pollice sinistro su %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Passare il pollice sinistro su %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Posizionare l'indice sinistro su %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Passare l'indice sinistro su %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Posizionare il medio sinistro su %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Passare il medio sinistro su %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Posizionare l'anulare sinistro su %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Passare l'anulare sinistro su %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Posizionare il mignolo sinistro su %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Passare il mignolo sinistro su %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Posizionare il pollice destro su %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Passare il pollice destro su %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Posizionare l'indice destro su %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Passare l'indice destro su %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Posizionare il medio destro su %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Passare il medio destro su %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Posizionare l'anulare destro su %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Passare l'anulare destro su %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Posizionare il mignolo destro su %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Passare il mignolo destro su %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Posizionare nuovamente il dito sul lettore"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Passare nuovamente il dito"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Il passaggio è stato troppo corto, riprovare"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Il dito non era centrato, riperete un altro passaggio"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Rimuovere il dito e ripetere un altro passaggio"

172
po/kk.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Kazakh <None>\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"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

172
po/ko.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Korean <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

172
po/pa.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Panjabi (Punjabi) <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pa\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

175
po/pl.po
View File

@ -1,175 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Polish <None>\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"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Pobieranie odcisków palców"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Wymagane są uprawnienia, aby pobrać nowe odciski palców dla innych "
"użytkowników."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Wymagane są uprawnienia, aby pobrać nowe odciski palców."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Wymagane są uprawnienia, aby zweryfikować odciski palców."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Wybór użytkownika do pobrania"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Weryfikowanie odcisków palców"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Urządzenie nie zostało zajęte przed użyciem"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Urządzenie jest już używane przez innego użytkownika"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Proszę umieścić lewy kciuk na urządzeniu %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Proszę przeciągnąć lewy kciuk na urządzeniu %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Proszę umieścić lewy palec wskazujący na urządzeniu %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Proszę przeciągnąć lewy palec środkowy na urządzeniu %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Proszę umieścić lewy palec środkowy na urządzeniu %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Proszę przeciągnąć lewy palec środkowy na urządzeniu %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Proszę umieścić lewy palec serdeczny na urządzeniu %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Proszę przeciągnąć lewy palec serdeczny na urządzeniu %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Proszę umieścić lewy mały palec na urządzeniu %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Proszę przeciągnąć lewy mały palec na urządzeniu %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Proszę umieścić prawy kciuk na urządzeniu %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Proszę przeciągnąć prawy kciuk na urządzeniu %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Proszę umieścić prawy palec wskazujący na urządzeniu %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Proszę przeciągnąć prawy palec wskazujący na urządzeniu %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Proszę umieścić prawy palec środkowy na urządzeniu %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Proszę przeciągnąć prawy palec środkowy na urządzeniu %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Proszę umieścić prawy palec serdeczny na urządzeniu %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Proszę przeciągnąć prawy palec serdeczny na urządzeniu %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Proszę umieścić prawy mały palec na urządzeniu %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Proszę przeciągnąć prawy mały palec na urządzeniu %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Proszę ponownie umieścić palec na urządzeniu"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Proszę ponownie przeciągnąć palec"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Przeciągnięcie było zbyt krótkie, proszę spróbować ponownie"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Palec nie został wyśrodkowany, proszę ponownie przeciągnąć palec"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""
"Proszę odsunąć palec i spróbować ponownie przeciągnąć palec na urządzeniu"

174
po/ro.po
View File

@ -1,174 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Înscrie amprente noi"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Sunt necesare privilegii pentru a înscrie amprente noi pentru alți "
"utilizatori."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Sunt necesare privilegii pentru a înscrie amprente noi."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Sunt necesare privilegii pentru a verifica amprentele."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Alegeți un utilizator de înscris"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Verifică o amprentă"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Dispozitivul nu a fost solicitat înainte de utilizare"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Dispozitivul este deja utilizat de un alt utilizator"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Plasați degetul mare de la mâna stângă pe %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Treceți degetul mare de la mâna stângă peste %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Plasați degetul arătător de la mâna stângă pe %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Treceți degetul arătător de la mâna stângă peste %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Plasați degetul mijlociu de la mâna stângă pe %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Treceți degetul mijlociu de la mâna stângă peste %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Plasați degetul inelar de la mâna stângă pe %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Treceți degetul inelar de la mâna stângă peste %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Plasați degetul mic de la mâna stângă pe %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Treceți degetul mic de la mâna stângă peste %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Plasați degetul mare de la mâna dreaptă pe %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Treceți degetul mare de la mâna dreaptă peste %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Plasați degetul arătător de la mâna dreaptă pe %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Treceți degetul arătător de la mâna dreaptă peste %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Plasați degetul mijlociu de la mâna dreaptă pe %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Treceți degetul mijlociu de la mâna dreaptă peste %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Plasați degetul inelar de la mâna dreaptă pe %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Treceți degetul inelar de la mâna dreaptă peste %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Plasați degetul mic de la mâna dreaptă pe %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Treceți degetul mic de la mâna dreaptă peste %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Plasați din nou degetul pe cititor"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Treceți degetul din nou"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Trecerea degetului a fost prea scurtă, mai încercați o dată"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Degetul nu a fost centrat, încercați să-l mai treceți o dată"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Luați degetul și mai încercați să-l treceți o dată"

172
po/ru.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

174
po/sk.po
View File

@ -1,174 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-03-22 15:29+0000\n"
"Last-Translator: palos <palo.simo@gmail.com>\n"
"Language-Team: Slovak <None>\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"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Zaregistrovať nové odtlačky prstov"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Na registrovanie nových odtlačkov prstov pre iných používateľov sú potrebné "
"oprávnenia."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Na registrovanie nových odtlačkov prstov sú potrebné oprávnenia."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Na overenie odtlačkov prstov sú potrebné oprávnenia."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Zvolte uživatele k registraci"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Overiť odtlačok prsta"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Zariadenie nebolo pred použitím vyžiadané"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Zariadenia je už používané iným používateľom"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Položte palec ľavej ruky na %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Prejdite palcom ľavej ruky po %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Položte ukazovák ľavej ruky na %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Prejdite ukazovákom ľavej ruky po %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Položte prostredník ľavej ruky na %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Prejdite prostredníkom ľavej ruky po %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Položte prstenník ľavej ruky na %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Prejdite prsteníkom ľavej ruky po %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Položte malíček ľavej ruky na %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Prejdite malíčkom ľavej ruky po %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Položte palec pravej ruky na %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Prejdite palcom pravej ruky po %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Položte ukazovák pravej ruky na %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Prejdite ukazovákom pravej ruky po %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Položte prostredník pravej ruky na %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Prejdite prostredníkom pravej ruky po %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Položte prstenník pravej ruky na %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Prejdite prstenníkom pravej ruky po %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Položte malíček pravej ruky na %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Prejdite malíčkom pravej ruky po %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Položte prst na čítačku znova"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Prejdite prstom znova"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Prechod bol príliš krátky, skúste to znova"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Prst nebol položený na stred, skúste prstom prejsť znova"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Zodvihnite svoj prst a skúste ním prejsť znova"

176
po/sl.po
View File

@ -1,176 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Slovenian <lugos-slo@lugos.si>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Vpišite nove prstne odtise"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Za vpis novih prstnih odtisov drugih uporabnikov so zahtevana skrbniška "
"dovoljenja."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Za vpis novih prstnih odtisov so zahtevana skrbniška dovoljenja."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Za overjanje prstnih odtisov so zahtevana skrbniška dovoljenja."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Izbor uporabnika za vpis prstnega odtisa"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Overjanje s prstnim odtisom"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Naprava je prevzeta pred uporabo"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Napravo uporablja drug uporabnik"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Položite levi palec na %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Povlecite levi palec preko %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Položite levi kazalec na %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Povlecite levi kazalec preko %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Položite levi sredinec na %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Povlecite levi sredinec preko %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Položite levi prstanec na %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Povlecite levi prstanec preko %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Položite levi mezinec na %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Povlecite levi mezinec preko %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Položite desni palec na %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Povlecite desni palec preko %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Položite desni kazalec na %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Povlecite desni kazalec preko %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Položite desni sredinec na %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Povlecite desni sredinec preko %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Položite desni prstanec na %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Povlecite desni prstanec preko %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Položite desni mezinec na %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Povlecite desni mezinec preko %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Ponovno položite prst na bralnik"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Znova povlecite prst preko bralnika."
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Prst ste povlekli prehitro. Poskusite znova."
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
"Prsta niste postavili na sredino, poskusite znova povleči prst preko "
"bralnika."
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Dvignite prst in poskusite znova povleči prst preko bralnika."

172
po/sr.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Serbian <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Учитај нови отисак прста"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr "Потребна су овлашћења за учитавање отиска прста за остале кориснике."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Потребна су овлашћења за учитавање отиска прста."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Поставите палац леве руке на %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Превуците палац леве руке преко %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Поставите кажипрст леве руке на %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Превуците кажипрст леве руке преко %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Поставите средњи прст леве руке на %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Превуците средњи прст леве руке преко %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Поставите домали прст леве руке на %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Превуците домали прст леве руке преко %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Поставите мали прст леве руке на %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Превуците мали прст леве руке преко %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Поставите палац десне руке на %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Превуците палац десне руке преко %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Поставите кажипрст десне руке на %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Превуците кажипрст десне руке преко %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Поставите средњи прст десне руке на %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Превуците средњи прст десне руке преко %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Поставите домали прст десне руке на %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Превуците домали прст десне руке преко %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Поставите мали прст десне руке на %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Превуците мали прст десне руке преко %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Поново ставите прст на читач"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Поново превуците прст преко читача"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Сувише сте брзо превукли прст, покушајте поново"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Прст није био на средини читача, покушајте поново"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Склоните прст и покушајте да га превучете поново"

View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Serbian (Latin) <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sr@latin\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

173
po/sv.po
View File

@ -1,173 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Swedish <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Registrera nya fingeravtryck"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Privilegier krävs för att registera nya fingeravtryck för andra användare."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Privilegier krävs för att registrera nya fingeravtryck."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify fingerprints."
msgstr "Privilegier krävs för att verifiera fingeravtryck."
#: ../data/net.reactivated.fprint.device.policy.in.h:5
msgid "Select a user to enroll"
msgstr "Välj användare att registrera"
#: ../data/net.reactivated.fprint.device.policy.in.h:6
msgid "Verify a fingerprint"
msgstr "Verifiera fingeravtryck"
#: ../src/device.c:385
#, c-format
msgid "Device was not claimed before use"
msgstr "Enheten har inte tagits över innan användning"
#: ../src/device.c:395
#, c-format
msgid "Device already in use by another user"
msgstr "Enheten används redan av en annan användare"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Placera din vänstra tumme på %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Dra din vänstra tumme på %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Placera ditt vänstra pekfinger på %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Dra ditt vänstra pekfinger på %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Placera ditt vänstra långfinger på %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Dra ditt vänstra långfinger på %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Placera ditt vänsta ringfinger på %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Dra ditt vänstra ringfinger på %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Placera ditt vänstra lillfinger på %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Dra ditt vänstra lillfinger på %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Placera din högra tumme på %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Dra din högra tumme på %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Placera ditt högra pekfinger på %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Dra ditt högra pekfinger på %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Placera ditt högra långfinger på %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Dra ditt högra långfinger på %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Placera ditt högra ringfinger på %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Dra ditt högra ringfinger på %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Placera ditt högra lillfinger på %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Dra ditt högra lillfinger på %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Placera ditt finger på läsaren igen"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Dra ditt finger igen"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Dragningen var för kort, försök igen"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr "Ditt finger var inte centrerat. Prova att dra ditt finger igen"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Ta bort ditt finger och prova att dra ditt finger igen"

172
po/tr.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Turkish <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

175
po/uk.po
View File

@ -1,175 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: uk\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "Реєстрація нових відбитків пальців"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
"Для реєстрації нових відбитків для інших користувачів потрібні відповідні "
"права доступу."
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr "Для реєстрації нових відбитків потрібні відповідні права доступу."
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr "Прикладіть лівий великий палець до %s"
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr "Натисніть лівим великим пальцем на %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr "Прикладіть лівий вказівний палець до %s"
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr "Натисніть лівим вказівним пальцем на %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr "Прикладіть лівий середній палець до %s"
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr "Натисніть лівим середнім пальцем на %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr "Прикладіть лівий безіменний палець до %s"
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr "Натисніть лівим безіменним пальцем на %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr "Прикладіть лівий мізинець до %s"
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr "Натисніть лівим мізинцем на %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr "Прикладіть правий великий палець до %s"
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr "Натисніть правим великим пальцем на %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr "Прикладіть правий вказівний палець до %s"
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr "Натисніть правим вказівним пальцем на %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr "Прикладіть правий середній палець до %s"
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr "Натисніть правим середнім пальцем на %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr "Прикладіть правий безіменний палець до %s"
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr "Натисніть правим безіменним пальцем на %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr "Прикладіть правий мізинець до %s"
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr "Натисніть правим мізинцем на %s"
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr "Прикладіть ваш палець до пристрою зчитування ще раз"
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr "Натисніть вашим пальцем ще раз"
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr "Натискання було занадто коротким, повторіть спробу"
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
"Ваш палець було розташовано не у центрі, спробуйте натиснути пальцем ще раз"
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr "Приберіть ваш палець і повторіть спробу натискання"

172
po/wa.po
View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Walloon <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: wa\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-04-18 16:57+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

View File

@ -1,172 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?product=libfprint\n"
"POT-Creation-Date: 2011-03-30 16:29+0100\n"
"PO-Revision-Date: 2011-03-22 15:29+0000\n"
"Last-Translator: zerng07 <pswo10680@gmail.com>\n"
"Language-Team: Chinese (Taiwan) <None>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Enroll new fingerprints"
msgstr "新指紋"
#: ../data/net.reactivated.fprint.device.policy.in.h:2
msgid "Privileges are required to enroll new fingerprints for other users."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:3
msgid "Privileges are required to enroll new fingerprints."
msgstr ""
#: ../data/net.reactivated.fprint.device.policy.in.h:4
msgid "Privileges are required to verify 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 "Verify a fingerprint"
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:28
#, c-format
msgid "Place your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:28
#, c-format
msgid "Swipe your left thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Place your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:29
#, c-format
msgid "Swipe your left index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Place your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:30
#, c-format
msgid "Swipe your left middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Place your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:31
#, c-format
msgid "Swipe your left ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Place your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:32
#, c-format
msgid "Swipe your left little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Place your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:33
#, c-format
msgid "Swipe your right thumb on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Place your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:34
#, c-format
msgid "Swipe your right index finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Place your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:35
#, c-format
msgid "Swipe your right middle finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Place your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:36
#, c-format
msgid "Swipe your right ring finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Place your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:37
#, c-format
msgid "Swipe your right little finger on %s"
msgstr ""
#: ../pam/fingerprint-strings.h:72 ../pam/fingerprint-strings.h:98
msgid "Place your finger on the reader again"
msgstr ""
#: ../pam/fingerprint-strings.h:74 ../pam/fingerprint-strings.h:100
msgid "Swipe your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:77 ../pam/fingerprint-strings.h:103
msgid "Swipe was too short, try again"
msgstr ""
#: ../pam/fingerprint-strings.h:79 ../pam/fingerprint-strings.h:105
msgid "Your finger was not centered, try swiping your finger again"
msgstr ""
#: ../pam/fingerprint-strings.h:81 ../pam/fingerprint-strings.h:107
msgid "Remove your finger, and try swiping your finger again"
msgstr ""

View File

@ -1,44 +0,0 @@
BUILT_SOURCES = manager-dbus-glue.h device-dbus-glue.h $(MARSHALFILES) $(interfaces_DATA)
noinst_HEADERS = $(BUILT_SOURCES)
CLEANFILES = $(BUILT_SOURCES)
EXTRA_DIST = manager.xml device.xml fprintd-marshal.list
libexec_PROGRAMS = fprintd
noinst_LTLIBRARIES = libfprintd.la
AM_CFLAGS = $(WARN_CFLAGS) $(FPRINT_CFLAGS) $(DAEMON_CFLAGS) -DLOCALEDIR=\""$(datadir)/locale"\" -DPLUGINDIR=\""$(libdir)/fprintd/modules"\"
libfprintd_la_SOURCES = \
manager.c device.c \
$(MARSHALFILES) \
fprintd.h
libfprintd_la_LIBADD = $(FPRINT_LIBS) $(DAEMON_LIBS)
libfprintd_la_LDFLAGS = -no-undefined
fprintd_SOURCES = \
main.c \
file_storage.c file_storage.h storage.h
fprintd_LDADD = libfprintd.la
interfaces_DATA = net.reactivated.Fprint.Manager.xml net.reactivated.Fprint.Device.xml
net.reactivated.Fprint.Manager.xml: manager.xml
cat $< > $@
net.reactivated.Fprint.Device.xml: device.xml
cat $< > $@
interfacesdir = $(datadir)/dbus-1/interfaces/
manager-dbus-glue.h: manager.xml
dbus-binding-tool --prefix=fprint_manager --mode=glib-server $< --output=$@
device-dbus-glue.h: device.xml
dbus-binding-tool --prefix=fprint_device --mode=glib-server $< --output=$@
MARSHALFILES = fprintd-marshal.c fprintd-marshal.h
GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0`
fprintd-marshal.h: fprintd-marshal.list
( $(GLIB_GENMARSHAL) --prefix=fprintd_marshal $(srcdir)/fprintd-marshal.list --header > fprintd-marshal.h )
fprintd-marshal.c: fprintd-marshal.h
( $(GLIB_GENMARSHAL) --prefix=fprintd_marshal $(srcdir)/fprintd-marshal.list --body --header > fprintd-marshal.c )

File diff suppressed because it is too large Load Diff

View File

@ -1,566 +0,0 @@
<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
<!ENTITY ERROR_CLAIM_DEVICE "net.reactivated.Fprint.Error.ClaimDevice">
<!ENTITY ERROR_ALREADY_IN_USE "net.reactivated.Fprint.Error.AlreadyInUse">
<!ENTITY ERROR_INTERNAL "net.reactivated.Fprint.Error.Internal">
<!ENTITY ERROR_PERMISSION_DENIED "net.reactivated.Fprint.Error.PermissionDenied">
<!ENTITY ERROR_NO_ENROLLED_PRINTS "net.reactivated.Fprint.Error.NoEnrolledPrints">
<!ENTITY ERROR_NO_ACTION_IN_PROGRESS "net.reactivated.Fprint.Error.NoActionInProgress">
<!ENTITY ERROR_INVALID_FINGERNAME "net.reactivated.Fprint.Error.InvalidFingername">
]>
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
<interface name="net.reactivated.Fprint.Device">
<annotation name="org.freedesktop.DBus.GLib.CSymbol"
value="fprint_device" />
<doc:doc>
<doc:title id="polkit-integration">
PolicyKit integration
</doc:title>
<doc:para>
fprintd uses PolicyKit to check whether users are allowed to access fingerprint data, or the
fingerprint readers itself.
<doc:list>
<doc:item>
<doc:term>net.reactivated.fprint.device.verify</doc:term>
<doc:definition>
Whether the user is allowed to verify fingers against saved fingerprints.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>net.reactivated.fprint.device.enroll</doc:term>
<doc:definition>
Whether the user is allowed to enroll new fingerprints.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>net.reactivated.fprint.device.setusername</doc:term>
<doc:definition>
Whether the user is allowed to query, verify, or enroll fingerprints for users other than itself.
</doc:definition>
</doc:item>
</doc:list>
</doc:para>
<doc:title id="usernames">
Usernames
</doc:title>
<doc:para>
When a username argument is used for a method, a PolicyKit check is done on the
<doc:tt>net.reactivated.fprint.device.setusername</doc:tt> PolicyKit
action to see whether the user the client is running as is allowed to access data from other users.
</doc:para>
<doc:para>
By default, only root is allowed to access fingerprint data for users other than itself. For a normal user,
it is recommended that you use an empty string for the username, which will mean "the client the user is
running as".
</doc:para>
<doc:para>
See <doc:ref type="description" to="polkit-integration">PolicyKit integration</doc:ref>.
</doc:para>
<doc:title id="fingerprint-names">
Fingerprint names
</doc:title>
<doc:para>
When a finger name argument is used for a method, it refers to either a single finger, or
"any" finger. See the list of possible values below:
<doc:list>
<doc:item>
<doc:term>left-thumb</doc:term>
<doc:definition>
Left thumb
</doc:definition>
</doc:item>
<doc:item>
<doc:term>left-index-finger</doc:term>
<doc:definition>
Left index finger
</doc:definition>
</doc:item>
<doc:item>
<doc:term>left-middle-finger</doc:term>
<doc:definition>
Left middle finger
</doc:definition>
</doc:item>
<doc:item>
<doc:term>left-ring-finger</doc:term>
<doc:definition>
Left ring finger
</doc:definition>
</doc:item>
<doc:item>
<doc:term>left-little-finger</doc:term>
<doc:definition>
Left little finger
</doc:definition>
</doc:item>
<doc:item>
<doc:term>right-thumb</doc:term>
<doc:definition>
Right thumb
</doc:definition>
</doc:item>
<doc:item>
<doc:term>right-index-finger</doc:term>
<doc:definition>
Right index finger
</doc:definition>
</doc:item>
<doc:item>
<doc:term>right-middle-finger</doc:term>
<doc:definition>
Right middle finger
</doc:definition>
</doc:item>
<doc:item>
<doc:term>right-ring-finger</doc:term>
<doc:definition>
Right ring finger
</doc:definition>
</doc:item>
<doc:item>
<doc:term>right-little-finger</doc:term>
<doc:definition>
Right little finger
</doc:definition>
</doc:item>
<doc:item>
<doc:term>any</doc:term>
<doc:definition>
Any finger. This is only used for <doc:ref type="method" to="Device.VerifyStart">Device.VerifyStart</doc:ref>
(select the first finger with a fingerprint associated, or all the fingerprints available for the user when
the device supports it) and <doc:ref type="signal" to="Device::VerifyFingerSelected">Device::VerifyFingerSelected</doc:ref>
(any finger with an associated fingerprint can be used).
</doc:definition>
</doc:item>
</doc:list>
</doc:para>
<doc:title id="verify-statuses">
Verify Statuses
</doc:title>
<doc:para>
<doc:list>
Possible values for the result passed through <doc:ref type="signal" to="Device::VerifyResult">Device::VerifyResult</doc:ref> are:
<doc:item>
<doc:term>verify-no-match</doc:term>
<doc:definition>
The verification did not match, <doc:ref type="method" to="Device.VerifyStop">Device.VerifyStop</doc:ref> should now be called.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>verify-match</doc:term>
<doc:definition>
The verification succeeded, <doc:ref type="method" to="Device.VerifyStop">Device.VerifyStop</doc:ref> should now be called.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>verify-retry-scan</doc:term>
<doc:definition>
The user should retry scanning their finger, the verification is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>verify-swipe-too-short</doc:term>
<doc:definition>
The user's swipe was too short. The user should retry scanning their finger, the verification is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>verify-finger-not-centered</doc:term>
<doc:definition>
The user's finger was not centered on the reader. The user should retry scanning their finger, the verification is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>verify-remove-and-retry</doc:term>
<doc:definition>
The user should remove their finger from the reader and retry scanning their finger, the verification is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>verify-disconnected</doc:term>
<doc:definition>
The device was disconnected during the verification, no other actions should be taken, and you shouldn't use the device any more.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>verify-unknown-error</doc:term>
<doc:definition>
An unknown error occurred (usually a driver problem), <doc:ref type="method" to="Device.VerifyStop">Device.VerifyStop</doc:ref> should now be called.
</doc:definition>
</doc:item>
</doc:list>
</doc:para>
<doc:title id="enroll-statuses">
Enroll Statuses
</doc:title>
<doc:para>
<doc:list>
Possible values for the result passed through <doc:ref type="signal" to="Device::EnrollResult">Device::EnrollResult</doc:ref> are:
<doc:item>
<doc:term>enroll-completed</doc:term>
<doc:definition>
The enrollment successfully completed, <doc:ref type="method" to="Device.EnrollStop">Device.EnrollStop</doc:ref> should now be called.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>enroll-failed</doc:term>
<doc:definition>
The enrollment failed, <doc:ref type="method" to="Device.EnrollStop">Device.EnrollStop</doc:ref> should now be called.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>enroll-stage-passed</doc:term>
<doc:definition>
One stage of the enrollment passed, the enrollment is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>enroll-retry-scan</doc:term>
<doc:definition>
The user should retry scanning their finger, the enrollment is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>enroll-swipe-too-short</doc:term>
<doc:definition>
The user's swipe was too short. The user should retry scanning their finger, the enrollment is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>enroll-finger-not-centered</doc:term>
<doc:definition>
The user's finger was not centered on the reader. The user should retry scanning their finger, the enrollment is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>enroll-remove-and-retry</doc:term>
<doc:definition>
The user should remove their finger from the reader and retry scanning their finger, the enrollment is still ongoing.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>enroll-disconnected</doc:term>
<doc:definition>
The device was disconnected during the enrollment, no other actions should be taken, and you shouldn't use the device any more.
</doc:definition>
</doc:item>
<doc:item>
<doc:term>enroll-unknown-error</doc:term>
<doc:definition>
An unknown error occurred (usually a driver problem), <doc:ref type="method" to="Device.EnrollStop">Device.EnrollStop</doc:ref> should now be called.
</doc:definition>
</doc:item>
</doc:list>
</doc:para>
</doc:doc>
<!-- ************************************************************ -->
<method name="ListEnrolledFingers">
<arg type="s" name="username" direction="in">
<doc:doc><doc:summary>The username for whom to list the enrolled fingerprints. See <doc:ref type="description" to="usernames">Usernames</doc:ref>.</doc:summary></doc:doc>
</arg>
<arg type="as" name="enrolled_fingers" direction="out">
<doc:doc><doc:summary>An array of strings representing the enrolled fingerprints. See <doc:ref type="description" to="fingerprint-names">Fingerprint names</doc:ref>.</doc:summary></doc:doc>
</arg>
<annotation name="org.freedesktop.DBus.GLib.Async" value="" />
<doc:doc>
<doc:description>
<doc:para>
List all the enrolled fingerprints for the chosen user.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
<doc:error name="&ERROR_NO_ENROLLED_PRINTS;">if the chosen user doesn't have any fingerprints enrolled</doc:error>
</doc:errors>
</doc:doc>
</method>
<!-- ************************************************************ -->
<method name="DeleteEnrolledFingers">
<arg type="s" name="username" direction="in">
<doc:doc><doc:summary>The username for whom to delete the enrolled fingerprints. See <doc:ref type="description" to="usernames">Usernames</doc:ref>.</doc:summary></doc:doc>
</arg>
<annotation name="org.freedesktop.DBus.GLib.Async" value="" />
<doc:doc>
<doc:description>
<doc:para>
Delete all the enrolled fingerprints for the chosen user.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
</doc:errors>
</doc:doc>
</method>
<!-- ************************************************************ -->
<method name="Claim">
<arg type="s" name="username" direction="in">
<doc:doc><doc:summary>The username for whom to claim the device. See <doc:ref type="description" to="usernames">Usernames</doc:ref>.</doc:summary></doc:doc>
</arg>
<annotation name="org.freedesktop.DBus.GLib.Async" value="" />
<doc:doc>
<doc:description>
<doc:para>
Claim the device for the chosen user.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
<doc:error name="&ERROR_ALREADY_IN_USE;">if the device is already claimed</doc:error>
<doc:error name="&ERROR_INTERNAL;">if the device couldn't be claimed</doc:error>
</doc:errors>
</doc:doc>
</method>
<!-- ************************************************************ -->
<method name="Release">
<annotation name="org.freedesktop.DBus.GLib.Async" value="" />
<doc:doc>
<doc:description>
<doc:para>
Release a device claimed with <doc:ref type="method" to="Device.Claim">Device.Claim</doc:ref>.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
<doc:error name="&ERROR_CLAIM_DEVICE;">if the device was not claimed</doc:error>
</doc:errors>
</doc:doc>
</method>
<!-- ************************************************************ -->
<method name="VerifyStart">
<arg type="s" name="finger_name" direction="in">
<doc:doc><doc:summary>A string representing the finger to verify. See <doc:ref type="description" to="fingerprint-names">Fingerprint names</doc:ref>.</doc:summary></doc:doc>
</arg>
<annotation name="org.freedesktop.DBus.GLib.Async" value="" />
<doc:doc>
<doc:description>
<doc:para>
Check the chosen finger against a saved fingerprint. You need to have claimed the device using
<doc:ref type="method" to="Device.Claim">Device.Claim</doc:ref>. The finger selected is sent to the front-end
using <doc:ref type="signal" to="Device::VerifyFingerSelected">Device::VerifyFingerSelected</doc:ref> and
verification status through <doc:ref type="signal" to="Device::VerifyStatus">Device::VerifyStatus</doc:ref>.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
<doc:error name="&ERROR_CLAIM_DEVICE;">if the device was not claimed</doc:error>
<doc:error name="&ERROR_ALREADY_IN_USE;">if the device was already being used</doc:error>
<doc:error name="&ERROR_NO_ENROLLED_PRINTS;">if there are no enrolled prints for the chosen user</doc:error>
<doc:error name="&ERROR_INTERNAL;">if there was an internal error</doc:error>
</doc:errors>
</doc:doc>
</method>
<!-- ************************************************************ -->
<method name="VerifyStop">
<annotation name="org.freedesktop.DBus.GLib.Async" value="" />
<doc:doc>
<doc:description>
<doc:para>
Stop an on-going fingerprint verification started with <doc:ref type="method" to="Device.VerifyStart">Device.VerifyStart</doc:ref>.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
<doc:error name="&ERROR_CLAIM_DEVICE;">if the device was not claimed</doc:error>
<doc:error name="&ERROR_NO_ACTION_IN_PROGRESS;">if there was no ongoing verification</doc:error>
<doc:error name="&ERROR_INTERNAL;">if there was an internal error</doc:error>
</doc:errors>
</doc:doc>
</method>
<!-- ************************************************************ -->
<signal name="VerifyFingerSelected">
<arg type="s" name="finger_name">
<doc:doc>
<doc:summary>
<doc:para>
A string representing the finger select to be verified.
</doc:para>
</doc:summary>
</doc:doc>
</arg>
<doc:doc>
<doc:seealso>
<doc:ref type="description" to="fingerprint-names">Fingerprint names</doc:ref>.
</doc:seealso>
</doc:doc>
</signal>
<!-- ************************************************************ -->
<signal name="VerifyStatus">
<arg type="s" name="result">
<doc:doc>
<doc:summary>
A string representing the status of the verification.
</doc:summary>
</doc:doc>
</arg>
<arg type="b" name="done">
<doc:doc>
<doc:summary>
Whether the verification finished and can be stopped.
</doc:summary>
</doc:doc>
</arg>
<doc:doc>
<doc:seealso>
<doc:ref type="description" to="verify-statuses">Verify Statuses</doc:ref> and <doc:ref type="method" to="Device.VerifyStop">Device.VerifyStop</doc:ref>.
</doc:seealso>
</doc:doc>
</signal>
<!-- ************************************************************ -->
<method name="EnrollStart">
<arg type="s" name="finger_name" direction="in">
<doc:doc><doc:summary>A string representing the finger to enroll. See
<doc:ref type="description" to="fingerprint-names">Fingerprint names</doc:ref>.
Note that "any" is not a valid finger name for this method.</doc:summary></doc:doc>
</arg>
<annotation name="org.freedesktop.DBus.GLib.Async" value="" />
<doc:doc>
<doc:description>
<doc:para>
Start enrollemnt for the selected finger. You need to have claimed the device using
<doc:ref type="method" to="Device.Claim">Device.Claim</doc:ref> before calling
this method. Enrollment status is sent through <doc:ref type="signal" to="Device::EnrollStatus">Device::EnrollStatus</doc:ref>.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
<doc:error name="&ERROR_CLAIM_DEVICE;">if the device was not claimed</doc:error>
<doc:error name="&ERROR_ALREADY_IN_USE;">if the device was already being used</doc:error>
<doc:error name="&ERROR_INVALID_FINGERNAME;">if there are no enrolled prints for the chosen user</doc:error>
<doc:error name="&ERROR_INTERNAL;">if there was an internal error</doc:error>
</doc:errors>
</doc:doc>
</method>
<!-- ************************************************************ -->
<method name="EnrollStop">
<annotation name="org.freedesktop.DBus.GLib.Async" value="" />
<doc:doc>
<doc:description>
<doc:para>
Stop an on-going fingerprint enrollment started with <doc:ref type="method" to="Device.EnrollStart">Device.EnrollStart</doc:ref>.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
<doc:error name="&ERROR_CLAIM_DEVICE;">if the device was not claimed</doc:error>
<doc:error name="&ERROR_NO_ACTION_IN_PROGRESS;">if there was no ongoing verification</doc:error>
<doc:error name="&ERROR_INTERNAL;">if there was an internal error</doc:error>
</doc:errors>
</doc:doc>
</method>
<!-- ************************************************************ -->
<signal name="EnrollStatus">
<arg type="s" name="result">
<doc:doc>
<doc:summary>
A string representing the status of the enrollment.
</doc:summary>
</doc:doc>
</arg>
<arg type="b" name="done">
<doc:doc>
<doc:summary>
Whether the enrollment finished and can be stopped.
</doc:summary>
</doc:doc>
</arg>
<doc:doc>
<doc:seealso>
<doc:ref type="description" to="enroll-statuses">Enrollment Statuses</doc:ref> and <doc:ref type="method" to="Device.EnrollStop">Device.EnrollStop</doc:ref>.
</doc:seealso>
</doc:doc>
</signal>
<!-- ************************************************************ -->
<property name="name" type="s" access="read">
<doc:doc>
<doc:description>
<doc:para>
The product name of the device.
</doc:para>
</doc:description>
</doc:doc>
</property>
<!-- ************************************************************ -->
<property name="num-enroll-stages" type="i" access="read">
<doc:doc>
<doc:description>
<doc:para>
The number of enrollment stages for the device. This is only available when the device has been claimed, otherwise it will be undefined (-1).
</doc:para>
<doc:seealso>
<doc:ref type="method" to="Device.Claim">Device.Claim</doc:ref> and <doc:ref type="method" to="Device.EnrollStart">Device.EnrollStart</doc:ref>.
</doc:seealso>
</doc:description>
</doc:doc>
</property>
<!-- ************************************************************ -->
<property name="scan-type" type="s" access="read">
<doc:doc>
<doc:description>
<doc:para>
The scan type of the device, either "press" if you place your finger on the device, or "swipe" if you have to swipe your finger.
</doc:para>
</doc:description>
</doc:doc>
</property>
</interface>
</node>

View File

@ -1,294 +0,0 @@
/*
* Simple file storage for fprintd
* Copyright (C) 2007 Daniel Drake <dsd@gentoo.org>
* Copyright (C) 2008 Vasily Khoruzhick <anarsoul@gmail.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.
*
*/
/* FIXME:
* This file almost duplicate data.c from libfprint
* Maybe someday data.c will be upgraded to this one ;)
*/
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <glib.h>
#include <glib/gstdio.h>
#include <libfprint/fprint.h>
#include "file_storage.h"
#define DIR_PERMS 0700
#ifndef FILE_STORAGE_PATH
#define FILE_STORAGE_PATH "/var/lib/fprint/"
#endif
#define FP_FINGER_IS_VALID(finger) \
((finger) >= LEFT_THUMB && (finger) <= RIGHT_LITTLE)
static char *get_path_to_storedir(uint16_t driver_id, uint32_t devtype, char *base_store)
{
char idstr[5];
char devtypestr[9];
g_snprintf(idstr, sizeof(idstr), "%04x", driver_id);
g_snprintf(devtypestr, sizeof(devtypestr), "%08x", devtype);
return g_build_filename(base_store, idstr, devtypestr, NULL);
}
static char *__get_path_to_print(uint16_t driver_id, uint32_t devtype,
enum fp_finger finger, char *base_store)
{
char *dirpath;
char *path;
char fingername[2];
g_snprintf(fingername, 2, "%x", finger);
dirpath = get_path_to_storedir(driver_id, devtype, base_store);
path = g_build_filename(dirpath, fingername, NULL);
g_free(dirpath);
return path;
}
static char *get_path_to_print(struct fp_dev *dev, enum fp_finger finger, char *base_store)
{
return __get_path_to_print(fp_driver_get_driver_id(fp_dev_get_driver(dev)),
fp_dev_get_devtype(dev), finger, base_store);
}
static char *get_path_to_print_dscv(struct fp_dscv_dev *dev, enum fp_finger finger, char *base_store)
{
return __get_path_to_print(fp_driver_get_driver_id(fp_dscv_dev_get_driver(dev)),
fp_dscv_dev_get_devtype(dev), finger, base_store);
}
static int file_storage_get_basestore_for_username(const char *username, char **base_store)
{
char *dirpath = FILE_STORAGE_PATH;
*base_store = g_build_filename(dirpath, username, NULL);
return 0;
}
/* if username == NULL function will use current username */
int file_storage_print_data_save(struct fp_print_data *data,
enum fp_finger finger, const char *username)
{
GError *err = NULL;
char *path, *dirpath, *buf;
size_t len;
int r;
char *base_store = NULL;
r = file_storage_get_basestore_for_username(username, &base_store);
if (r < 0) {
return r;
}
len = fp_print_data_get_data(data, (guchar **) &buf);
if (!len) {
g_free(base_store);
return -ENOMEM;
}
path = __get_path_to_print(fp_print_data_get_driver_id(data), fp_print_data_get_devtype(data), finger, base_store);
dirpath = g_path_get_dirname(path);
r = g_mkdir_with_parents(dirpath, DIR_PERMS);
if (r < 0) {
g_free(base_store);
g_free(path);
g_free(dirpath);
return r;
}
//fp_dbg("saving to %s", path);
g_file_set_contents(path, buf, len, &err);
free(buf);
g_free(dirpath);
g_free(path);
if (err) {
r = err->code;
//fp_err("save failed: %s", err->message);
g_error_free(err);
/* FIXME interpret error codes */
return r;
}
return 0;
}
static int load_from_file(char *path, struct fp_print_data **data)
{
gsize length;
char *contents;
GError *err = NULL;
struct fp_print_data *fdata;
//fp_dbg("from %s", path);
g_file_get_contents(path, &contents, &length, &err);
if (err) {
int r = err->code;
g_error_free(err);
/* FIXME interpret more error codes */
if (r == G_FILE_ERROR_NOENT)
return -ENOENT;
else
return r;
}
fdata = fp_print_data_from_data((guchar *) contents, length);
g_free(contents);
if (!fdata)
return -EIO;
*data = fdata;
return 0;
}
int file_storage_print_data_load(struct fp_dev *dev,
enum fp_finger finger, struct fp_print_data **data, const char *username)
{
gchar *path;
struct fp_print_data *fdata = NULL;
int r;
char *base_store = NULL;
r = file_storage_get_basestore_for_username(username, &base_store);
if (r < 0) {
return r;
}
path = get_path_to_print(dev, finger, base_store);
r = load_from_file(path, &fdata);
g_free(path);
g_free(base_store);
if (r)
return r;
if (!fp_dev_supports_print_data(dev, fdata)) {
fp_print_data_free(fdata);
return -EINVAL;
}
*data = fdata;
return 0;
}
int file_storage_print_data_delete(struct fp_dscv_dev *dev,
enum fp_finger finger, const char *username)
{
int r;
char *base_store;
r = file_storage_get_basestore_for_username(username, &base_store);
if (r < 0) {
return r;
}
gchar *path = get_path_to_print_dscv(dev, finger, base_store);
r = g_unlink(path);
g_free(path);
g_free(base_store);
/* FIXME: cleanup empty directory */
return r;
}
static GSList *scan_dev_storedir(char *devpath, uint16_t driver_id,
uint32_t devtype, GSList *list)
{
GError *err = NULL;
const gchar *ent;
GDir *dir = g_dir_open(devpath, 0, &err);
if (!dir) {
//fp_err("opendir %s failed: %s", devpath, err->message);
g_error_free(err);
return list;
}
while ((ent = g_dir_read_name(dir))) {
/* ent is an 1 hex character fp_finger code */
guint64 val;
gchar *endptr;
if (*ent == 0 || strlen(ent) != 1)
continue;
val = g_ascii_strtoull(ent, &endptr, 16);
if (endptr == ent || !FP_FINGER_IS_VALID(val)) {
//fp_dbg("skipping print file %s", ent);
continue;
}
list = g_slist_prepend(list, GINT_TO_POINTER(val));
}
g_dir_close(dir);
return list;
}
GSList *file_storage_discover_prints(struct fp_dscv_dev *dev, const char *username)
{
GSList *list = NULL;
char *base_store = NULL;
char *storedir = NULL;
int r;
r = file_storage_get_basestore_for_username(username, &base_store);
if (r < 0) {
return NULL;
}
storedir = get_path_to_storedir(fp_driver_get_driver_id(fp_dscv_dev_get_driver(dev)),
fp_dscv_dev_get_devtype(dev), base_store);
list = scan_dev_storedir(storedir, fp_driver_get_driver_id(fp_dscv_dev_get_driver(dev)),
fp_dscv_dev_get_devtype(dev), list);
g_free(base_store);
g_free(storedir);
return list;
}
int file_storage_init(void)
{
/* Nothing to do */
return 0;
}
int file_storage_deinit(void)
{
/* Nothing to do */
return 0;
}

View File

@ -1,41 +0,0 @@
/*
* Simple file storage for fprintd
* Copyright (C) 2008 Vasily Khoruzhick <anarsoul@gmail.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.
*
*/
#ifndef FILE_STORAGE_H
#define FILE_STORAGE_H
int file_storage_print_data_save(struct fp_print_data *data,
enum fp_finger finger, const char *username);
int file_storage_print_data_load(struct fp_dev *dev,
enum fp_finger finger, struct fp_print_data **data, const char *username);
int file_storage_print_data_delete(struct fp_dscv_dev *dev,
enum fp_finger finger, const char *username);
int file_storage_init(void);
int file_storage_deinit(void);
GSList *file_storage_discover_prints(struct fp_dscv_dev *dev, const char *username);
#endif

View File

@ -1 +0,0 @@
VOID:STRING,BOOLEAN

View File

@ -1,103 +0,0 @@
/*
* fprintd header file
* Copyright (C) 2008 Daniel Drake <dsd@gentoo.org>
*
* 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.
*/
#ifndef __FPRINTD_H__
#define __FPRINTD_H__
#include <glib.h>
#include <dbus/dbus-glib.h>
/* General */
#define TIMEOUT 30
#define FPRINT_SERVICE_NAME "net.reactivated.Fprint"
extern DBusGConnection *fprintd_dbus_conn;
/* Errors */
GQuark fprint_error_quark(void);
GType fprint_error_get_type(void);
#define FPRINT_ERROR fprint_error_quark()
#define FPRINT_TYPE_ERROR fprint_error_get_type()
#define FPRINT_ERROR_DBUS_INTERFACE "net.reactivated.Fprint.Error"
typedef enum {
FPRINT_ERROR_CLAIM_DEVICE, /* developer didn't claim the device */
FPRINT_ERROR_ALREADY_IN_USE, /* device is already claimed by somebody else */
FPRINT_ERROR_INTERNAL, /* internal error occured */
FPRINT_ERROR_PERMISSION_DENIED, /* PolicyKit refused the action */
FPRINT_ERROR_NO_ENROLLED_PRINTS, /* No prints are enrolled */
FPRINT_ERROR_NO_ACTION_IN_PROGRESS, /* No actions currently in progress */
FPRINT_ERROR_INVALID_FINGERNAME, /* the finger name passed was invalid */
FPRINT_ERROR_NO_SUCH_DEVICE, /* device does not exist */
} FprintError;
/* Manager */
#define FPRINT_TYPE_MANAGER (fprint_manager_get_type())
#define FPRINT_MANAGER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), FPRINT_TYPE_MANAGER, FprintManager))
#define FPRINT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), FPRINT_TYPE_MANAGER, FprintManagerClass))
#define FPRINT_IS_MANAGER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), FPRINT_TYPE_MANAGER))
#define FPRINT_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), FPRINT_TYPE_MANAGER))
#define FPRINT_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), FPRINT_TYPE_MANAGER, FprintManagerClass))
struct FprintManager {
GObject parent;
};
struct FprintManagerClass {
GObjectClass parent;
};
typedef struct FprintManager FprintManager;
typedef struct FprintManagerClass FprintManagerClass;
FprintManager *fprint_manager_new(gboolean no_timeout);
GType fprint_manager_get_type(void);
/* Device */
#define FPRINT_TYPE_DEVICE (fprint_device_get_type())
#define FPRINT_DEVICE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), FPRINT_DEVICE_TYPE, FprintDevice))
#define FPRINT_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), FPRINT_DEVICE_TYPE, FprintDeviceClass))
#define FPRINT_IS_DEVICE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), FPRINT_TYPE_DEVICE))
#define FPRINT_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), FPRINT_TYPE_DEVICE))
#define FPRINT_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), FPRINT_TYPE_DEVICE, FprintDeviceClass))
struct FprintDevice {
GObject parent;
};
struct FprintDeviceClass {
GObjectClass parent;
};
typedef struct FprintDevice FprintDevice;
typedef struct FprintDeviceClass FprintDeviceClass;
FprintDevice *fprint_device_new(struct fp_dscv_dev *ddev);
GType fprint_device_get_type(void);
guint32 _fprint_device_get_id(FprintDevice *rdev);
/* Print */
/* TODO */
/* Binding data included in main.c thorugh server-bindings.h which individual
* class implementations need to access.
*/
extern const DBusGObjectInfo dbus_glib_fprint_manager_object_info;
extern const DBusGObjectInfo dbus_glib_fprint_device_object_info;
#endif

View File

@ -1,378 +0,0 @@
/*
* fprint D-Bus daemon
* Copyright (C) 2008 Daniel Drake <dsd@gentoo.org>
*
* 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.
*/
#include "config.h"
#include <poll.h>
#include <stdlib.h>
#include <dbus/dbus-glib-bindings.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <libfprint/fprint.h>
#include <glib-object.h>
#include <gmodule.h>
#include "fprintd.h"
#include "storage.h"
#include "file_storage.h"
extern DBusGConnection *fprintd_dbus_conn;
static gboolean no_timeout = FALSE;
static gboolean g_fatal_warnings = FALSE;
struct fdsource {
GSource source;
GSList *pollfds;
};
static gboolean source_prepare(GSource *source, gint *timeout)
{
int r;
struct timeval tv;
r = fp_get_next_timeout(&tv);
if (r == 0) {
*timeout = -1;
return FALSE;
}
if (!timerisset(&tv))
return TRUE;
*timeout = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
return FALSE;
}
static gboolean source_check(GSource *source)
{
struct fdsource *_fdsource = (struct fdsource *) source;
GSList *elem = _fdsource->pollfds;
struct timeval tv;
int r;
if (!elem)
return FALSE;
do {
GPollFD *pollfd = elem->data;
if (pollfd->revents)
return TRUE;
} while ((elem = g_slist_next(elem)));
r = fp_get_next_timeout(&tv);
if (r == 1 && !timerisset(&tv))
return TRUE;
return FALSE;
}
static gboolean source_dispatch(GSource *source, GSourceFunc callback,
gpointer data)
{
struct timeval zerotimeout = {
.tv_sec = 0,
.tv_usec = 0,
};
/* FIXME error handling */
fp_handle_events_timeout(&zerotimeout);
/* FIXME whats the return value used for? */
return TRUE;
}
static void source_finalize(GSource *source)
{
struct fdsource *_fdsource = (struct fdsource *) source;
GSList *elem = _fdsource->pollfds;
if (elem)
do {
GPollFD *pollfd = elem->data;
g_source_remove_poll((GSource *) _fdsource, pollfd);
g_slice_free(GPollFD, pollfd);
_fdsource->pollfds = g_slist_delete_link(_fdsource->pollfds, elem);
} while ((elem = g_slist_next(elem)));
g_slist_free(_fdsource->pollfds);
}
static GSourceFuncs sourcefuncs = {
.prepare = source_prepare,
.check = source_check,
.dispatch = source_dispatch,
.finalize = source_finalize,
};
static struct fdsource *fdsource = NULL;
static void pollfd_add(int fd, short events)
{
GPollFD *pollfd = g_slice_new(GPollFD);
pollfd->fd = fd;
pollfd->events = 0;
pollfd->revents = 0;
if (events & POLLIN)
pollfd->events |= G_IO_IN;
if (events & POLLOUT)
pollfd->events |= G_IO_OUT;
fdsource->pollfds = g_slist_prepend(fdsource->pollfds, pollfd);
g_source_add_poll((GSource *) fdsource, pollfd);
}
static void pollfd_added_cb(int fd, short events)
{
g_message("now monitoring fd %d", fd);
pollfd_add(fd, events);
}
static void pollfd_removed_cb(int fd)
{
GSList *elem = fdsource->pollfds;
g_message("no longer monitoring fd %d", fd);
if (!elem) {
g_warning("cannot remove from list as list is empty?");
return;
}
do {
GPollFD *pollfd = elem->data;
if (pollfd->fd != fd)
continue;
g_source_remove_poll((GSource *) fdsource, pollfd);
g_slice_free(GPollFD, pollfd);
fdsource->pollfds = g_slist_delete_link(fdsource->pollfds, elem);
return;
} while ((elem = g_slist_next(elem)));
g_error("couldn't find fd %d in list\n", fd);
}
static int setup_pollfds(void)
{
size_t numfds;
size_t i;
struct fp_pollfd *fpfds;
GSource *gsource = g_source_new(&sourcefuncs, sizeof(struct fdsource));
fdsource = (struct fdsource *) gsource;
fdsource->pollfds = NULL;
numfds = fp_get_pollfds(&fpfds);
if (numfds < 0) {
if (fpfds)
free(fpfds);
return (int) numfds;
} else if (numfds > 0) {
for (i = 0; i < numfds; i++) {
struct fp_pollfd *fpfd = &fpfds[i];
pollfd_add(fpfd->fd, fpfd->events);
}
}
free(fpfds);
fp_set_pollfd_notifiers(pollfd_added_cb, pollfd_removed_cb);
g_source_attach(gsource, NULL);
return 0;
}
static void
set_storage_file (void)
{
store.init = &file_storage_init;
store.deinit = &file_storage_deinit;
store.print_data_save = &file_storage_print_data_save;
store.print_data_load = &file_storage_print_data_load;
store.print_data_delete = &file_storage_print_data_delete;
store.discover_prints = &file_storage_discover_prints;
}
static gboolean
load_storage_module (const char *module_name)
{
GModule *module;
char *filename;
filename = g_module_build_path (PLUGINDIR, module_name);
module = g_module_open (filename, 0);
g_free (filename);
if (module == NULL)
return FALSE;
if (!g_module_symbol (module, "init", (gpointer *) &store.init) ||
!g_module_symbol (module, "deinit", (gpointer *) &store.deinit) ||
!g_module_symbol (module, "print_data_save", (gpointer *) &store.print_data_save) ||
!g_module_symbol (module, "print_data_load", (gpointer *) &store.print_data_load) ||
!g_module_symbol (module, "print_data_delete", (gpointer *) &store.print_data_delete) ||
!g_module_symbol (module, "discover_prints", (gpointer *) &store.discover_prints)) {
g_module_close (module);
return FALSE;
}
g_module_make_resident (module);
return TRUE;
}
static gboolean
load_conf (void)
{
GKeyFile *file;
char *filename;
char *module_name;
GError *error = NULL;
gboolean ret;
filename = g_build_filename (SYSCONFDIR, "fprintd.conf", NULL);
file = g_key_file_new ();
if (!g_key_file_load_from_file (file, filename, G_KEY_FILE_NONE, &error)) {
g_print ("Could not open fprintd.conf: %s\n", error->message);
goto bail;
}
g_free (filename);
filename = NULL;
module_name = g_key_file_get_string (file, "storage", "type", &error);
if (module_name == NULL)
goto bail;
g_key_file_free (file);
if (g_str_equal (module_name, "file")) {
g_free (module_name);
set_storage_file ();
return TRUE;
}
ret = load_storage_module (module_name);
g_free (module_name);
return ret;
bail:
g_key_file_free (file);
g_free (filename);
g_error_free (error);
return FALSE;
}
static const GOptionEntry entries[] = {
{"g-fatal-warnings", 0, 0, G_OPTION_ARG_NONE, &g_fatal_warnings, "Make all warnings fatal", NULL},
{"no-timeout", 't', 0, G_OPTION_ARG_NONE, &no_timeout, "Do not exit after unused for a while", NULL},
{ NULL }
};
int main(int argc, char **argv)
{
GOptionContext *context;
GMainLoop *loop;
GError *error = NULL;
FprintManager *manager;
DBusGProxy *driver_proxy;
guint32 request_name_ret;
int r = 0;
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
context = g_option_context_new ("Fingerprint handler daemon");
g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
g_type_init();
if (g_option_context_parse (context, &argc, &argv, &error) == FALSE) {
g_print ("couldn't parse command-line options: %s\n", error->message);
g_error_free (error);
return 1;
}
if (g_fatal_warnings) {
GLogLevelFlags fatal_mask;
fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
g_log_set_always_fatal (fatal_mask);
}
/* Load the configuration file,
* and the default storage plugin */
if (!load_conf())
set_storage_file ();
store.init ();
r = fp_init();
if (r < 0) {
g_warning("fprint init failed with error %d\n", r);
return r;
}
loop = g_main_loop_new(NULL, FALSE);
r = setup_pollfds();
if (r < 0) {
g_print("pollfd setup failed\n");
goto err;
}
g_print("Launching FprintObject\n");
/* Obtain a connection to the session bus */
fprintd_dbus_conn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
if (fprintd_dbus_conn == NULL) {
g_warning("Failed to open connection to bus: %s", error->message);
return 1;
}
/* create the one instance of the Manager object to be shared between
* all fprintd users */
manager = fprint_manager_new(no_timeout);
driver_proxy = dbus_g_proxy_new_for_name(fprintd_dbus_conn,
DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS);
if (!org_freedesktop_DBus_request_name(driver_proxy, FPRINT_SERVICE_NAME,
0, &request_name_ret, &error)) {
g_warning("Failed to get name: %s", error->message);
return 1;
}
if (request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
g_warning ("Got result code %u from requesting name", request_name_ret);
return 1;
}
g_message("D-Bus service launched with name: %s", FPRINT_SERVICE_NAME);
g_message("entering main loop");
g_main_loop_run(loop);
g_message("main loop completed");
g_object_unref (manager);
err:
fp_exit();
return 0;
}

View File

@ -1,225 +0,0 @@
/*
* /net/reactivated/Fprint/Manager object implementation
* Copyright (C) 2008 Daniel Drake <dsd@gentoo.org>
*
* 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.
*/
#include <unistd.h>
#include <stdlib.h>
#include <dbus/dbus-glib-bindings.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <libfprint/fprint.h>
#include <glib-object.h>
#include "fprintd.h"
DBusGConnection *fprintd_dbus_conn;
static gboolean fprint_manager_get_devices(FprintManager *manager,
GPtrArray **devices, GError **error);
static gboolean fprint_manager_get_default_device(FprintManager *manager,
const char **device, GError **error);
#include "manager-dbus-glue.h"
static GObjectClass *parent_class = NULL;
G_DEFINE_TYPE(FprintManager, fprint_manager, G_TYPE_OBJECT);
typedef struct
{
GSList *dev_registry;
gboolean no_timeout;
guint timeout_id;
} FprintManagerPrivate;
#define FPRINT_MANAGER_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), FPRINT_TYPE_MANAGER, FprintManagerPrivate))
static void fprint_manager_finalize(GObject *object)
{
FprintManagerPrivate *priv = FPRINT_MANAGER_GET_PRIVATE (object);
g_slist_free(priv->dev_registry);
G_OBJECT_CLASS(parent_class)->finalize(object);
}
static void fprint_manager_class_init(FprintManagerClass *klass)
{
dbus_g_object_type_install_info(FPRINT_TYPE_MANAGER,
&dbus_glib_fprint_manager_object_info);
dbus_g_error_domain_register (FPRINT_ERROR, FPRINT_ERROR_DBUS_INTERFACE, FPRINT_TYPE_ERROR);
g_type_class_add_private ((GObjectClass *) klass, sizeof (FprintManagerPrivate));
G_OBJECT_CLASS(klass)->finalize = fprint_manager_finalize;
parent_class = g_type_class_peek_parent(klass);
}
static gchar *get_device_path(FprintDevice *rdev)
{
return g_strdup_printf("/net/reactivated/Fprint/Device/%d",
_fprint_device_get_id(rdev));
}
static gboolean
fprint_manager_timeout_cb (FprintManager *manager)
{
g_message ("No devices in use, exit");
//FIXME kill all the devices
exit(0);
return FALSE;
}
static void
fprint_manager_in_use_notified (FprintDevice *rdev, GParamSpec *spec, FprintManager *manager)
{
FprintManagerPrivate *priv = FPRINT_MANAGER_GET_PRIVATE (manager);
guint num_devices_used = 0;
GSList *l;
gboolean in_use;
if (priv->timeout_id > 0) {
g_source_remove (priv->timeout_id);
priv->timeout_id = 0;
}
if (priv->no_timeout)
return;
for (l = priv->dev_registry; l != NULL; l = l->next) {
FprintDevice *dev = l->data;
g_object_get (G_OBJECT(dev), "in-use", &in_use, NULL);
if (in_use != FALSE)
num_devices_used++;
}
if (num_devices_used == 0)
priv->timeout_id = g_timeout_add_seconds (TIMEOUT, (GSourceFunc) fprint_manager_timeout_cb, manager);
}
static void
fprint_manager_init (FprintManager *manager)
{
FprintManagerPrivate *priv = FPRINT_MANAGER_GET_PRIVATE (manager);
struct fp_dscv_dev **discovered_devs = fp_discover_devs();
struct fp_dscv_dev *ddev;
int i = 0;
dbus_g_connection_register_g_object(fprintd_dbus_conn,
"/net/reactivated/Fprint/Manager", G_OBJECT(manager));
if (discovered_devs == NULL)
return;
while ((ddev = discovered_devs[i++]) != NULL) {
FprintDevice *rdev = fprint_device_new(ddev);
gchar *path;
g_signal_connect (G_OBJECT(rdev), "notify::in-use",
G_CALLBACK (fprint_manager_in_use_notified), manager);
priv->dev_registry = g_slist_prepend(priv->dev_registry, rdev);
path = get_device_path(rdev);
dbus_g_connection_register_g_object(fprintd_dbus_conn, path,
G_OBJECT(rdev));
g_free(path);
}
}
FprintManager *fprint_manager_new(gboolean no_timeout)
{
FprintManagerPrivate *priv;
GObject *object;
object = g_object_new(FPRINT_TYPE_MANAGER, NULL);
priv = FPRINT_MANAGER_GET_PRIVATE (object);
priv->no_timeout = no_timeout;
if (!priv->no_timeout)
priv->timeout_id = g_timeout_add_seconds (TIMEOUT, (GSourceFunc) fprint_manager_timeout_cb, object);
return FPRINT_MANAGER (object);
}
static gboolean fprint_manager_get_devices(FprintManager *manager,
GPtrArray **devices, GError **error)
{
FprintManagerPrivate *priv = FPRINT_MANAGER_GET_PRIVATE (manager);
GSList *elem = priv->dev_registry;
int num_open = g_slist_length(elem);
GPtrArray *devs = g_ptr_array_sized_new(num_open);
if (num_open > 0)
do {
FprintDevice *rdev = elem->data;
g_ptr_array_add(devs, get_device_path(rdev));
} while ((elem = g_slist_next(elem)) != NULL);
*devices = devs;
return TRUE;
}
static gboolean fprint_manager_get_default_device(FprintManager *manager,
const char **device, GError **error)
{
FprintManagerPrivate *priv = FPRINT_MANAGER_GET_PRIVATE (manager);
GSList *elem = priv->dev_registry;
int num_open = g_slist_length(elem);
if (num_open > 0) {
*device = get_device_path (elem->data);
return TRUE;
} else {
g_set_error (error, FPRINT_ERROR, FPRINT_ERROR_NO_SUCH_DEVICE,
"No devices available");
*device = NULL;
return FALSE;
}
}
GQuark fprint_error_quark(void)
{
static GQuark quark = 0;
if (!quark)
quark = g_quark_from_static_string("fprintd-error-quark");
return quark;
}
#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
GType
fprint_error_get_type (void)
{
static GType etype = 0;
if (etype == 0) {
static const GEnumValue values[] =
{
ENUM_ENTRY (FPRINT_ERROR_CLAIM_DEVICE, "ClaimDevice"),
ENUM_ENTRY (FPRINT_ERROR_ALREADY_IN_USE, "AlreadyInUse"),
ENUM_ENTRY (FPRINT_ERROR_INTERNAL, "Internal"),
ENUM_ENTRY (FPRINT_ERROR_PERMISSION_DENIED, "PermissionDenied"),
ENUM_ENTRY (FPRINT_ERROR_NO_ENROLLED_PRINTS, "NoEnrolledPrints"),
ENUM_ENTRY (FPRINT_ERROR_NO_ACTION_IN_PROGRESS, "NoActionInProgress"),
ENUM_ENTRY (FPRINT_ERROR_INVALID_FINGERNAME, "InvalidFingername"),
ENUM_ENTRY (FPRINT_ERROR_NO_SUCH_DEVICE, "NoSuchDevice"),
{ 0, 0, 0 }
};
etype = g_enum_register_static ("FprintError", values);
}
return etype;
}

View File

@ -1,50 +0,0 @@
<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" [
<!ENTITY ERROR_NO_SUCH_DEVICE "net.reactivated.Fprint.Error.NoSuchDevice">
]>
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
<interface name="net.reactivated.Fprint.Manager">
<annotation name="org.freedesktop.DBus.GLib.CSymbol"
value="fprint_manager" />
<!-- ************************************************************ -->
<method name="GetDevices">
<arg type="ao" name="devices" direction="out">
<doc:doc><doc:summary>An array of object paths for devices.</doc:summary></doc:doc>
</arg>
<doc:doc>
<doc:description>
<doc:para>
Enumerate all the fingerprint readers attached to the system. If there are
no devices available, an empty array is returned.
</doc:para>
</doc:description>
</doc:doc>
</method>
<!-- ************************************************************ -->
<method name="GetDefaultDevice">
<arg type="o" name="device" direction="out">
<doc:doc><doc:summary>The object path for the default device.</doc:summary></doc:doc>
</arg>
<doc:doc>
<doc:description>
<doc:para>
Returns the default fingerprint reader device.
</doc:para>
</doc:description>
<doc:errors>
<doc:error name="&ERROR_NO_SUCH_DEVICE;">if the device does not exist</doc:error>
</doc:errors>
</doc:doc>
</method>
</interface>
</node>

View File

@ -1,50 +0,0 @@
/*
* Simple file storage for fprintd
* Copyright (C) 2008 Vasily Khoruzhick <anarsoul@gmail.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.
*
*/
#ifndef STORAGE_H
#define STORAGE_H
typedef int (*storage_print_data_save)(struct fp_print_data *data,
enum fp_finger finger, const char *username);
typedef int (*storage_print_data_load)(struct fp_dev *dev,
enum fp_finger finger, struct fp_print_data **data, const char *username);
typedef int (*storage_print_data_delete)(struct fp_dscv_dev *dev,
enum fp_finger finger, const char *username);
typedef GSList *(*storage_discover_prints)(struct fp_dscv_dev *dev, const char *username);
typedef int (*storage_init)(void);
typedef int (*storage_deinit)(void);
struct storage {
storage_init init;
storage_deinit deinit;
storage_print_data_save print_data_save;
storage_print_data_load print_data_load;
storage_print_data_delete print_data_delete;
storage_discover_prints discover_prints;
};
typedef struct storage fp_storage;
/* The currently setup store */
fp_storage store;
#endif

View File

@ -1,35 +0,0 @@
BUILT_SOURCES = manager-dbus-glue.h device-dbus-glue.h $(MARSHALFILES)
noinst_HEADERS = $(BUILT_SOURCES)
CLEANFILES = $(BUILT_SOURCES)
bin_PROGRAMS = fprintd-verify fprintd-enroll fprintd-list fprintd-delete
fprintd_verify_SOURCES = verify.c $(MARSHALFILES)
fprintd_verify_CFLAGS = $(WARN_CFLAGS) $(GLIB_CFLAGS)
fprintd_verify_LDADD = $(GLIB_LIBS)
fprintd_enroll_SOURCES = enroll.c $(MARSHALFILES)
fprintd_enroll_CFLAGS = $(WARN_CFLAGS) $(GLIB_CFLAGS)
fprintd_enroll_LDADD = $(GLIB_LIBS)
fprintd_list_SOURCES = list.c
fprintd_list_CFLAGS = $(WARN_CFLAGS) $(GLIB_CFLAGS)
fprintd_list_LDADD = $(GLIB_LIBS)
fprintd_delete_SOURCES = delete.c
fprintd_delete_CFLAGS = $(WARN_CFLAGS) $(GLIB_CFLAGS)
fprintd_delete_LDADD = $(GLIB_LIBS)
manager-dbus-glue.h: ../src/manager.xml
dbus-binding-tool --prefix=fprint_manager --mode=glib-client $< --output=$@
device-dbus-glue.h: ../src/device.xml
dbus-binding-tool --prefix=fprint_device --mode=glib-client $< --output=$@
MARSHALFILES = marshal.c marshal.h
GLIB_GENMARSHAL=`pkg-config --variable=glib_genmarshal glib-2.0`
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 )

View File

@ -1,129 +0,0 @@
/*
* fprintd example to delete fingerprints
* Copyright (C) 2008 Daniel Drake <dsd@gentoo.org>
*
* 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.
*/
#include <stdio.h>
#include <stdlib.h>
#include <dbus/dbus-glib-bindings.h>
#include "manager-dbus-glue.h"
#include "device-dbus-glue.h"
static DBusGProxy *manager = NULL;
static DBusGConnection *connection = NULL;
static void create_manager(void)
{
GError *error = NULL;
connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
if (connection == NULL) {
g_print("Failed to connect to session bus: %s\n", error->message);
exit (1);
}
manager = dbus_g_proxy_new_for_name(connection,
"net.reactivated.Fprint", "/net/reactivated/Fprint/Manager",
"net.reactivated.Fprint.Manager");
}
static void delete_fingerprints(DBusGProxy *dev, const char *username)
{
GError *error = NULL;
GHashTable *props;
DBusGProxy *p;
p = dbus_g_proxy_new_from_proxy(dev, "org.freedesktop.DBus.Properties", NULL);
if (!dbus_g_proxy_call (p, "GetAll", &error, G_TYPE_STRING, "net.reactivated.Fprint.Device", G_TYPE_INVALID,
dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &props, G_TYPE_INVALID)) {
g_print("GetAll on the Properties interface failed: %s\n", error->message);
exit (1);
}
if (!net_reactivated_Fprint_Device_delete_enrolled_fingers(dev, username, &error)) {
if (dbus_g_error_has_name (error, "net.reactivated.Fprint.Error.NoEnrolledPrints") == FALSE) {
g_print("ListEnrolledFingers failed: %s\n", error->message);
exit (1);
} else {
g_print ("No fingerprints to delete on %s\n", g_value_get_string (g_hash_table_lookup (props, "name")));
}
} else {
g_print ("Fingerprints deleted on %s\n", g_value_get_string (g_hash_table_lookup (props, "name")));
}
g_hash_table_destroy (props);
g_object_unref (p);
}
static void process_devices(char **argv)
{
GError *error = NULL;
GPtrArray *devices;
char *path;
guint i;
if (!net_reactivated_Fprint_Manager_get_devices(manager, &devices, &error)) {
g_print("list_devices failed: %s\n", error->message);
exit (1);
}
if (devices->len == 0) {
g_print("No devices found\n");
exit(1);
}
g_print("found %d devices\n", devices->len);
for (i = 0; i < devices->len; i++) {
path = g_ptr_array_index(devices, i);
g_print("Device at %s\n", path);
}
for (i = 0; i < devices->len; i++) {
guint j;
DBusGProxy *dev;
path = g_ptr_array_index(devices, 0);
g_print("Using device %s\n", path);
/* FIXME use for_name_owner?? */
dev = dbus_g_proxy_new_for_name(connection, "net.reactivated.Fprint",
path, "net.reactivated.Fprint.Device");
for (j = 1; argv[j] != NULL; j++)
delete_fingerprints (dev, argv[j]);
g_object_unref (dev);
}
g_ptr_array_foreach(devices, (GFunc) g_free, NULL);
g_ptr_array_free(devices, TRUE);
}
int main(int argc, char **argv)
{
g_type_init();
create_manager();
if (argc < 2) {
g_print ("Usage: %s <username> [usernames...]\n", argv[0]);
return 1;
}
process_devices (argv);
return 0;
}

View File

@ -1,139 +0,0 @@
/*
* fprintd example to enroll right index finger
* Copyright (C) 2008 Daniel Drake <dsd@gentoo.org>
*
* 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.
*/
#include <stdlib.h>
#include <dbus/dbus-glib-bindings.h>
#include "manager-dbus-glue.h"
#include "device-dbus-glue.h"
#include "marshal.h"
static DBusGProxy *manager = NULL;
static DBusGConnection *connection = NULL;
static void create_manager(void)
{
GError *error = NULL;
connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
if (connection == NULL) {
g_print("Failed to connect to session bus: %s\n", error->message);
exit (1);
}
manager = dbus_g_proxy_new_for_name(connection,
"net.reactivated.Fprint", "/net/reactivated/Fprint/Manager",
"net.reactivated.Fprint.Manager");
}
static DBusGProxy *open_device(const char *username)
{
GError *error = NULL;
gchar *path;
DBusGProxy *dev;
if (!net_reactivated_Fprint_Manager_get_default_device(manager, &path, &error)) {
g_print("list_devices failed: %s\n", error->message);
exit (1);
}
if (path == NULL) {
g_print("No devices found\n");
exit(1);
}
g_print("Using device %s\n", path);
/* FIXME use for_name_owner?? */
dev = dbus_g_proxy_new_for_name(connection, "net.reactivated.Fprint",
path, "net.reactivated.Fprint.Device");
g_free (path);
if (!net_reactivated_Fprint_Device_claim(dev, username, &error)) {
g_print("failed to claim device: %s\n", error->message);
exit (1);
}
return dev;
}
static void enroll_result(GObject *object, const char *result, gboolean done, void *user_data)
{
gboolean *enroll_completed = user_data;
g_print("Enroll result: %s\n", result);
if (done != FALSE)
*enroll_completed = TRUE;
}
static void do_enroll(DBusGProxy *dev)
{
GError *error;
gboolean enroll_completed = FALSE;
dbus_g_proxy_add_signal(dev, "EnrollStatus", G_TYPE_STRING, G_TYPE_BOOLEAN, NULL);
dbus_g_proxy_connect_signal(dev, "EnrollStatus", G_CALLBACK(enroll_result),
&enroll_completed, NULL);
g_print("Enrolling right index finger.\n");
if (!net_reactivated_Fprint_Device_enroll_start(dev, "right-index-finger", &error)) {
g_print("EnrollStart failed: %s\n", error->message);
exit (1);
}
while (!enroll_completed)
g_main_context_iteration(NULL, TRUE);
dbus_g_proxy_disconnect_signal(dev, "EnrollStatus",
G_CALLBACK(enroll_result), &enroll_completed);
if (!net_reactivated_Fprint_Device_enroll_stop(dev, &error)) {
g_print("VerifyStop failed: %s\n", error->message);
exit(1);
}
}
static void release_device(DBusGProxy *dev)
{
GError *error = NULL;
if (!net_reactivated_Fprint_Device_release(dev, &error)) {
g_print("ReleaseDevice failed: %s\n", error->message);
exit (1);
}
}
int main(int argc, char **argv)
{
DBusGProxy *dev;
char *username;
g_type_init();
dbus_g_object_register_marshaller (fprintd_marshal_VOID__STRING_BOOLEAN,
G_TYPE_NONE, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
create_manager();
username = NULL;
if (argc == 2)
username = argv[1];
dev = open_device(username);
do_enroll(dev);
release_device(dev);
return 0;
}

View File

@ -1,145 +0,0 @@
/*
* fprintd example to list enrolled fingerprints
* Copyright (C) 2008 Daniel Drake <dsd@gentoo.org>
*
* 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.
*/
#include <stdio.h>
#include <stdlib.h>
#include <dbus/dbus-glib-bindings.h>
#include "manager-dbus-glue.h"
#include "device-dbus-glue.h"
static DBusGProxy *manager = NULL;
static DBusGConnection *connection = NULL;
static void create_manager(void)
{
GError *error = NULL;
connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
if (connection == NULL) {
g_print("Failed to connect to session bus: %s\n", error->message);
exit (1);
}
manager = dbus_g_proxy_new_for_name(connection,
"net.reactivated.Fprint", "/net/reactivated/Fprint/Manager",
"net.reactivated.Fprint.Manager");
}
static void list_fingerprints(DBusGProxy *dev, const char *username)
{
GError *error = NULL;
char **fingers;
GHashTable *props;
DBusGProxy *p;
guint i;
if (!net_reactivated_Fprint_Device_list_enrolled_fingers(dev, username, &fingers, &error)) {
if (dbus_g_error_has_name (error, "net.reactivated.Fprint.Error.NoEnrolledPrints") == FALSE) {
g_print("ListEnrolledFingers failed: %s\n", error->message);
exit (1);
} else {
fingers = NULL;
}
}
p = dbus_g_proxy_new_from_proxy(dev, "org.freedesktop.DBus.Properties", NULL);
if (!dbus_g_proxy_call (p, "GetAll", &error, G_TYPE_STRING, "net.reactivated.Fprint.Device", G_TYPE_INVALID,
dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &props, G_TYPE_INVALID)) {
g_print("GetAll on the Properties interface failed: %s\n", error->message);
exit (1);
}
if (fingers == NULL || g_strv_length (fingers) == 0) {
g_print("User %s has no fingers enrolled for %s.\n", username, g_value_get_string (g_hash_table_lookup (props, "name")));
return;
}
g_print("Fingerprints for user %s on %s (%s):\n",
username,
g_value_get_string (g_hash_table_lookup (props, "name")),
g_value_get_string (g_hash_table_lookup (props, "scan-type")));
g_hash_table_destroy (props);
g_object_unref (p);
for (i = 0; fingers[i] != NULL; i++) {
g_print(" - #%d: %s\n", i, fingers[i]);
}
g_strfreev (fingers);
}
static void process_devices(char **argv)
{
GError *error = NULL;
GPtrArray *devices;
char *path;
guint i;
if (!net_reactivated_Fprint_Manager_get_devices(manager, &devices, &error)) {
g_print("list_devices failed: %s\n", error->message);
exit (1);
}
if (devices->len == 0) {
g_print("No devices found\n");
exit(1);
}
g_print("found %d devices\n", devices->len);
for (i = 0; i < devices->len; i++) {
path = g_ptr_array_index(devices, i);
g_print("Device at %s\n", path);
}
for (i = 0; i < devices->len; i++) {
guint j;
DBusGProxy *dev;
path = g_ptr_array_index(devices, 0);
g_print("Using device %s\n", path);
/* FIXME use for_name_owner?? */
dev = dbus_g_proxy_new_for_name(connection, "net.reactivated.Fprint",
path, "net.reactivated.Fprint.Device");
for (j = 1; argv[j] != NULL; j++)
list_fingerprints (dev, argv[j]);
g_object_unref (dev);
}
g_ptr_array_foreach(devices, (GFunc) g_free, NULL);
g_ptr_array_free(devices, TRUE);
}
int main(int argc, char **argv)
{
g_type_init();
create_manager();
if (argc < 2) {
g_print ("Usage: %s <username> [usernames...]\n", argv[0]);
return 1;
}
process_devices (argv);
return 0;
}

View File

@ -1,209 +0,0 @@
/*
* fprintd example to verify a fingerprint
* Copyright (C) 2008 Daniel Drake <dsd@gentoo.org>
*
* 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.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dbus/dbus-glib-bindings.h>
#include "manager-dbus-glue.h"
#include "device-dbus-glue.h"
#include "marshal.h"
static DBusGProxy *manager = NULL;
static DBusGConnection *connection = NULL;
static char *finger_name = "any";
static gboolean g_fatal_warnings = FALSE;
static char **usernames = NULL;
static void create_manager(void)
{
GError *error = NULL;
connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
if (connection == NULL) {
g_print("Failed to connect to session bus: %s\n", error->message);
exit (1);
}
manager = dbus_g_proxy_new_for_name(connection,
"net.reactivated.Fprint", "/net/reactivated/Fprint/Manager",
"net.reactivated.Fprint.Manager");
}
static DBusGProxy *open_device(const char *username)
{
GError *error = NULL;
gchar *path;
DBusGProxy *dev;
if (!net_reactivated_Fprint_Manager_get_default_device(manager, &path, &error)) {
g_print("list_devices failed: %s\n", error->message);
exit (1);
}
if (path == NULL) {
g_print("No devices found\n");
exit(1);
}
g_print("Using device %s\n", path);
/* FIXME use for_name_owner?? */
dev = dbus_g_proxy_new_for_name(connection, "net.reactivated.Fprint",
path, "net.reactivated.Fprint.Device");
g_free (path);
if (!net_reactivated_Fprint_Device_claim(dev, username, &error)) {
g_print("failed to claim device: %s\n", error->message);
exit (1);
}
return dev;
}
static void find_finger(DBusGProxy *dev, const char *username)
{
GError *error = NULL;
char **fingers;
guint i;
if (!net_reactivated_Fprint_Device_list_enrolled_fingers(dev, username, &fingers, &error)) {
g_print("ListEnrolledFingers failed: %s\n", error->message);
exit (1);
}
if (fingers == NULL || g_strv_length (fingers) == 0) {
g_print("No fingers enrolled for this device.\n");
exit(1);
}
g_print("Listing enrolled fingers:\n");
for (i = 0; fingers[i] != NULL; i++) {
g_print(" - #%d: %s\n", i, fingers[i]);
}
if (strcmp (finger_name, "any") == 0)
finger_name = fingers[0];
g_strfreev (fingers);
}
static void verify_result(GObject *object, const char *result, gboolean done, void *user_data)
{
gboolean *verify_completed = user_data;
g_print("Verify result: %s (%s)\n", result, done ? "done" : "not done");
if (done != FALSE)
*verify_completed = TRUE;
}
static void verify_finger_selected(GObject *object, const char *name, void *user_data)
{
g_print("Verifying: %s\n", name);
}
static void do_verify(DBusGProxy *dev)
{
GError *error;
gboolean verify_completed = FALSE;
dbus_g_proxy_add_signal(dev, "VerifyStatus", G_TYPE_STRING, G_TYPE_BOOLEAN, NULL);
dbus_g_proxy_add_signal(dev, "VerifyFingerSelected", G_TYPE_INT, NULL);
dbus_g_proxy_connect_signal(dev, "VerifyStatus", G_CALLBACK(verify_result),
&verify_completed, NULL);
dbus_g_proxy_connect_signal(dev, "VerifyFingerSelected", G_CALLBACK(verify_finger_selected),
NULL, NULL);
if (!net_reactivated_Fprint_Device_verify_start(dev, finger_name, &error)) {
g_print("VerifyStart failed: %s\n", error->message);
exit (1);
}
while (!verify_completed)
g_main_context_iteration(NULL, TRUE);
dbus_g_proxy_disconnect_signal(dev, "VerifyStatus", G_CALLBACK(verify_result), &verify_completed);
dbus_g_proxy_disconnect_signal(dev, "VerifyFingerSelected", G_CALLBACK(verify_finger_selected), NULL);
if (!net_reactivated_Fprint_Device_verify_stop(dev, &error)) {
g_print("VerifyStop failed: %s\n", error->message);
exit (1);
}
}
static void release_device(DBusGProxy *dev)
{
GError *error = NULL;
if (!net_reactivated_Fprint_Device_release(dev, &error)) {
g_print("ReleaseDevice failed: %s\n", error->message);
exit (1);
}
}
static const GOptionEntry entries[] = {
{ "finger", 'f', 0, G_OPTION_ARG_STRING, &finger_name, "Finger selected to verify (default is automatic)", NULL },
{"g-fatal-warnings", 0, 0, G_OPTION_ARG_NONE, &g_fatal_warnings, "Make all warnings fatal", NULL},
{ G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &usernames, NULL, "[username]" },
{ NULL }
};
int main(int argc, char **argv)
{
GOptionContext *context;
GError *err = NULL;
DBusGProxy *dev;
char *username;
g_type_init();
dbus_g_object_register_marshaller (fprintd_marshal_VOID__STRING_BOOLEAN,
G_TYPE_NONE, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
context = g_option_context_new ("Verify a fingerprint");
g_option_context_add_main_entries (context, entries, NULL);
if (g_option_context_parse (context, &argc, &argv, &err) == FALSE) {
g_print ("couldn't parse command-line options: %s\n", err->message);
g_error_free (err);
return 1;
}
if (usernames == NULL) {
username = "";
} else {
username = usernames[0];
}
if (g_fatal_warnings) {
GLogLevelFlags fatal_mask;
fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
g_log_set_always_fatal (fatal_mask);
}
create_manager();
dev = open_device(username);
find_finger(dev, username);
do_verify(dev);
release_device(dev);
return 0;
}