summaryrefslogtreecommitdiffstats
path: root/usr.sbin/usbdevs
diff options
context:
space:
mode:
authorjakemsr <jakemsr@openbsd.org>2011-01-16 00:04:47 +0000
committerjakemsr <jakemsr@openbsd.org>2011-01-16 00:04:47 +0000
commit9acd4950833f9d6002149e42f39d5698450adb8c (patch)
treec44d110abfaf083ac7ffbcf3f168cac17815e2e6 /usr.sbin/usbdevs
parent* add 'udi_serial' to struct usb_device_info. (diff)
downloadwireguard-openbsd-9acd4950833f9d6002149e42f39d5698450adb8c.tar.xz
wireguard-openbsd-9acd4950833f9d6002149e42f39d5698450adb8c.zip
the serial number is now available in struct usb_device_info, so
there's no need to use the USB_REQUEST ioctl to get the serial number. this also means usbdevs can open /dev/usb* read-only, instead of read-write, and still be fully functional. discussed with deraadt and miod
Diffstat (limited to 'usr.sbin/usbdevs')
-rw-r--r--usr.sbin/usbdevs/usbdevs.c81
1 files changed, 5 insertions, 76 deletions
diff --git a/usr.sbin/usbdevs/usbdevs.c b/usr.sbin/usbdevs/usbdevs.c
index 99fc276c90a..e1c75ccbe2a 100644
--- a/usr.sbin/usbdevs/usbdevs.c
+++ b/usr.sbin/usbdevs/usbdevs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: usbdevs.c,v 1.19 2010/05/31 21:33:04 deraadt Exp $ */
+/* $OpenBSD: usbdevs.c,v 1.20 2011/01/16 00:04:47 jakemsr Exp $ */
/* $NetBSD: usbdevs.c,v 1.19 2002/02/21 00:34:31 christos Exp $ */
/*
@@ -48,7 +48,6 @@ int showdevs = 0;
void usage(void);
void usbdev(int f, int a, int rec);
int getdevicedesc(int, int, usb_device_descriptor_t *);
-void getstring(int, int, int, char *, int);
void usbdump(int f);
void dumpone(char *name, int f, int addr);
int main(int, char **);
@@ -69,12 +68,7 @@ void
usbdev(int f, int a, int rec)
{
struct usb_device_info di;
- usb_device_descriptor_t dd;
- char serialnum[USB_MAX_STRING_LEN];
- struct usb_ctl_request req;
- usb_string_descriptor_t us;
int e, p, i;
- int langid = 0;
di.udi_addr = a;
e = ioctl(f, USB_DEVICEINFO, &di);
@@ -84,21 +78,6 @@ usbdev(int f, int a, int rec)
return;
}
- req.ucr_addr = a;
- req.ucr_request.bmRequestType = UT_READ_DEVICE;
- req.ucr_request.bRequest = UR_GET_DESCRIPTOR;
- req.ucr_data = &us;
- USETW2(req.ucr_request.wValue, UDESC_STRING, 0);
- USETW(req.ucr_request.wIndex, 0);
- USETW(req.ucr_request.wLength, 4);
- req.ucr_flags = 0;
- if (ioctl(f, USB_REQUEST, &req) >= 0)
- langid = UGETW(us.bString[0]);
-
- bzero(serialnum, sizeof serialnum);
- if (getdevicedesc(f, a, &dd))
- getstring(f, a, dd.iSerialNumber, serialnum, langid);
-
printf("addr %d: ", a);
done[a] = 1;
if (verbose) {
@@ -129,8 +108,8 @@ usbdev(int f, int a, int rec)
printf("%s(0x%04x), %s(0x%04x), rev %s",
di.udi_product, di.udi_productNo,
di.udi_vendor, di.udi_vendorNo, di.udi_release);
- if (strlen(serialnum))
- printf(", iSerialNumber %s", serialnum);
+ if (strlen(di.udi_serial))
+ printf(", iSerialNumber %s", di.udi_serial);
} else
printf("%s, %s", di.udi_product, di.udi_vendor);
printf("\n");
@@ -188,56 +167,6 @@ getdevicedesc(int f, int addr, usb_device_descriptor_t *d)
}
void
-getstring(int f, int addr, int si, char *s, int langid)
-{
- struct usb_ctl_request req;
- usb_string_descriptor_t us;
- int r, i, n;
- u_int16_t c;
-
- if (si == 0) {
- *s = 0;
- return;
- }
- req.ucr_addr = addr;
- req.ucr_request.bmRequestType = UT_READ_DEVICE;
- req.ucr_request.bRequest = UR_GET_DESCRIPTOR;
- req.ucr_data = &us;
- USETW2(req.ucr_request.wValue, UDESC_STRING, si);
- USETW(req.ucr_request.wIndex, langid);
- USETW(req.ucr_request.wLength, 2);
- req.ucr_flags = USBD_SHORT_XFER_OK;
-
- if (ioctl(f, USB_REQUEST, &req) == -1){
- perror("getstring: ioctl");
- *s = 0;
- return;
- }
-
- USETW(req.ucr_request.wLength, us.bLength);
-
- if (ioctl(f, USB_REQUEST, &req) == -1){
- perror("getstring: ioctl");
- *s = 0;
- return;
- }
-
- n = us.bLength / 2 - 1;
- for (i = 0; i < n; i++) {
- c = UGETW(us.bString[i]);
- if ((c & 0xff00) == 0)
- *s++ = c;
- else if ((c & 0x00ff) == 0)
- *s++ = c >> 8;
- else {
- snprintf(s, 6, "\\u%04x", c);
- s += 6;
- }
- }
- *s++ = 0;
-}
-
-void
usbdump(int f)
{
int a;
@@ -297,7 +226,7 @@ main(int argc, char **argv)
if (dev == 0) {
for (ncont = 0, i = 0; i < 10; i++) {
snprintf(buf, sizeof buf, "%s%d", USBDEV, i);
- f = open(buf, O_RDWR);
+ f = open(buf, O_RDONLY);
if (f >= 0) {
dumpone(buf, f, addr);
close(f);
@@ -312,7 +241,7 @@ main(int argc, char **argv)
printf("%s: no USB controllers found\n",
__progname);
} else {
- f = open(dev, O_RDWR);
+ f = open(dev, O_RDONLY);
if (f >= 0)
dumpone(dev, f, addr);
else