57 Commits

Author SHA1 Message Date
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
97 changed files with 1540 additions and 765 deletions

36
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,36 @@
image: fedora:rawhide
variables:
DEPENDENCIES: dbus-glib-devel pam-devel polkit-devel
gtk-doc meson intltool autoconf automake libtool
gcc gcc-c++ glibc-devel make
DEPENDENCIES_STABLE: $DEPENDENCIES libfprint-devel
DEPENDENCIES_DEV: $DEPENDENCIES git
# Sync'ed up with https://gitlab.freedesktop.org/libfprint/libfprint/blob/master/.gitlab-ci.yml
DEPENDENCIES_LIBFPRINT: libusb1-devel glib2-devel nss-devel pixman-devel systemd
meson gtk-doc gcc gcc-c++ glibc-devel libX11-devel
libXv-devel
build_stable:
before_script:
- dnf update -y --nogpgcheck && dnf install -y --nogpgcheck $DEPENDENCIES_STABLE
script:
- ./autogen.sh --disable-dependency-tracking
- make
- make install
build_dev:
before_script:
- dnf update -y --nogpgcheck && dnf install -y --nogpgcheck $DEPENDENCIES_LIBFPRINT $DEPENDENCIES_DEV
- git clone https://gitlab.freedesktop.org/libfprint/libfprint.git
- cd libfprint
- meson . _build --prefix=/usr
- ninja -C _build
- ninja -C _build install
- cd ..
# So we don't get error about this libfprint file
- echo "libfprint/demo/gtk-libfprint-test.ui" >> po/POTFILES.skip
script:
- ./autogen.sh --disable-dependency-tracking
- make
- make install

View File

@ -23,7 +23,7 @@ check-translations:
update-translations: create-pot check-translations
@tx -r $(srcdir) pull --all --force --skip
@if [ ! -d .tx ] ; then mkdir .tx ; fi ; cp -f $(srcdir)/.tx/config .tx/
@if [ ! -d .tx ] ; then mkdir .tx ; fi ; if [ x$(srcdir) != x$(builddir) ] ; then cp -f $(srcdir)/.tx/config .tx/ ; fi
@tx push --source
-include $(top_srcdir)/git.mk

21
NEWS
View File

@ -1,6 +1,27 @@
This file lists notable changes in each release. For the full history of all
changes, see ChangeLog.
version 0.9.0:
- Fix hangs when there the verification error was "retry"
- Update for fp_get_pollfds() changes
- Fix "client_username" memory leak, fix memory leak when saving a file
- Create the fingerprint storage directory at install time,
the storage path is now hard-coded as /var/lib/fprint and created by
systemd when the service is started
version 0.8.1:
- Fix build when builddir != srcdir
- Fix possible crash on exit
- Avoid warnings in copy/paste header
- Sandbox fprintd daemon more
- Update website address
- Minimise debug output
- Updated translations
version 0.8.0:
- Lockdown the daemon to minimise potential security issues
- Don't wake up readers when there's no enrolled fingerprints
version 0.7.0:
- Fix crash in the daemon when cancelling PAM conversation
- Fix build warnings and update translations

2
README
View File

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

View File

@ -4,7 +4,7 @@ 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
https://gitlab.freedesktop.org/libfprint/fprintd/
Tokens:

12
TODO
View File

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

View File

@ -3,7 +3,8 @@
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
pushd $srcdir
olddir=`pwd`
cd "$srcdir"
aclocal || exit 1
autoheader || exit 1
@ -13,7 +14,8 @@ intltoolize -c -f || exit 1
libtoolize -c || exit 1
autoconf || exit 1
automake -a -c || exit 1
popd
cd "$olddir"
if test -z "$NOCONFIGURE"; then
$srcdir/configure --enable-maintainer-mode $*

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

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

View File

@ -1,4 +1,4 @@
AC_INIT([fprintd], [0.7.0])
AC_INIT([fprintd], [0.9.0])
AM_INIT_AUTOMAKE([1.11 dist-xz no-dist-gzip check-news])
AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADERS([config.h])
@ -60,6 +60,8 @@ AC_ARG_WITH([systemdsystemunitdir],
[],
[with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [
# StateDirectory was introduced in systemd 235
PKG_CHECK_MODULES(SYSTEMD, systemd >= 235)
AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
])
AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$systemdsystemunitdir"])
@ -70,7 +72,8 @@ 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])
AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
AC_DEFINE_UNQUOTED(SYSCONFDIR, "$SYSCONFDIR", [Where the configuration file will be located])
GNOME_COMPILE_WARNINGS

View File

@ -6,3 +6,28 @@ Documentation=man:fprintd(1)
Type=dbus
BusName=net.reactivated.Fprint
ExecStart=@libexecdir@/fprintd
# Filesystem lockdown
ProtectSystem=strict
ProtectKernelTunables=true
ProtectControlGroups=true
# This always corresponds to /var/lib/fprint
StateDirectory=fprint
ProtectHome=true
PrivateTmp=true
# Network
PrivateNetwork=true
RestrictAddressFamilies=AF_UNIX AF_LOCAL AF_NETLINK
# Execute Mappings
MemoryDenyWriteExecute=true
# Modules
ProtectKernelModules=true
# Real-time
RestrictRealtime=true
# Privilege escalation
NoNewPrivileges=true

View File

@ -6,7 +6,7 @@
<policyconfig>
<vendor>The FPrint Project</vendor>
<vendor_url>http://reactivated.net/fprint/</vendor_url>
<vendor_url>https://fprint.freedesktop.org/</vendor_url>
<icon_name>fprint</icon_name>
<action id="net.reactivated.fprint.device.verify">

View File

@ -88,7 +88,7 @@ struct {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
static char *finger_str_to_msg(const char *finger_name, const char *driver_name, gboolean is_swipe)
G_GNUC_UNUSED static char *finger_str_to_msg(const char *finger_name, const char *driver_name, gboolean is_swipe)
{
int i;
@ -121,7 +121,7 @@ static char *finger_str_to_msg(const char *finger_name, const char *driver_name,
* verify-match
* verify-unknown-error
*/
static const char *verify_result_str_to_msg(const char *result, gboolean is_swipe)
G_GNUC_UNUSED static const char *verify_result_str_to_msg(const char *result, gboolean is_swipe)
{
if (result == NULL)
return NULL;
@ -147,7 +147,7 @@ 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)
G_GNUC_UNUSED static const char *enroll_result_str_to_msg(const char *result, gboolean is_swipe)
{
if (result == NULL)
return NULL;

View File

@ -183,7 +183,7 @@ static void unref_loop (GMainLoop *loop)
#define DBUS_TYPE_G_OBJECT_PATH_ARRAY (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH))
static DBusGProxy *open_device(pam_handle_t *pamh, DBusGConnection *connection, DBusGProxy *manager, const char *username, gboolean *has_multiple_devices)
static DBusGProxy *open_device(pam_handle_t *pamh, DBusGConnection *connection, DBusGProxy *manager, gboolean *has_multiple_devices)
{
GError *error = NULL;
const char *path;
@ -217,13 +217,6 @@ static DBusGProxy *open_device(pam_handle_t *pamh, DBusGConnection *connection,
path,
"net.reactivated.Fprint.Device");
if (!dbus_g_proxy_call (dev, "Claim", &error, G_TYPE_STRING, username, G_TYPE_INVALID, G_TYPE_INVALID)) {
D(pamh, "failed to claim device '%s': %s\n", path, error->message);
g_error_free (error);
g_object_unref (dev);
dev = NULL;
}
g_ptr_array_free (paths_array, TRUE);
return dev;
@ -363,7 +356,7 @@ static int do_verify(GMainLoop *loop, pam_handle_t *pamh, DBusGProxy *dev, gbool
g_free (data->result);
break;
} else {
send_info_msg (data->pamh, "An unknown error occured");
send_info_msg (data->pamh, "An unknown error occurred");
ret = PAM_AUTH_ERR;
g_free (data->result);
break;
@ -383,6 +376,26 @@ static int do_verify(GMainLoop *loop, pam_handle_t *pamh, DBusGProxy *dev, gbool
return ret;
}
static gboolean user_has_prints(DBusGProxy *dev, const char *username)
{
char **fingers;
gboolean have_prints;
if (!dbus_g_proxy_call (dev, "ListEnrolledFingers", NULL,
G_TYPE_STRING, username, G_TYPE_INVALID,
G_TYPE_STRV, &fingers, G_TYPE_INVALID)) {
/* If ListEnrolledFingers fails then verification should
* also fail (both use the same underlying call), so we
* report FALSE here and bail out early. */
return FALSE;
}
have_prints = fingers != NULL && g_strv_length (fingers) > 0;
g_strfreev (fingers);
return have_prints;
}
static void release_device(pam_handle_t *pamh, DBusGProxy *dev)
{
GError *error = NULL;
@ -392,30 +405,52 @@ static void release_device(pam_handle_t *pamh, DBusGProxy *dev)
}
}
static gboolean claim_device(pam_handle_t *pamh, DBusGProxy *dev, const char *username)
{
GError *error = NULL;
if (!dbus_g_proxy_call (dev, "Claim", &error, G_TYPE_STRING, username, G_TYPE_INVALID, G_TYPE_INVALID)) {
D(pamh, "failed to claim device %s\n", error->message);
g_error_free (error);
return FALSE;
}
return TRUE;
}
static int do_auth(pam_handle_t *pamh, const char *username)
{
DBusGProxy *manager;
DBusGConnection *connection;
DBusGProxy *dev;
GMainLoop *loop;
gboolean have_prints;
gboolean has_multiple_devices;
int ret;
int ret = PAM_AUTHINFO_UNAVAIL;
manager = create_manager (pamh, &connection, &loop);
if (manager == NULL)
return PAM_AUTHINFO_UNAVAIL;
dev = open_device(pamh, connection, manager, username, &has_multiple_devices);
dev = open_device(pamh, connection, manager, &has_multiple_devices);
g_object_unref (manager);
if (!dev) {
unref_loop (loop);
close_and_unref (connection);
return PAM_AUTHINFO_UNAVAIL;
}
ret = do_verify(loop, pamh, dev, has_multiple_devices);
have_prints = user_has_prints(dev, username);
D(pamh, "prints registered: %s\n", have_prints ? "yes" : "no");
if (have_prints) {
if (claim_device (pamh, dev, username)) {
ret = do_verify (loop, pamh, dev, has_multiple_devices);
release_device (pamh, dev);
}
}
unref_loop (loop);
release_device(pamh, dev);
g_object_unref (dev);
close_and_unref (connection);
@ -433,14 +468,21 @@ PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc,
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
g_type_init ();
#if !GLIB_CHECK_VERSION (2, 36, 0)
g_type_init();
#endif
dbus_g_object_register_marshaller (fprintd_marshal_VOID__STRING_BOOLEAN,
G_TYPE_NONE, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
pam_get_item(pamh, PAM_RHOST, (const void **)(const void*) &rhost);
if (rhost != NULL && strlen(rhost) > 0) {
/* remote login (e.g. over SSH) */
/* NULL or empty rhost if the host information is not available or set.
* "localhost" if the host is local.
* We want to not run for known remote hosts */
if (rhost != NULL &&
rhost != '\0' &&
strcmp (rhost, "localhost") != 0) {
return PAM_AUTHINFO_UNAVAIL;
}

View File

@ -1,7 +1,9 @@
ar
as
ast
az
bg_BG
be
bg
bn_IN
ca
ca@valencia
@ -15,10 +17,11 @@ eo
es
et
eu
fa_IR
fa
fi
fr
fo
fr
fur
ga
gl
gu
@ -26,6 +29,7 @@ he
hi
hr
hu
ia
id
it
ja
@ -45,6 +49,7 @@ oc
or
pa
pl
pt
pt_BR
ro
ru

View File

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

View File

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

270
po/ast.po Normal file
View File

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

View File

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

270
po/be.po Normal file
View File

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

View File

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

View File

@ -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.
#
# Translators:
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-04-18 17:52+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/freedesktop/language/bg_BG/)\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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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.
#
# Translators:
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-04-18 17:52+0100\n"
"PO-Revision-Date: 2010-11-30 07:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Persian (Iran) (http://www.transifex.net/projects/p/freedesktop/language/fa_IR/)\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 ""

View File

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

View File

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

View File

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

271
po/fur.po Normal file
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Tomoyuki KATO <tomo@dream.daynight.jp>, 2011, 2012
# Tomoyuki KATO <inactive+katomo@transifex.com>, 2011, 2012
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"Last-Translator: Tomoyuki KATO <tomo@dream.daynight.jp>\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 10:41+0000\n"
"Last-Translator: Tomoyuki KATO <inactive+katomo@transifex.com>\n"
"Language-Team: Japanese (http://www.transifex.com/freedesktop/fprintd/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Caner Başaran <basaran.caner@gmail.com>, 2014
# Caner Başaran <basaran.caner@protonmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2014-11-11 23:12+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:46+0000\n"
"Last-Translator: Necdet Yücel <necdetyucel@gmail.com>\n"
"Language-Team: Turkish (http://www.transifex.com/freedesktop/fprintd/language/tr/)\n"
"MIME-Version: 1.0\n"

View File

@ -9,15 +9,15 @@ msgid ""
msgstr ""
"Project-Id-Version: fprintd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-13 17:12+0200\n"
"PO-Revision-Date: 2013-11-20 10:37+0000\n"
"POT-Creation-Date: 2018-02-06 14:07+0100\n"
"PO-Revision-Date: 2017-09-19 09:08+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian (http://www.transifex.com/freedesktop/fprintd/language/uk/)\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"
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
#: ../data/net.reactivated.fprint.device.policy.in.h:1
msgid "Verify a fingerprint"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -7,7 +7,13 @@ 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"\"
AM_CFLAGS = \
$(WARN_CFLAGS) \
$(FPRINT_CFLAGS) \
$(DAEMON_CFLAGS) \
-DG_LOG_DOMAIN=\""fprintd"\" \
-DLOCALEDIR=\""$(datadir)/locale"\" \
-DPLUGINDIR=\""$(libdir)/fprintd/modules"\"
libfprintd_la_SOURCES = \
manager.c device.c \
@ -18,6 +24,7 @@ libfprintd_la_LDFLAGS = -no-undefined
fprintd_SOURCES = \
main.c \
loop.c loop.h \
file_storage.c file_storage.h storage.h
fprintd_LDADD = libfprintd.la
@ -42,3 +49,7 @@ fprintd-marshal.h: fprintd-marshal.list
fprintd-marshal.c: fprintd-marshal.h
( $(GLIB_GENMARSHAL) --prefix=fprintd_marshal $(srcdir)/fprintd-marshal.list --body --header > fprintd-marshal.c )
install-data-hook:
if test -w $(DESTDIR)$(prefix)/; then \
mkdir -p $(DESTDIR)$(localstatedir)/lib/fprint; \
fi

View File

@ -402,7 +402,7 @@ static gboolean
_fprint_device_check_polkit_for_action (FprintDevice *rdev, DBusGMethodInvocation *context, const char *action, GError **error)
{
FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev);
const char *sender;
char *sender;
PolkitSubject *subject;
PolkitAuthorizationResult *result;
GError *_error = NULL;
@ -410,6 +410,7 @@ _fprint_device_check_polkit_for_action (FprintDevice *rdev, DBusGMethodInvocatio
/* Check that caller is privileged */
sender = dbus_g_method_get_sender (context);
subject = polkit_system_bus_name_new (sender);
g_free (sender);
result = polkit_authority_check_authorization_sync (priv->auth,
subject,
@ -468,7 +469,6 @@ _fprint_device_check_for_username (FprintDevice *rdev,
char *sender;
unsigned long uid;
struct passwd *user;
char *client_username;
/* Get details about the current sender, and username/uid */
conn = dbus_g_connection_get_connection (fprintd_dbus_conn);
@ -489,17 +489,16 @@ _fprint_device_check_for_username (FprintDevice *rdev,
"Failed to get information about user UID %lu", uid);
return NULL;
}
client_username = g_strdup (user->pw_name);
/* The current user is usually allowed to access their
* own data, this should be followed by PolicyKit checks
* anyway */
if (username == NULL || *username == '\0' || g_str_equal (username, client_username)) {
if (username == NULL || *username == '\0' || g_str_equal (username, user->pw_name)) {
if (ret_sender != NULL)
*ret_sender = sender;
else
g_free (sender);
return client_username;
return g_strdup (user->pw_name);
}
/* If we're not allowed to set a different username,
@ -557,7 +556,12 @@ _fprint_device_client_vanished (GDBusConnection *connection,
/* Close the claimed device as well */
if (priv->dev) {
fp_async_dev_close (priv->dev, action_stop_cb, &done);
struct fp_dev *dev;
dev = priv->dev;
priv->dev = NULL;
fp_async_dev_close (dev, action_stop_cb, &done);
while (done == FALSE)
g_main_context_iteration (NULL, TRUE);
}
@ -600,10 +604,10 @@ static void dev_open_cb(struct fp_dev *dev, int status, void *user_data)
FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev);
struct session_data *session = priv->session;
g_message("device %d claim status %d", priv->id, status);
g_debug("device %d claim status %d", priv->id, status);
if (status != 0) {
GError *error;
GError *error = NULL;
g_free (priv->sender);
priv->sender = NULL;
@ -611,6 +615,7 @@ static void dev_open_cb(struct fp_dev *dev, int status, void *user_data)
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_INTERNAL,
"Open failed with error %d", status);
dbus_g_method_return_error(session->context_claim_device, error);
g_error_free(error);
return;
}
@ -632,6 +637,7 @@ static void fprint_device_claim(FprintDevice *rdev,
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_ALREADY_IN_USE,
"Device was already claimed");
dbus_g_method_return_error(context, error);
g_error_free(error);
return;
}
@ -658,6 +664,7 @@ static void fprint_device_claim(FprintDevice *rdev,
g_free (sender);
g_free (user);
dbus_g_method_return_error (context, error);
g_error_free (error);
return;
}
@ -666,7 +673,7 @@ static void fprint_device_claim(FprintDevice *rdev,
priv->username = user;
priv->sender = sender;
g_message ("user '%s' claiming the device: %d", priv->username, priv->id);
g_debug ("user '%s' claiming the device: %d", priv->username, priv->id);
priv->session = g_slice_new0(struct session_data);
priv->session->context_claim_device = context;
@ -684,6 +691,7 @@ static void fprint_device_claim(FprintDevice *rdev,
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_INTERNAL,
"Could not attempt device open, error %d", r);
dbus_g_method_return_error(context, error);
g_error_free(error);
}
}
@ -704,7 +712,7 @@ static void dev_close_cb(struct fp_dev *dev, void *user_data)
g_free (priv->username);
priv->username = NULL;
g_message("released device %d", priv->id);
g_debug("released device %d", priv->id);
dbus_g_method_return(context);
}
@ -717,6 +725,7 @@ static void fprint_device_release(FprintDevice *rdev,
if (_fprint_device_check_claimed(rdev, context, &error) == FALSE) {
dbus_g_method_return_error (context, error);
g_error_free(error);
return;
}
@ -726,16 +735,44 @@ static void fprint_device_release(FprintDevice *rdev,
"net.reactivated.fprint.device.enroll",
&error) == FALSE) {
dbus_g_method_return_error (context, error);
g_error_free(error);
return;
}
session->context_release_device = context;
if (priv->dev)
fp_async_dev_close(priv->dev, dev_close_cb, rdev);
if (priv->dev) {
struct fp_dev *dev;
dev = priv->dev;
priv->dev = NULL;
fp_async_dev_close(dev, dev_close_cb, rdev);
}
}
static void verify_cb(struct fp_dev *dev, int r, struct fp_img *img,
void *user_data)
static void verify_cb(struct fp_dev *dev,
int r,
struct fp_img *img,
void *user_data);
static void
verify_restart_cb(struct fp_dev *dev,
void *user_data)
{
struct FprintDevice *rdev = user_data;
FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev);
if (priv->current_action != ACTION_VERIFY)
return;
g_debug("verify_restart_cb: restarting verification");
fp_async_verify_start(priv->dev, priv->verify_data, verify_cb, rdev);
}
static void
verify_cb(struct fp_dev *dev,
int r,
struct fp_img *img,
void *user_data)
{
struct FprintDevice *rdev = user_data;
FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev);
@ -744,10 +781,22 @@ static void verify_cb(struct fp_dev *dev, int r, struct fp_img *img,
if (priv->action_done != FALSE)
return;
g_message("verify_cb: result %s (%d)", name, r);
g_debug("verify_cb: result %s (%d)", name, r);
if (r == FP_VERIFY_NO_MATCH || r == FP_VERIFY_MATCH || r < 0)
priv->action_done = TRUE;
if (r == FP_VERIFY_RETRY ||
r == FP_VERIFY_RETRY_TOO_SHORT ||
r == FP_VERIFY_RETRY_CENTER_FINGER ||
r == FP_VERIFY_RETRY_REMOVE_FINGER) {
g_debug ("verify_cb: stopping current verification to retry");
fp_img_free(img);
if (fp_async_verify_stop(priv->dev, verify_restart_cb, user_data) == 0) {
g_signal_emit(rdev, signals[SIGNAL_VERIFY_STATUS], 0, name, priv->action_done);
return;
}
/* fallthrough to error out if restarting failed */
}
priv->action_done = TRUE;
set_disconnected (priv, name);
g_signal_emit(rdev, signals[SIGNAL_VERIFY_STATUS], 0, name, priv->action_done);
fp_img_free(img);
@ -758,8 +807,32 @@ static void verify_cb(struct fp_dev *dev, int r, struct fp_img *img,
}
}
static void identify_cb(struct fp_dev *dev, int r,
size_t match_offset, struct fp_img *img, void *user_data)
static void identify_cb(struct fp_dev *dev,
int r,
size_t match_offset,
struct fp_img *img,
void *user_data);
static void
identify_restart_cb(struct fp_dev *dev,
void *user_data)
{
struct FprintDevice *rdev = user_data;
FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev);
if (priv->current_action != ACTION_IDENTIFY)
return;
g_debug("identify_restart_cb: restarting identification");
fp_async_identify_start (priv->dev, priv->identify_data, identify_cb, rdev);
}
static void
identify_cb(struct fp_dev *dev,
int r,
size_t match_offset,
struct fp_img *img,
void *user_data)
{
struct FprintDevice *rdev = user_data;
FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev);
@ -768,10 +841,22 @@ static void identify_cb(struct fp_dev *dev, int r,
if (priv->action_done != FALSE)
return;
g_message("identify_cb: result %s (%d)", name, r);
g_debug("identify_cb: result %s (%d)", name, r);
if (r == FP_VERIFY_NO_MATCH || r == FP_VERIFY_MATCH || r < 0)
priv->action_done = TRUE;
if (r == FP_VERIFY_RETRY ||
r == FP_VERIFY_RETRY_TOO_SHORT ||
r == FP_VERIFY_RETRY_CENTER_FINGER ||
r == FP_VERIFY_RETRY_REMOVE_FINGER) {
g_debug ("identify_cb: stopping current identification to retry");
fp_img_free(img);
if (fp_async_identify_stop(priv->dev, identify_restart_cb, user_data) == 0) {
g_signal_emit(rdev, signals[SIGNAL_VERIFY_STATUS], 0, name, priv->action_done);
return;
}
/* fallthrough to error out if restarting failed */
}
priv->action_done = TRUE;
set_disconnected (priv, name);
g_signal_emit(rdev, signals[SIGNAL_VERIFY_STATUS], 0, name, priv->action_done);
fp_img_free(img);
@ -829,6 +914,7 @@ static void fprint_device_verify_start(FprintDevice *rdev,
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_NO_ENROLLED_PRINTS,
"No fingerprints enrolled");
dbus_g_method_return_error(context, error);
g_error_free(error);
return;
}
if (fp_dev_supports_identification(priv->dev)) {
@ -838,7 +924,7 @@ static void fprint_device_verify_start(FprintDevice *rdev,
array = g_ptr_array_new ();
for (l = prints; l != NULL; l = l->next) {
g_message ("adding finger %d to the gallery", GPOINTER_TO_INT (l->data));
g_debug ("adding finger %d to the gallery", GPOINTER_TO_INT (l->data));
r = store.print_data_load(priv->dev, GPOINTER_TO_INT (l->data),
&data, priv->username);
if (r == 0)
@ -868,12 +954,12 @@ static void fprint_device_verify_start(FprintDevice *rdev,
}
priv->current_action = ACTION_IDENTIFY;
g_message ("start identification device %d", priv->id);
g_debug ("start identification device %d", priv->id);
r = fp_async_identify_start (priv->dev, gallery, identify_cb, rdev);
} else {
priv->current_action = ACTION_VERIFY;
g_message("start verification device %d finger %d", priv->id, finger_num);
g_debug("start verification device %d finger %d", priv->id, finger_num);
r = store.print_data_load(priv->dev, (enum fp_finger)finger_num,
&data, priv->username);
@ -882,6 +968,7 @@ static void fprint_device_verify_start(FprintDevice *rdev,
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_INTERNAL,
"No such print %d", finger_num);
dbus_g_method_return_error(context, error);
g_error_free(error);
return;
}
@ -906,6 +993,7 @@ static void fprint_device_verify_start(FprintDevice *rdev,
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_INTERNAL,
"Verify start failed with error %d", r);
dbus_g_method_return_error(context, error);
g_error_free(error);
return;
}
priv->verify_data = data;
@ -933,11 +1021,13 @@ static void fprint_device_verify_stop(FprintDevice *rdev,
if (_fprint_device_check_claimed(rdev, context, &error) == FALSE) {
dbus_g_method_return_error (context, error);
g_error_free(error);
return;
}
if (_fprint_device_check_polkit_for_action (rdev, context, "net.reactivated.fprint.device.verify", &error) == FALSE) {
dbus_g_method_return_error (context, error);
g_error_free(error);
return;
}
@ -970,6 +1060,13 @@ static void fprint_device_verify_stop(FprintDevice *rdev,
return;
}
if (r == -EINPROGRESS) {
g_debug ("%s stop already in progress",
priv->current_action == ACTION_VERIFY ? "verification" : "identification");
dbus_g_method_return(context);
r = 0;
}
if (r < 0) {
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_INTERNAL,
"Verify stop failed with error %d", r);
@ -995,7 +1092,7 @@ static void enroll_stage_cb(struct fp_dev *dev, int result,
if (priv->action_done != FALSE)
return;
g_message("enroll_stage_cb: result %d", result);
g_debug("enroll_stage_cb: result %d", result);
if (result == FP_ENROLL_COMPLETE) {
r = store.print_data_save(print, session->enroll_finger, priv->username);
if (r < 0)
@ -1031,11 +1128,13 @@ static void fprint_device_enroll_start(FprintDevice *rdev,
if (_fprint_device_check_claimed(rdev, context, &error) == FALSE) {
dbus_g_method_return_error (context, error);
g_error_free (error);
return;
}
if (_fprint_device_check_polkit_for_action (rdev, context, "net.reactivated.fprint.device.enroll", &error) == FALSE) {
dbus_g_method_return_error (context, error);
g_error_free (error);
return;
}
@ -1052,7 +1151,7 @@ static void fprint_device_enroll_start(FprintDevice *rdev,
return;
}
g_message("start enrollment device %d finger %d", priv->id, finger_num);
g_debug("start enrollment device %d finger %d", priv->id, finger_num);
session->enroll_finger = finger_num;
priv->action_done = FALSE;
@ -1061,6 +1160,7 @@ static void fprint_device_enroll_start(FprintDevice *rdev,
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_INTERNAL,
"Enroll start failed with error %d", r);
dbus_g_method_return_error(context, error);
g_error_free(error);
return;
}
@ -1083,11 +1183,13 @@ static void fprint_device_enroll_stop(FprintDevice *rdev,
if (_fprint_device_check_claimed(rdev, context, &error) == FALSE) {
dbus_g_method_return_error (context, error);
g_error_free (error);
return;
}
if (_fprint_device_check_polkit_for_action (rdev, context, "net.reactivated.fprint.device.enroll", &error) == FALSE) {
dbus_g_method_return_error (context, error);
g_error_free (error);
return;
}
@ -1140,6 +1242,7 @@ static void fprint_device_list_enrolled_fingers(FprintDevice *rdev,
if (_fprint_device_check_polkit_for_action (rdev, context, "net.reactivated.fprint.device.verify", &error) == FALSE) {
g_free (user);
dbus_g_method_return_error (context, error);
g_error_free (error);
return;
}
@ -1153,6 +1256,7 @@ static void fprint_device_list_enrolled_fingers(FprintDevice *rdev,
g_set_error(&error, FPRINT_ERROR, FPRINT_ERROR_NO_ENROLLED_PRINTS,
"Failed to discover prints");
dbus_g_method_return_error(context, error);
g_error_free (error);
return;
}
@ -1191,6 +1295,7 @@ static void fprint_device_delete_enrolled_fingers(FprintDevice *rdev,
if (_fprint_device_check_polkit_for_action (rdev, context, "net.reactivated.fprint.device.enroll", &error) == FALSE) {
g_free (user);
dbus_g_method_return_error (context, error);
g_error_free (error);
return;
}

View File

@ -39,12 +39,9 @@
#include "file_storage.h"
#define FILE_STORAGE_PATH "/var/lib/fprint"
#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)
@ -86,12 +83,9 @@ static char *get_path_to_print_dscv(struct fp_dscv_dev *dev, enum fp_finger fing
fp_dscv_dev_get_devtype(dev), finger, base_store);
}
static int file_storage_get_basestore_for_username(const char *username, char **base_store)
static char *file_storage_get_basestore_for_username(const char *username)
{
char *dirpath = FILE_STORAGE_PATH;
*base_store = g_build_filename(dirpath, username, NULL);
return 0;
return g_build_filename(FILE_STORAGE_PATH, username, NULL);
}
/* if username == NULL function will use current username */
@ -99,16 +93,13 @@ 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;
char *path, *dirpath;
size_t len;
int r;
char *base_store = NULL;
char *buf = NULL;
r = file_storage_get_basestore_for_username(username, &base_store);
if (r < 0) {
return r;
}
base_store = file_storage_get_basestore_for_username(username);
len = fp_print_data_get_data(data, (guchar **) &buf);
if (!len) {
@ -120,26 +111,30 @@ int file_storage_print_data_save(struct fp_print_data *data,
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_debug("file_storage_print_data_save(): could not mkdir(\"%s\"): %s",
dirpath, g_strerror(r));
g_free(dirpath);
return r;
g_free(path);
goto out;
}
g_free(dirpath);
//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_debug("file_storage_print_data_save(): could not save '%s': %s",
path, err->message);
g_error_free(err);
/* FIXME interpret error codes */
return r;
goto out;
}
return 0;
out:
g_clear_pointer(&buf, free);
g_clear_pointer(&base_store, g_free);
return r;
}
static int load_from_file(char *path, struct fp_print_data **data)
@ -177,14 +172,12 @@ int file_storage_print_data_load(struct fp_dev *dev,
int r;
char *base_store = NULL;
r = file_storage_get_basestore_for_username(username, &base_store);
if (r < 0) {
return r;
}
base_store = file_storage_get_basestore_for_username(username);
path = get_path_to_print(dev, finger, base_store);
r = load_from_file(path, &fdata);
g_debug ("file_storage_print_data_load(): loaded '%s' %s",
path, g_strerror(r));
g_free(path);
g_free(base_store);
if (r)
@ -203,17 +196,14 @@ int file_storage_print_data_delete(struct fp_dscv_dev *dev,
enum fp_finger finger, const char *username)
{
int r;
char *base_store;
char *base_store, *path;
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);
base_store = file_storage_get_basestore_for_username(username);
path = get_path_to_print_dscv(dev, finger, base_store);
r = g_unlink(path);
g_debug("file_storage_print_data_delete(): unlink(\"%s\") %s",
path, g_strerror(r));
g_free(path);
g_free(base_store);
@ -229,7 +219,7 @@ static GSList *scan_dev_storedir(char *devpath, uint16_t driver_id,
GDir *dir = g_dir_open(devpath, 0, &err);
if (!dir) {
//fp_err("opendir %s failed: %s", devpath, err->message);
g_debug("scan_dev_storedir(): opendir(\"%s\") failed: %s", devpath, err->message);
g_error_free(err);
return list;
}
@ -244,7 +234,7 @@ static GSList *scan_dev_storedir(char *devpath, uint16_t driver_id,
val = g_ascii_strtoull(ent, &endptr, 16);
if (endptr == ent || !FP_FINGER_IS_VALID(val)) {
//fp_dbg("skipping print file %s", ent);
g_debug("scan_dev_storedir(): skipping print file '%s'", ent);
continue;
}
@ -260,18 +250,15 @@ GSList *file_storage_discover_prints(struct fp_dscv_dev *dev, const char *userna
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;
}
base_store = file_storage_get_basestore_for_username(username);
storedir = get_path_to_storedir(fp_driver_get_driver_id(fp_dscv_dev_get_driver(dev)),
fp_dscv_dev_get_devtype(dev), base_store);
g_debug ("file_storage_discover_prints() for user '%s' in '%s'",
username, storedir);
list = scan_dev_storedir(storedir, fp_driver_get_driver_id(fp_dscv_dev_get_driver(dev)),
fp_dscv_dev_get_devtype(dev), list);

196
src/loop.c Normal file
View File

@ -0,0 +1,196 @@
/*
* 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 <glib.h>
#include <libfprint/fprint.h>
#include <poll.h>
#include <stdlib.h>
#include "loop.h"
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 *l;
struct timeval tv;
int r;
if (!_fdsource->pollfds)
return FALSE;
for (l = _fdsource->pollfds; l != NULL; l = l->next) {
GPollFD *pollfd = l->data;
if (pollfd->revents)
return TRUE;
}
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 *l;
if (!_fdsource->pollfds)
return;
for (l = _fdsource->pollfds; l != NULL; l = l->next) {
GPollFD *pollfd = l->data;
g_source_remove_poll((GSource *) _fdsource, pollfd);
g_slice_free(GPollFD, pollfd);
_fdsource->pollfds = g_slist_delete_link(_fdsource->pollfds, l);
}
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;
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_debug("now monitoring fd %d", fd);
pollfd_add(fd, events);
}
static void pollfd_removed_cb(int fd)
{
GSList *l;
g_debug("no longer monitoring fd %d", fd);
if (!fdsource->pollfds) {
g_debug("cannot remove from list as list is empty?");
return;
}
for (l = fdsource->pollfds; l != NULL; l = l->next) {
GPollFD *pollfd = l->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, l);
return;
}
g_error("couldn't find fd %d in list\n", fd);
}
int setup_pollfds(void)
{
ssize_t numfds;
size_t i;
struct fp_pollfd *fpfds;
GSource *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;
}

27
src/loop.h Normal file
View File

@ -0,0 +1,27 @@
/*
* 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 POLL_H
#define POLL_H
int setup_pollfds(void);
#endif

View File

@ -30,6 +30,7 @@
#include <gmodule.h>
#include "fprintd.h"
#include "loop.h"
#include "storage.h"
#include "file_storage.h"
@ -37,165 +38,6 @@ 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)
{
@ -245,8 +87,9 @@ load_conf (void)
filename = g_build_filename (SYSCONFDIR, "fprintd.conf", NULL);
file = g_key_file_new ();
g_debug("About to load configuration file '%s'", filename);
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);
g_warning ("Could not open \"%s\": %s\n", filename, error->message);
goto bail;
}
@ -300,10 +143,13 @@ int main(int argc, char **argv)
context = g_option_context_new ("Fingerprint handler daemon");
g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
#if !GLIB_CHECK_VERSION (2, 36, 0)
g_type_init();
#endif
if (g_option_context_parse (context, &argc, &argv, &error) == FALSE) {
g_print ("couldn't parse command-line options: %s\n", error->message);
g_warning ("couldn't parse command-line options: %s\n", error->message);
g_error_free (error);
return 1;
}
@ -354,7 +200,7 @@ int main(int argc, char **argv)
r = setup_pollfds();
if (r < 0) {
g_print("pollfd setup failed\n");
g_warning("pollfd setup failed\n");
goto err;
}

View File

@ -114,7 +114,10 @@ static void process_devices(char **argv)
int main(int argc, char **argv)
{
#if !GLIB_CHECK_VERSION (2, 36, 0)
g_type_init();
#endif
create_manager();
if (argc < 2) {

View File

@ -159,7 +159,9 @@ int main(int argc, char **argv)
GError *err = NULL;
DBusGProxy *dev;
#if !GLIB_CHECK_VERSION (2, 36, 0)
g_type_init();
#endif
dbus_g_object_register_marshaller (fprintd_marshal_VOID__STRING_BOOLEAN,
G_TYPE_NONE, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);

View File

@ -130,7 +130,10 @@ static void process_devices(char **argv)
int main(int argc, char **argv)
{
#if !GLIB_CHECK_VERSION (2, 36, 0)
g_type_init();
#endif
create_manager();
if (argc < 2) {

View File

@ -172,7 +172,9 @@ int main(int argc, char **argv)
DBusGProxy *dev;
char *username;
#if !GLIB_CHECK_VERSION (2, 36, 0)
g_type_init();
#endif
dbus_g_object_register_marshaller (fprintd_marshal_VOID__STRING_BOOLEAN,
G_TYPE_NONE, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);