mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-03 21:27:00 +07:00
WIP not compilable fido_id
This commit is contained in:
parent
6836c0e9a2
commit
b359e32d07
@ -6,6 +6,10 @@
|
|||||||
* Inspired by Andrew Lutomirski's 'u2f-hidraw-policy.c'
|
* Inspired by Andrew Lutomirski's 'u2f-hidraw-policy.c'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
#define _GNU_SOURCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <linux/hid.h>
|
#include <linux/hid.h>
|
||||||
@ -14,23 +18,90 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "device-private.h"
|
|
||||||
#include "device-util.h"
|
//#include "libudev.h"
|
||||||
#include "fd-util.h"
|
//#include "libudev-private.h"
|
||||||
|
//#include "fido_id_desc.h"
|
||||||
|
//#include "udev-util.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "libudev.h"
|
||||||
|
#include "libudev-private.h"
|
||||||
|
//#include "device-private.h"
|
||||||
|
//#include "device-util.h"
|
||||||
|
//#include "fd-util.h"
|
||||||
#include "fido_id_desc.h"
|
#include "fido_id_desc.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
#include "main-func.h"
|
//#include "main-func.h"
|
||||||
#include "path-util.h"
|
#include "path-util.h"
|
||||||
#include "string-util.h"
|
//#include "string-util.h"
|
||||||
|
#include "udev.h"
|
||||||
#include "udev-util.h"
|
#include "udev-util.h"
|
||||||
|
#include "libudev.h"
|
||||||
|
#include "libudev-private.h"
|
||||||
|
|
||||||
static int run(int argc, char **argv) {
|
int device_new_aux(struct udev_device **ret) {
|
||||||
_cleanup_(sd_device_unrefp) struct sd_device *device = NULL;
|
struct udev_device *device;
|
||||||
|
|
||||||
|
assert(ret);
|
||||||
|
|
||||||
|
device = new(struct udev_device, 1);
|
||||||
|
if (!device)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
*device = (struct udev_device) {
|
||||||
|
.n_ref = 1,
|
||||||
|
.watch_handle = -1,
|
||||||
|
.devmode = MODE_INVALID,
|
||||||
|
.devuid = UID_INVALID,
|
||||||
|
.devgid = GID_INVALID,
|
||||||
|
.action = _SD_DEVICE_ACTION_INVALID,
|
||||||
|
};
|
||||||
|
|
||||||
|
*ret = device;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int device_new_from_strv(struct udev_device **ret, char **strv) {
|
||||||
|
_cleanup_(udev_device_unrefp) struct udev_device *device = NULL;
|
||||||
|
const char *major = NULL, *minor = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(ret);
|
||||||
|
assert(strv);
|
||||||
|
|
||||||
|
r = device_new_aux(&device);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
STRV_FOREACH(key, strv) {
|
||||||
|
r = device_append(device, *key, &major, &minor);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (major) {
|
||||||
|
r = device_set_devnum(device, major, minor);
|
||||||
|
if (r < 0)
|
||||||
|
return log_device_debug_errno(device, r, "sd-device: Failed to set devnum %s:%s: %m", major, minor);
|
||||||
|
}
|
||||||
|
|
||||||
|
r = device_verify(device);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
*ret = TAKE_PTR(device);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
_cleanup_(udev_device_unrefp) struct udev_device *device = NULL;
|
||||||
_cleanup_free_ char *desc_path = NULL;
|
_cleanup_free_ char *desc_path = NULL;
|
||||||
_cleanup_close_ int fd = -1;
|
_cleanup_close_ int fd = -1;
|
||||||
|
|
||||||
struct sd_device *hid_device;
|
struct udev_device *hid_device;
|
||||||
const char *sys_path;
|
const char *sys_path;
|
||||||
uint8_t desc[HID_MAX_DESCRIPTOR_SIZE];
|
uint8_t desc[HID_MAX_DESCRIPTOR_SIZE];
|
||||||
ssize_t desc_len;
|
ssize_t desc_len;
|
||||||
@ -38,28 +109,28 @@ static int run(int argc, char **argv) {
|
|||||||
int r;
|
int r;
|
||||||
|
|
||||||
log_set_target(LOG_TARGET_AUTO);
|
log_set_target(LOG_TARGET_AUTO);
|
||||||
udev_parse_config();
|
//udev_parse_config();
|
||||||
log_parse_environment();
|
//log_parse_environment();
|
||||||
log_open();
|
log_open();
|
||||||
|
|
||||||
if (argc > 2)
|
if (argc > 2)
|
||||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Usage: %s [SYSFS_PATH]", program_invocation_short_name);
|
return log_error_errno(/*SYNTHETIC_ERRNO*/(EINVAL), "Usage: %s [SYSFS_PATH]", program_invocation_short_name);
|
||||||
|
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
r = device_new_from_strv(&device, environ);
|
r = device_new_from_strv(&device, environ);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to get current device from environment: %m");
|
return log_error_errno(r, "Failed to get current device from environment: %m");
|
||||||
} else {
|
} else {
|
||||||
r = sd_device_new_from_syspath(&device, argv[1]);
|
r = udev_device_new_from_syspath(&device, argv[1]);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to get device from syspath: %m");
|
return log_error_errno(r, "Failed to get device from syspath: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
r = sd_device_get_parent(device, &hid_device);
|
r = udev_device_get_parent(device, &hid_device);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_device_error_errno(device, r, "Failed to get parent HID device: %m");
|
return log_device_error_errno(device, r, "Failed to get parent HID device: %m");
|
||||||
|
|
||||||
r = sd_device_get_syspath(hid_device, &sys_path);
|
r = udev_device_get_syspath(hid_device, &sys_path);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_device_error_errno(hid_device, r, "Failed to get syspath for HID device: %m");
|
return log_device_error_errno(hid_device, r, "Failed to get syspath for HID device: %m");
|
||||||
|
|
||||||
@ -77,7 +148,7 @@ static int run(int argc, char **argv) {
|
|||||||
return log_device_error_errno(hid_device, errno,
|
return log_device_error_errno(hid_device, errno,
|
||||||
"Failed to read report descriptor at '%s': %m", desc_path);
|
"Failed to read report descriptor at '%s': %m", desc_path);
|
||||||
if (desc_len == 0)
|
if (desc_len == 0)
|
||||||
return log_device_debug_errno(hid_device, SYNTHETIC_ERRNO(EINVAL),
|
return log_device_debug_errno(hid_device, /*SYNTHETIC_ERRNO*/(EINVAL),
|
||||||
"Empty report descriptor at '%s'.", desc_path);
|
"Empty report descriptor at '%s'.", desc_path);
|
||||||
|
|
||||||
r = is_fido_security_token_desc(desc, desc_len);
|
r = is_fido_security_token_desc(desc, desc_len);
|
||||||
@ -92,4 +163,3 @@ static int run(int argc, char **argv) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MAIN_FUNCTION(run);
|
|
||||||
|
Loading…
Reference in New Issue
Block a user