mirror of
https://gitlab.com/mishakmak/pam-fprint-grosshack.git
synced 2026-04-09 04:13:33 +02:00
device: Set an error if trying to delete a print that is not enrolled
This commit is contained in:
53
src/device.c
53
src/device.c
@ -1841,10 +1841,27 @@ fprint_device_list_enrolled_fingers (FprintDBusDevice *dbus_dev,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
delete_enrolled_fingers (FprintDevice *rdev,
|
user_has_print_enrolled (FprintDevice *rdev,
|
||||||
const char *user,
|
const char *user,
|
||||||
FpFinger finger)
|
FpFinger finger)
|
||||||
|
{
|
||||||
|
g_autoptr(GSList) prints = NULL;
|
||||||
|
FprintDevicePrivate *priv = fprint_device_get_instance_private (rdev);
|
||||||
|
|
||||||
|
prints = store.discover_prints (priv->dev, user);
|
||||||
|
|
||||||
|
if (finger == FP_FINGER_UNKNOWN)
|
||||||
|
return prints != NULL;
|
||||||
|
|
||||||
|
return g_slist_find (prints, GUINT_TO_POINTER (finger)) != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
delete_enrolled_fingers (FprintDevice *rdev,
|
||||||
|
const char *user,
|
||||||
|
FpFinger finger,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
FprintDevicePrivate *priv = fprint_device_get_instance_private (rdev);
|
FprintDevicePrivate *priv = fprint_device_get_instance_private (rdev);
|
||||||
guint i;
|
guint i;
|
||||||
@ -1855,6 +1872,14 @@ delete_enrolled_fingers (FprintDevice *rdev,
|
|||||||
else
|
else
|
||||||
g_debug ("Deleting enrolled fingers for user %s", user);
|
g_debug ("Deleting enrolled fingers for user %s", user);
|
||||||
|
|
||||||
|
if (!user_has_print_enrolled (rdev, user, finger))
|
||||||
|
{
|
||||||
|
g_set_error (error, FPRINT_ERROR, FPRINT_ERROR_NO_ENROLLED_PRINTS,
|
||||||
|
"Fingerprint for finger %s is not enrolled",
|
||||||
|
fp_finger_to_name (finger));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* First try deleting the print from the device, we don't consider it
|
/* First try deleting the print from the device, we don't consider it
|
||||||
* fatal if this does not work. */
|
* fatal if this does not work. */
|
||||||
if (fp_device_has_storage (priv->dev))
|
if (fp_device_has_storage (priv->dev))
|
||||||
@ -1875,14 +1900,14 @@ delete_enrolled_fingers (FprintDevice *rdev,
|
|||||||
|
|
||||||
if (print)
|
if (print)
|
||||||
{
|
{
|
||||||
g_autoptr(GError) error = NULL;
|
g_autoptr(GError) local_error = NULL;
|
||||||
|
|
||||||
if (finger != FP_FINGER_UNKNOWN && fp_print_get_finger (print) != finger)
|
if (finger != FP_FINGER_UNKNOWN && fp_print_get_finger (print) != finger)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!fp_device_delete_print_sync (priv->dev, print, NULL, &error))
|
if (!fp_device_delete_print_sync (priv->dev, print, NULL, &local_error))
|
||||||
{
|
{
|
||||||
g_warning ("Error deleting print from device: %s", error->message);
|
g_warning ("Error deleting print from device: %s", local_error->message);
|
||||||
g_warning ("This might indicate an issue in the libfprint driver or in the fingerprint device.");
|
g_warning ("This might indicate an issue in the libfprint driver or in the fingerprint device.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1890,14 +1915,12 @@ delete_enrolled_fingers (FprintDevice *rdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (finger != FP_FINGER_UNKNOWN)
|
if (finger != FP_FINGER_UNKNOWN)
|
||||||
{
|
|
||||||
store.print_data_delete (priv->dev, finger, user);
|
store.print_data_delete (priv->dev, finger, user);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
for (i = FP_FINGER_FIRST; i <= FP_FINGER_LAST; i++)
|
for (i = FP_FINGER_FIRST; i <= FP_FINGER_LAST; i++)
|
||||||
store.print_data_delete (priv->dev, i, user);
|
store.print_data_delete (priv->dev, i, user);
|
||||||
}
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
@ -2002,7 +2025,7 @@ fprint_device_delete_enrolled_fingers (FprintDBusDevice *dbus_dev,
|
|||||||
g_assert (user);
|
g_assert (user);
|
||||||
g_assert (g_str_equal (username, "") || g_str_equal (user, username));
|
g_assert (g_str_equal (username, "") || g_str_equal (user, username));
|
||||||
|
|
||||||
delete_enrolled_fingers (rdev, user, FP_FINGER_UNKNOWN);
|
delete_enrolled_fingers (rdev, user, FP_FINGER_UNKNOWN, NULL);
|
||||||
|
|
||||||
if (!opened && fp_device_has_storage (priv->dev))
|
if (!opened && fp_device_has_storage (priv->dev))
|
||||||
fp_device_close_sync (priv->dev, NULL, NULL);
|
fp_device_close_sync (priv->dev, NULL, NULL);
|
||||||
@ -2040,7 +2063,7 @@ fprint_device_delete_enrolled_fingers2 (FprintDBusDevice *dbus_dev,
|
|||||||
|
|
||||||
session = session_data_get (priv);
|
session = session_data_get (priv);
|
||||||
|
|
||||||
delete_enrolled_fingers (rdev, session->username, FP_FINGER_UNKNOWN);
|
delete_enrolled_fingers (rdev, session->username, FP_FINGER_UNKNOWN, NULL);
|
||||||
|
|
||||||
fprint_dbus_device_complete_delete_enrolled_fingers2 (dbus_dev,
|
fprint_dbus_device_complete_delete_enrolled_fingers2 (dbus_dev,
|
||||||
invocation);
|
invocation);
|
||||||
@ -2084,8 +2107,12 @@ fprint_device_delete_enrolled_finger (FprintDBusDevice *dbus_dev,
|
|||||||
|
|
||||||
session = session_data_get (priv);
|
session = session_data_get (priv);
|
||||||
|
|
||||||
/* FIXME: Should we return an error if the requested finger is not enrolled?! */
|
if (!delete_enrolled_fingers (rdev, session->username, finger, &error))
|
||||||
delete_enrolled_fingers (rdev, session->username, finger);
|
{
|
||||||
|
priv->current_action = ACTION_NONE;
|
||||||
|
g_dbus_method_invocation_return_gerror (invocation, error);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
priv->current_action = ACTION_NONE;
|
priv->current_action = ACTION_NONE;
|
||||||
|
|
||||||
|
|||||||
@ -355,6 +355,8 @@
|
|||||||
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
|
<doc:error name="&ERROR_PERMISSION_DENIED;">if the caller lacks the appropriate PolicyKit authorization</doc:error>
|
||||||
<doc:error name="&ERROR_CLAIM_DEVICE;">if the device was not claimed</doc:error>
|
<doc:error name="&ERROR_CLAIM_DEVICE;">if the device was not claimed</doc:error>
|
||||||
<doc:error name="&ERROR_INVALID_FINGERNAME;">if the finger name passed is invalid</doc:error>
|
<doc:error name="&ERROR_INVALID_FINGERNAME;">if the finger name passed is invalid</doc:error>
|
||||||
|
<doc:error name="&ERROR_NO_ENROLLED_PRINTS;">if the chosen user doesn't have the requsted fingerprint enrolled</doc:error>
|
||||||
|
<doc:error name="&ERROR_INTERNAL;">if there was an internal error</doc:error>
|
||||||
</doc:errors>
|
</doc:errors>
|
||||||
</doc:doc>
|
</doc:doc>
|
||||||
</method>
|
</method>
|
||||||
|
|||||||
@ -1134,6 +1134,10 @@ class FPrintdVirtualDeviceClaimedTest(FPrintdVirtualDeviceBaseTest):
|
|||||||
with self.assertFprintError('InvalidFingername'):
|
with self.assertFprintError('InvalidFingername'):
|
||||||
self.device.DeleteEnrolledFinger('(s)', 'sixth-left-finger')
|
self.device.DeleteEnrolledFinger('(s)', 'sixth-left-finger')
|
||||||
|
|
||||||
|
def test_delete_with_no_enrolled_prints(self):
|
||||||
|
with self.assertFprintError('NoEnrolledPrints'):
|
||||||
|
self.device.DeleteEnrolledFinger('(s)', 'left-index-finger')
|
||||||
|
|
||||||
def test_verify_with_no_enrolled_prints(self):
|
def test_verify_with_no_enrolled_prints(self):
|
||||||
with self.assertFprintError('NoEnrolledPrints'):
|
with self.assertFprintError('NoEnrolledPrints'):
|
||||||
self.device.VerifyStart('(s)', 'any')
|
self.device.VerifyStart('(s)', 'any')
|
||||||
|
|||||||
Reference in New Issue
Block a user