Hello community, here is the log from the commit of package usbmuxd for openSUSE:Factory checked in at 2012-04-17 22:03:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/usbmuxd (Old) and /work/SRC/openSUSE:Factory/.usbmuxd.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "usbmuxd", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:Factory/usbmuxd/usbmuxd.changes 2012-01-25 11:09:37.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.usbmuxd.new/usbmuxd.changes 2012-04-17 22:04:35.000000000 +0200 @@ -1,0 +2,20 @@ +Mon Apr 16 11:30:54 UTC 2012 - [email protected] + +- license update: (GPL-2.0 or GPL-3.0) and LGPL-2.1+ + See README + +------------------------------------------------------------------- +Mon Apr 08 23:45:22 CEST 2012 - [email protected] + +- Update to version 1.0.8 + * Fix possible buffer overflow in libusbmuxd + * Fix detection for Apple TV 2 due to small interface detection bug + * Licensed common/utils.c and common/utils.h under LGPL + * Several bug fixes and improvements in libusbmuxd's device detection and + event handling code + * udev: Set owner to usbmux on device node to make it useable for usbmux user + * function usbmuxd_get_device_by_uuid has been renamed to + usbmuxd_get_device_by_udid + * usbmuxd_device_info_t member uuid been renamed to udid + +------------------------------------------------------------------- Old: ---- usbmuxd-1.0.7.tar.bz2 New: ---- usbmuxd-1.0.8.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ usbmuxd.spec ++++++ --- /var/tmp/diff_new_pack.85CD7U/_old 2012-04-17 22:04:36.000000000 +0200 +++ /var/tmp/diff_new_pack.85CD7U/_new 2012-04-17 22:04:36.000000000 +0200 @@ -18,13 +18,13 @@ Name: usbmuxd %define _libname libusbmuxd -Version: 1.0.7 +Version: 1.0.8 Release: 0 -Summary: Socket daemon for the usbmux protocol of iPhone/iPod Touch devices -License: LGPL-2.1 or GPL-2.0 +Summary: Socket daemon for the usbmux protocol used by Apple devices +License: (GPL-2.0 or GPL-3.0) and LGPL-2.1+ Group: System/Libraries -Url: http://git.marcansoft.com/?p=usbmuxd.git -Source: http://marcansoft.com/uploads/usbmuxd/%{name}-%{version}.tar.bz2 +Url: http://cgit.sukimashita.com/usbmuxd.git/ +Source: http://www.libimobiledevice.org/downloads/%{name}-%{version}.tar.bz2 BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: libplist-devel @@ -41,7 +41,7 @@ Usbmux is an encapsulation protocol (think IP, ATM, PPP) that allows multiplexing several conversations onto a single pair of wires. -%package -n %{_libname}1 +%package -n %{_libname}2 Summary: A library to abstract socket/protocol communication to the usbmuxd daemon Group: System/Libraries @@ -49,7 +49,7 @@ Provides: %{_libname} = %{version} Obsoletes: %{_libname} < %{version} -%description -n %{_libname}1 +%description -n %{_libname}2 This package contains the libusbmuxd library which provides an interface to talk to the usbmux daemon, create connections and list attached devices. @@ -105,15 +105,13 @@ %install cd build %{__make} install DESTDIR=%{buildroot} -# make sure the device gets owned by the usbmux user -sed -i 's@RUN+="/usr/sbin/usbmuxd -u -U usbmux"@OWNER="usbmux", RUN+="/usr/sbin/usbmuxd -u -U usbmux"@' %{buildroot}/lib/udev/rules.d/85-usbmuxd.rules %clean rm -rf %{buildroot} -%post -n %{_libname}1 -p /sbin/ldconfig +%post -n %{_libname}2 -p /sbin/ldconfig -%postun -n %{_libname}1 -p /sbin/ldconfig +%postun -n %{_libname}2 -p /sbin/ldconfig %files %defattr(-,root,root) @@ -121,7 +119,7 @@ %{_sbindir}/usbmuxd /lib/udev/rules.d/85-usbmuxd.rules -%files -n %{_libname}1 +%files -n %{_libname}2 %defattr(-,root,root) %{_libdir}/libusbmuxd.so.* ++++++ baselibs.conf ++++++ --- /var/tmp/diff_new_pack.85CD7U/_old 2012-04-17 22:04:36.000000000 +0200 +++ /var/tmp/diff_new_pack.85CD7U/_new 2012-04-17 22:04:36.000000000 +0200 @@ -1,2 +1,2 @@ usbmuxd -libusbmuxd1 \ No newline at end of file +libusbmuxd2 ++++++ usbmuxd-1.0.7.tar.bz2 -> usbmuxd-1.0.8.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/CMakeLists.txt new/usbmuxd-1.0.8/CMakeLists.txt --- old/usbmuxd-1.0.7/CMakeLists.txt 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/CMakeLists.txt 2012-04-08 00:50:09.000000000 +0200 @@ -8,7 +8,7 @@ set(USBMUXD_VERSION "${VERSION_TAG}") set(LIBUSBMUXD_VERSION "${VERSION_TAG}") -set(LIBUSBMUXD_SOVERSION "1") +set(LIBUSBMUXD_SOVERSION "2") message("-- Configuring usbmuxd v${VERSION_TAG}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/common/utils.c new/usbmuxd-1.0.8/common/utils.c --- old/usbmuxd-1.0.7/common/utils.c 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/common/utils.c 2012-04-08 00:50:09.000000000 +0200 @@ -4,17 +4,18 @@ Copyright (C) 2009 Hector Martin "marcan" <[email protected]> Copyright (C) 2009 Nikias Bassen <[email protected]> -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 or version 3. +This library is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation, either version 2.1 of the +License, or (at your option) any later version. -This program is distributed in the hope that it will be useful, +This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software +You should have received a copy of the GNU Lesser General Public +License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/common/utils.h new/usbmuxd-1.0.8/common/utils.h --- old/usbmuxd-1.0.7/common/utils.h 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/common/utils.h 2012-04-08 00:50:09.000000000 +0200 @@ -4,17 +4,18 @@ Copyright (C) 2009 Hector Martin "marcan" <[email protected]> Copyright (C) 2009 Nikias Bassen <[email protected]> -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 or version 3. +This library is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation, either version 2.1 of the +License, or (at your option) any later version. -This program is distributed in the hope that it will be useful, +This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software +You should have received a copy of the GNU Lesser General Public +License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/daemon/usb-linux.c new/usbmuxd-1.0.8/daemon/usb-linux.c --- old/usbmuxd-1.0.7/daemon/usb-linux.c 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/daemon/usb-linux.c 2012-04-08 00:50:09.000000000 +0200 @@ -352,15 +352,17 @@ usbmuxd_log(LL_WARNING, "Endpoint type mismatch for interface %d of device %d-%d", intf->bInterfaceNumber, bus, address); } } - libusb_free_config_descriptor(config); if(j == config->bNumInterfaces) { usbmuxd_log(LL_WARNING, "Could not find a suitable USB interface for device %d-%d", bus, address); + libusb_free_config_descriptor(config); libusb_close(handle); free(usbdev); continue; } + libusb_free_config_descriptor(config); + if((res = libusb_claim_interface(handle, usbdev->interface)) != 0) { usbmuxd_log(LL_WARNING, "Could not claim interface %d for device %d-%d: %d", usbdev->interface, bus, address, res); libusb_close(handle); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/libusbmuxd/libusbmuxd.c new/usbmuxd-1.0.8/libusbmuxd/libusbmuxd.c --- old/usbmuxd-1.0.7/libusbmuxd/libusbmuxd.c 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/libusbmuxd/libusbmuxd.c 2012-04-08 00:50:09.000000000 +0200 @@ -71,6 +71,7 @@ HANDLE devmon = NULL; #else pthread_t devmon; +pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; #endif static int listenfd = -1; @@ -189,7 +190,7 @@ char *strval = NULL; plist_get_string_val(n, &strval); if (strval) { - strcpy(dev->serial_number, strval); + strncpy(dev->serial_number, strval, 255); free(strval); } n = plist_dict_get_item(props, "LocationID"); @@ -410,7 +411,7 @@ static int usbmuxd_listen_inotify() { int inot_fd; - int watch_fd; + int watch_d; int sfd; sfd = connect_usbmuxd_socket(); @@ -421,15 +422,15 @@ inot_fd = inotify_init (); if (inot_fd < 0) { fprintf (stderr, "Failed to setup inotify\n"); - return -1; + return -2; } /* inotify is setup, listen for events that concern us */ - watch_fd = inotify_add_watch (inot_fd, USBMUXD_DIRNAME, IN_CREATE); - if (watch_fd < 0) { - fprintf (stderr, "Failed to setup watch for socket dir\n"); + watch_d = inotify_add_watch (inot_fd, USBMUXD_DIRNAME, IN_CREATE); + if (watch_d < 0) { + fprintf (stderr, "Failed to setup watch descriptor for socket dir\n"); close (inot_fd); - return -1; + return -2; } while (1) { @@ -456,7 +457,7 @@ } end: - close(watch_fd); + inotify_rm_watch(inot_fd, watch_d); close(inot_fd); return sfd; @@ -477,7 +478,7 @@ #ifdef HAVE_INOTIFY sfd = usbmuxd_listen_inotify(); - if (sfd < 0) + if (sfd == -2) sfd = usbmuxd_listen_poll(); #else sfd = usbmuxd_listen_poll(); @@ -526,6 +527,7 @@ FOREACH(usbmuxd_device_info_t *dev, &devices) { generate_event(callback, dev, UE_DEVICE_REMOVE, user_data); collection_remove(&devices, dev); + free(dev); } ENDFOREACH return -EIO; } @@ -546,8 +548,12 @@ devinfo->handle = dev->device_id; devinfo->product_id = dev->product_id; - memset(devinfo->uuid, '\0', sizeof(devinfo->uuid)); - memcpy(devinfo->uuid, dev->serial_number, sizeof(devinfo->uuid)); + memset(devinfo->udid, '\0', sizeof(devinfo->udid)); + memcpy(devinfo->udid, dev->serial_number, sizeof(devinfo->udid)); + + if (strcasecmp(devinfo->udid, "ffffffffffffffffffffffffffffffffffffffff") == 0) { + sprintf(devinfo->udid + 32, "%08x", devinfo->handle); + } collection_add(&devices, devinfo); generate_event(callback, devinfo, UE_DEVICE_ADD, user_data); @@ -563,8 +569,9 @@ } else { generate_event(callback, devinfo, UE_DEVICE_REMOVE, user_data); collection_remove(&devices, devinfo); + free(devinfo); } - } else { + } else if (hdr.length > 0) { fprintf(stderr, "%s: Unexpected message type %d length %d received!\n", __func__, hdr.message, hdr.length); } if (payload) { @@ -573,6 +580,14 @@ return 0; } +static void device_monitor_cleanup(void* data) +{ + collection_free(&devices); + + close_socket(listenfd); + listenfd = -1; +} + /** * Device Monitor thread function. * @@ -582,6 +597,9 @@ { collection_init(&devices); +#ifndef WIN32 + pthread_cleanup_push(device_monitor_cleanup, NULL); +#endif while (event_cb) { listenfd = usbmuxd_listen(); @@ -597,8 +615,11 @@ } } - collection_free(&devices); - +#ifndef WIN32 + pthread_cleanup_pop(1); +#else + device_monitor_cleanup(); +#endif return NULL; } @@ -631,17 +652,15 @@ { event_cb = NULL; + shutdown_socket(listenfd, SHUT_RDWR); + #ifdef WIN32 if (devmon != NULL) { - close_socket(listenfd); - listenfd = -1; WaitForSingleObject(devmon, INFINITE); } #else if (pthread_kill(devmon, 0) == 0) { - close_socket(listenfd); - listenfd = -1; - pthread_kill(devmon, SIGINT); + pthread_cancel(devmon); pthread_join(devmon, NULL); } #endif @@ -654,12 +673,15 @@ int sfd; int listen_success = 0; uint32_t res; + struct collection tmpdevs; usbmuxd_device_info_t *newlist = NULL; struct usbmuxd_header hdr; - struct usbmuxd_device_record *dev_info; + struct usbmuxd_device_record *dev; int dev_cnt = 0; void *payload = NULL; + *device_list = NULL; + #ifdef HAVE_PLIST retry: #endif @@ -695,32 +717,46 @@ return -1; } - *device_list = NULL; + collection_init(&tmpdevs); + // receive device list while (1) { if (receive_packet(sfd, &hdr, &payload, 1000) > 0) { if (hdr.message == MESSAGE_DEVICE_ADD) { - dev_info = payload; - newlist = (usbmuxd_device_info_t *) realloc(*device_list, sizeof(usbmuxd_device_info_t) * (dev_cnt + 1)); - if (newlist) { - newlist[dev_cnt].handle = - (int) dev_info->device_id; - newlist[dev_cnt].product_id = - dev_info->product_id; - memset(newlist[dev_cnt].uuid, '\0', - sizeof(newlist[dev_cnt].uuid)); - memcpy(newlist[dev_cnt].uuid, - dev_info->serial_number, - sizeof(newlist[dev_cnt].uuid)); - *device_list = newlist; - dev_cnt++; - } else { - fprintf(stderr, - "%s: ERROR: out of memory when trying to realloc!\n", - __func__); - if (payload) - free(payload); - break; + dev = payload; + usbmuxd_device_info_t *devinfo = (usbmuxd_device_info_t*)malloc(sizeof(usbmuxd_device_info_t)); + if (!devinfo) { + fprintf(stderr, "%s: Out of memory!\n", __func__); + free(payload); + return -1; + } + + devinfo->handle = dev->device_id; + devinfo->product_id = dev->product_id; + memset(devinfo->udid, '\0', sizeof(devinfo->udid)); + memcpy(devinfo->udid, dev->serial_number, sizeof(devinfo->udid)); + + if (strcasecmp(devinfo->udid, "ffffffffffffffffffffffffffffffffffffffff") == 0) { + sprintf(devinfo->udid + 32, "%08x", devinfo->handle); + } + + collection_add(&tmpdevs, devinfo); + + } else if (hdr.message == MESSAGE_DEVICE_REMOVE) { + uint32_t handle; + usbmuxd_device_info_t *devinfo = NULL; + + memcpy(&handle, payload, sizeof(uint32_t)); + + FOREACH(usbmuxd_device_info_t *di, &tmpdevs) { + if (di && di->handle == handle) { + devinfo = di; + break; + } + } ENDFOREACH + if (devinfo) { + collection_remove(&tmpdevs, devinfo); + free(devinfo); } } else { fprintf(stderr, "%s: Unexpected message %d\n", __func__, hdr.message); @@ -737,9 +773,19 @@ // explicitly close connection close_socket(sfd); - // terminating zero record - newlist = (usbmuxd_device_info_t*) realloc(*device_list, sizeof(usbmuxd_device_info_t) * (dev_cnt + 1)); - memset(newlist + dev_cnt, 0, sizeof(usbmuxd_device_info_t)); + // create copy of device info entries from collection + newlist = (usbmuxd_device_info_t*)malloc(sizeof(usbmuxd_device_info_t) * (collection_count(&tmpdevs) + 1)); + dev_cnt = 0; + FOREACH(usbmuxd_device_info_t *di, &tmpdevs) { + if (di) { + memcpy(&newlist[dev_cnt], di, sizeof(usbmuxd_device_info_t)); + free(di); + dev_cnt++; + } + } ENDFOREACH + collection_free(&tmpdevs); + + memset(&newlist[dev_cnt], 0, sizeof(usbmuxd_device_info_t)); *device_list = newlist; return dev_cnt; @@ -753,7 +799,7 @@ return 0; } -int usbmuxd_get_device_by_uuid(const char *uuid, usbmuxd_device_info_t *device) +int usbmuxd_get_device_by_udid(const char *udid, usbmuxd_device_info_t *device) { usbmuxd_device_info_t *dev_list = NULL; @@ -767,17 +813,17 @@ int i; int result = 0; for (i = 0; dev_list[i].handle > 0; i++) { - if (!uuid) { + if (!udid) { device->handle = dev_list[i].handle; device->product_id = dev_list[i].product_id; - strcpy(device->uuid, dev_list[i].uuid); + strcpy(device->udid, dev_list[i].udid); result = 1; break; } - if (!strcmp(uuid, dev_list[i].uuid)) { + if (!strcmp(udid, dev_list[i].udid)) { device->handle = dev_list[i].handle; device->product_id = dev_list[i].product_id; - strcpy(device->uuid, dev_list[i].uuid); + strcpy(device->udid, dev_list[i].udid); result = 1; break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/libusbmuxd/sock_stuff.c new/usbmuxd-1.0.8/libusbmuxd/sock_stuff.c --- old/usbmuxd-1.0.7/libusbmuxd/sock_stuff.c 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/libusbmuxd/sock_stuff.c 2012-04-08 00:50:09.000000000 +0200 @@ -321,6 +321,11 @@ return sret; } +int shutdown_socket(int fd, int how) +{ + return shutdown(fd, how); +} + int close_socket(int fd) { #ifdef WIN32 return closesocket(fd); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/libusbmuxd/sock_stuff.h new/usbmuxd-1.0.8/libusbmuxd/sock_stuff.h --- old/usbmuxd-1.0.7/libusbmuxd/sock_stuff.h 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/libusbmuxd/sock_stuff.h 2012-04-08 00:50:09.000000000 +0200 @@ -33,6 +33,13 @@ }; typedef enum fd_mode fd_mode; +#ifdef WIN32 +#include <winsock2.h> +#define SHUT_RD SD_READ +#define SHUT_WR SD_WRITE +#define SHUT_RDWR SD_BOTH +#endif + #ifndef WIN32 int create_unix_socket(const char *filename); int connect_unix_socket(const char *filename); @@ -43,6 +50,7 @@ #endif int check_fd(int fd, fd_mode fdm, unsigned int timeout); +int shutdown_socket(int fd, int how); int close_socket(int fd); int recv_buf(int fd, void *data, size_t size); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/libusbmuxd/usbmuxd.h new/usbmuxd-1.0.8/libusbmuxd/usbmuxd.h --- old/usbmuxd-1.0.7/libusbmuxd/usbmuxd.h 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/libusbmuxd/usbmuxd.h 2012-04-08 00:50:09.000000000 +0200 @@ -38,7 +38,7 @@ typedef struct { int handle; int product_id; - char uuid[41]; + char udid[41]; } usbmuxd_device_info_t; /** @@ -104,9 +104,9 @@ int usbmuxd_device_list_free(usbmuxd_device_info_t **device_list); /** - * Gets device information for the device specified by uuid. + * Gets device information for the device specified by udid. * - * @param uuid A device uuid of the device to look for. If uuid is NULL, + * @param udid A device UDID of the device to look for. If udid is NULL, * This function will return the first device found. * @param device Pointer to a previously allocated (or static) * usbmuxd_device_info_t that will be filled with the device info. @@ -114,7 +114,7 @@ * @return 0 if no matching device is connected, 1 if the device was found, * or a negative value on error. */ -int usbmuxd_get_device_by_uuid(const char *uuid, usbmuxd_device_info_t *device); +int usbmuxd_get_device_by_udid(const char *udid, usbmuxd_device_info_t *device); /** * Request proxy connect to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/python-client/.gitignore new/usbmuxd-1.0.8/python-client/.gitignore --- old/usbmuxd-1.0.7/python-client/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/usbmuxd-1.0.8/python-client/.gitignore 2012-04-08 00:50:09.000000000 +0200 @@ -0,0 +1,3 @@ +*.pyc +*.pyo + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/tools/iproxy.c new/usbmuxd-1.0.8/tools/iproxy.c --- old/usbmuxd-1.0.7/tools/iproxy.c 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/tools/iproxy.c 2012-04-08 00:50:09.000000000 +0200 @@ -192,7 +192,7 @@ return NULL; } - fprintf(stdout, "Requesting connecion to device handle == %d (serial: %s), port %d\n", dev_list[0].handle, dev_list[0].uuid, device_port); + fprintf(stdout, "Requesting connecion to device handle == %d (serial: %s), port %d\n", dev_list[0].handle, dev_list[0].udid, device_port); cdata->sfd = usbmuxd_connect(dev_list[0].handle, device_port); free(dev_list); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/udev/85-usbmuxd.rules.in new/usbmuxd-1.0.8/udev/85-usbmuxd.rules.in --- old/usbmuxd-1.0.7/udev/85-usbmuxd.rules.in 2011-03-15 12:35:15.000000000 +0100 +++ new/usbmuxd-1.0.8/udev/85-usbmuxd.rules.in 2012-04-08 00:50:09.000000000 +0200 @@ -1,7 +1,7 @@ -# usbmuxd (iPhone "Apple Mobile Device" MUXer listening on /var/run/usbmuxd) +# usbmuxd ("Apple Mobile Device" muxer listening on /var/run/usbmuxd) # Forces iDevices to the last USB configuration and runs usbmuxd -ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", ATTR{idProduct}=="12[9a][0-9a-f]", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}!="$attr{bNumConfigurations}", ATTR{bConfigurationValue}="$attr{bNumConfigurations}", RUN+="@CMAKE_INSTALL_PREFIX@/sbin/usbmuxd -u -U usbmux" +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", ATTR{idProduct}=="12[9a][0-9a-f]", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}!="$attr{bNumConfigurations}", ATTR{bConfigurationValue}="$attr{bNumConfigurations}", OWNER="usbmux", RUN+="@CMAKE_INSTALL_PREFIX@/sbin/usbmuxd -u -U usbmux" # Exit usbmuxd when the last device is removed ACTION=="remove", SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ENV{INTERFACE}=="255/*", RUN+="@CMAKE_INSTALL_PREFIX@/sbin/usbmuxd -x" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usbmuxd-1.0.7/version.tag new/usbmuxd-1.0.8/version.tag --- old/usbmuxd-1.0.7/version.tag 2011-03-22 10:12:35.000000000 +0100 +++ new/usbmuxd-1.0.8/version.tag 2012-04-08 01:04:07.000000000 +0200 @@ -1 +1 @@ -1.0.7 +1.0.8 -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
