mirror of
https://gitlab.com/mishakmak/pam-fprint-grosshack.git
synced 2026-04-09 04:13:33 +02:00
Add device name property
Add GetProperties method, with a single "Name" properties into the hashtable. Use the device name property in the PAM module, and in the list test.
This commit is contained in:
committed by
Daniel Drake
parent
69c131f723
commit
924e08d2e8
3
TODO
3
TODO
@ -10,9 +10,6 @@ Enforce command sequences:
|
|||||||
only allow VerifyStop during a verification
|
only allow VerifyStop during a verification
|
||||||
etc
|
etc
|
||||||
|
|
||||||
Add Device Properties:
|
|
||||||
- device name
|
|
||||||
|
|
||||||
Rethink enums and results passed, should be strings and D-Bus errors
|
Rethink enums and results passed, should be strings and D-Bus errors
|
||||||
|
|
||||||
Verify PAM messages fit with GDM/gnome-screensaver
|
Verify PAM messages fit with GDM/gnome-screensaver
|
||||||
|
|||||||
@ -236,6 +236,8 @@ typedef struct {
|
|||||||
gboolean timed_out;
|
gboolean timed_out;
|
||||||
pam_handle_t *pamh;
|
pam_handle_t *pamh;
|
||||||
GMainLoop *loop;
|
GMainLoop *loop;
|
||||||
|
|
||||||
|
char *driver;
|
||||||
} verify_data;
|
} verify_data;
|
||||||
|
|
||||||
static void verify_result(GObject *object, int result, gpointer user_data)
|
static void verify_result(GObject *object, int result, gpointer user_data)
|
||||||
@ -255,13 +257,11 @@ static void verify_finger_selected(GObject *object, int finger, gpointer user_da
|
|||||||
{
|
{
|
||||||
verify_data *data = user_data;
|
verify_data *data = user_data;
|
||||||
char *msg;
|
char *msg;
|
||||||
//FIXME
|
|
||||||
const char *driver_name = "Fingerprint reader";
|
|
||||||
|
|
||||||
if (finger == -1) {
|
if (finger == -1) {
|
||||||
msg = g_strdup_printf ("Scan finger on %s", driver_name);
|
msg = g_strdup_printf ("Scan finger on %s", data->driver);
|
||||||
} else {
|
} else {
|
||||||
msg = g_strdup_printf ("Scan %s finger on %s", fingerstr(finger), driver_name);
|
msg = g_strdup_printf ("Scan %s finger on %s", fingerstr(finger), data->driver);
|
||||||
}
|
}
|
||||||
D(g_message ("verify_finger_selected %s", msg));
|
D(g_message ("verify_finger_selected %s", msg));
|
||||||
send_info_msg (data->pamh, msg);
|
send_info_msg (data->pamh, msg);
|
||||||
@ -285,6 +285,7 @@ static gboolean verify_timeout_cb (gpointer user_data)
|
|||||||
static int do_verify(DBusGConnection *connection, GMainLoop *loop, pam_handle_t *pamh, DBusGProxy *dev)
|
static int do_verify(DBusGConnection *connection, GMainLoop *loop, pam_handle_t *pamh, DBusGProxy *dev)
|
||||||
{
|
{
|
||||||
GError *error;
|
GError *error;
|
||||||
|
GHashTable *props;
|
||||||
verify_data *data;
|
verify_data *data;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -293,6 +294,14 @@ static int do_verify(DBusGConnection *connection, GMainLoop *loop, pam_handle_t
|
|||||||
data->pamh = pamh;
|
data->pamh = pamh;
|
||||||
data->loop = loop;
|
data->loop = loop;
|
||||||
|
|
||||||
|
if (dbus_g_proxy_call (dev, "GetProperties", &error, G_TYPE_INVALID,
|
||||||
|
dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING), &props, G_TYPE_INVALID)) {
|
||||||
|
data->driver = g_strdup (g_hash_table_lookup (props, "Name"));
|
||||||
|
g_hash_table_destroy (props);
|
||||||
|
}
|
||||||
|
if (!data->driver)
|
||||||
|
data->driver = g_strdup ("Fingerprint reader");
|
||||||
|
|
||||||
dbus_g_proxy_add_signal(dev, "VerifyStatus", G_TYPE_INT, NULL);
|
dbus_g_proxy_add_signal(dev, "VerifyStatus", G_TYPE_INT, NULL);
|
||||||
dbus_g_proxy_add_signal(dev, "VerifyFingerSelected", G_TYPE_INT, NULL);
|
dbus_g_proxy_add_signal(dev, "VerifyFingerSelected", G_TYPE_INT, NULL);
|
||||||
dbus_g_proxy_connect_signal(dev, "VerifyStatus", G_CALLBACK(verify_result),
|
dbus_g_proxy_connect_signal(dev, "VerifyStatus", G_CALLBACK(verify_result),
|
||||||
@ -355,6 +364,7 @@ static int do_verify(DBusGConnection *connection, GMainLoop *loop, pam_handle_t
|
|||||||
dbus_g_proxy_disconnect_signal(dev, "VerifyStatus", G_CALLBACK(verify_result), data);
|
dbus_g_proxy_disconnect_signal(dev, "VerifyStatus", G_CALLBACK(verify_result), data);
|
||||||
dbus_g_proxy_disconnect_signal(dev, "VerifyFingerSelected", G_CALLBACK(verify_finger_selected), data);
|
dbus_g_proxy_disconnect_signal(dev, "VerifyFingerSelected", G_CALLBACK(verify_finger_selected), data);
|
||||||
|
|
||||||
|
g_free (data->driver);
|
||||||
g_free (data);
|
g_free (data);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
22
src/device.c
22
src/device.c
@ -54,6 +54,9 @@ static void fprint_device_list_enrolled_fingers(FprintDevice *rdev,
|
|||||||
static void fprint_device_delete_enrolled_fingers(FprintDevice *rdev,
|
static void fprint_device_delete_enrolled_fingers(FprintDevice *rdev,
|
||||||
const char *username,
|
const char *username,
|
||||||
DBusGMethodInvocation *context);
|
DBusGMethodInvocation *context);
|
||||||
|
static void fprint_device_get_properties (FprintDevice *rdev,
|
||||||
|
GHashTable **props,
|
||||||
|
DBusGMethodInvocation *context);
|
||||||
|
|
||||||
#include "device-dbus-glue.h"
|
#include "device-dbus-glue.h"
|
||||||
|
|
||||||
@ -1034,3 +1037,22 @@ static void fprint_device_delete_enrolled_fingers(FprintDevice *rdev,
|
|||||||
dbus_g_method_return(context);
|
dbus_g_method_return(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fprint_device_get_properties (FprintDevice *rdev,
|
||||||
|
GHashTable **props,
|
||||||
|
DBusGMethodInvocation *context)
|
||||||
|
{
|
||||||
|
FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev);
|
||||||
|
GHashTable *table;
|
||||||
|
struct fp_driver *driver;
|
||||||
|
const char *driver_name;
|
||||||
|
|
||||||
|
table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
|
||||||
|
|
||||||
|
driver = fp_dscv_dev_get_driver (priv->ddev);
|
||||||
|
driver_name = fp_driver_get_full_name (driver);
|
||||||
|
g_hash_table_insert (table, "Name", g_strdup (driver_name));
|
||||||
|
|
||||||
|
*props = table;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -54,6 +54,10 @@
|
|||||||
<arg type="i" name="result" />
|
<arg type="i" name="result" />
|
||||||
</signal>
|
</signal>
|
||||||
|
|
||||||
|
<method name="GetProperties">
|
||||||
|
<arg type="a{ss}" name="properties" direction="out" />
|
||||||
|
</method>
|
||||||
|
|
||||||
</interface>
|
</interface>
|
||||||
</node>
|
</node>
|
||||||
|
|
||||||
|
|||||||
@ -119,6 +119,7 @@ static void list_fingerprints(DBusGProxy *dev, const char *username)
|
|||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
GArray *fingers;
|
GArray *fingers;
|
||||||
|
GHashTable *props;
|
||||||
guint i;
|
guint i;
|
||||||
int fingernum;
|
int fingernum;
|
||||||
|
|
||||||
@ -130,7 +131,10 @@ static void list_fingerprints(DBusGProxy *dev, const char *username)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_print("Fingerprints for user %s:\n", username);
|
if (!net_reactivated_Fprint_Device_get_properties(dev, &props, &error))
|
||||||
|
g_error("GetProperties failed: %s", error->message);
|
||||||
|
|
||||||
|
g_print("Fingerprints for user %s on %s:\n", username, (char *) g_hash_table_lookup (props, "Name"));
|
||||||
for (i = 0; i < fingers->len; i++) {
|
for (i = 0; i < fingers->len; i++) {
|
||||||
fingernum = g_array_index(fingers, guint32, i);
|
fingernum = g_array_index(fingers, guint32, i);
|
||||||
g_print(" - #%d: %s\n", fingernum, fingerstr(fingernum));
|
g_print(" - #%d: %s\n", fingernum, fingerstr(fingernum));
|
||||||
@ -138,6 +142,7 @@ static void list_fingerprints(DBusGProxy *dev, const char *username)
|
|||||||
|
|
||||||
fingernum = g_array_index(fingers, guint32, 0);
|
fingernum = g_array_index(fingers, guint32, 0);
|
||||||
g_array_free(fingers, TRUE);
|
g_array_free(fingers, TRUE);
|
||||||
|
g_hash_table_destroy (props);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
|||||||
Reference in New Issue
Block a user