authenticator-rs icon indicating copy to clipboard operation
authenticator-rs copied to clipboard

Fix #216: Correctly parse device-properties for Linux

Open msirringhaus opened this issue 2 years ago • 3 comments

This needs to bump libudev, because the API had a bug that disallowed iterating the device tree.

Vendoring in Firefox is not a problem, since libudev is only used by auth-rs. We need, however, to add 3 or 4 function definitions to dom/webauthn/libudev-sys/lib.rs.

If we don't want to do this yet, this PR can just stay pending, since the info is not really used currently (except for some output in the examples).

msirringhaus avatar Jan 10 '23 13:01 msirringhaus

Do you have a patch on dom/webauthn/libudev-sys/lib.rs ready to go? Alternatively, it looks like bindgen has libloading support now, so maybe we can get a patch upstream and remove our fork of libudev-sys.

jschanck avatar Jun 02 '23 16:06 jschanck

I probably have it in some of my stashes. Even if I can't find it, it was a trivial patch.

msirringhaus avatar Jun 05 '23 08:06 msirringhaus

Just for completeness, this is the patch:

diff --git a/dom/webauthn/libudev-sys/src/lib.rs b/dom/webauthn/libudev-sys/src/lib.rs
--- a/dom/webauthn/libudev-sys/src/lib.rs
+++ b/dom/webauthn/libudev-sys/src/lib.rs
@@ -124,6 +124,7 @@ macro_rules! define {
 
 // udev
 define!(udev_new, extern "C" fn () -> *mut udev);
+define!(udev_ref, extern "C" fn(*mut udev) -> *mut udev);
 define!(udev_unref, extern "C" fn (*mut udev) -> *mut udev);
 
 // udev_list
@@ -135,6 +136,7 @@ define!(udev_list_entry_get_value, exter
 define!(udev_device_ref, extern "C" fn (*mut udev_device) -> *mut udev_device);
 define!(udev_device_unref, extern "C" fn (*mut udev_device) -> *mut udev_device);
 define!(udev_device_new_from_syspath, extern "C" fn (*mut udev, *const c_char) -> *mut udev_device);
+define!(udev_device_get_udev, extern "C" fn (*mut udev_device) -> *mut udev);
 define!(udev_device_get_parent, extern "C" fn (*mut udev_device) -> *mut udev_device);
 define!(udev_device_get_devpath, extern "C" fn (*mut udev_device) -> *const c_char);
 define!(udev_device_get_subsystem, extern "C" fn (*mut udev_device) -> *const c_char);
@@ -160,6 +162,7 @@ define!(udev_monitor_unref, extern "C" f
 define!(udev_monitor_new_from_netlink, extern "C" fn (*mut udev, *const c_char) -> *mut udev_monitor);
 define!(udev_monitor_enable_receiving, extern "C" fn (*mut udev_monitor) -> c_int);
 define!(udev_monitor_get_fd, extern "C" fn (*mut udev_monitor) -> c_int);
+define!(udev_monitor_get_udev, extern "C" fn (*mut udev_monitor) -> *mut udev);
 define!(udev_monitor_receive_device, extern "C" fn (*mut udev_monitor) -> *mut udev_device);
 define!(udev_monitor_filter_add_match_subsystem_devtype, extern "C" fn (*mut udev_monitor, *const c_char, *const c_char) -> c_int);
 define!(udev_monitor_filter_add_match_tag, extern "C" fn (*mut udev_monitor, *const c_char) -> c_int);
@@ -180,3 +183,4 @@ define!(udev_enumerate_add_match_sysname
 define!(udev_enumerate_add_syspath, extern "C" fn (*mut udev_enumerate, *const c_char) -> c_int);
 define!(udev_enumerate_scan_devices, extern "C" fn (*mut udev_enumerate) -> c_int);
 define!(udev_enumerate_get_list_entry, extern "C" fn (*mut udev_enumerate) -> *mut udev_list_entry);
+define!(udev_enumerate_get_udev, extern "C" fn (*mut udev_enumerate) -> *mut udev);

msirringhaus avatar Feb 26 '24 13:02 msirringhaus