Dear list, I'm seeing a problem similar to Marti: With card reader names that are already long, like the "SCM Microsystems, Inc. SCR3340 - ExpressCard54 Smart Card Reader" I just plugged into my new laptop, the code in hotplug_libudev.c that optionally adds interface and serial number to the name may cause that name to become too long as compared to MAX_READERNAME, and thereby make RFAddReader reject it.
The obvious brute-force solution I tried was to raise MAX_READERNAME from 100 to 128 in /usr/include/PCSC/pcsclite.h. That worked, but that's only safe if one can recompile every single dependency in one's system. I tried it just to prove that that was all that was wrong here. I considered undefining the #ifdefs that guard the addition of interface and serial, but I figured there must be a good reason for them to be on in the first place (uniqueness, probably), so I didn't dare suggest that. However, unless this newbie is gravely naive, I see no reason for the interface name to be called "XXXX *Interface*" since it's clear that is is an interface, it's probably not wise to try and parse that string anyway, and if we do.. the interface strings should be known and not resemble a serial number. Since I needed only 5 characters less, I decided to remove anything after a space in the interface name (see patch below), thus gaining 9 characters and falling within the standard setting in the headers.. Instead of adding "[CCID Interface]", now only [CCID] is added to the name. It might help to generalize this, think about how to keep the name as short as possible and still have uniqueness even with identical readers.. Not trivial, in a free-form string, but apparently necessary.. smart card reader driver name and version *ccid-1.4.6-2* pcsc-lite version *1.8.3-4* smart card reader name *04e6:5119 SCM Microsystems, Inc. SCR3340 - ExpressCard54 Smart Card Reader* the output of the command "|/usr/sbin/pcscd --version| ||*pcsc-lite version 1.8.3.* *Copyright (C) 1999-2002 by David Corcoran <[email protected]>.* *Copyright (C) 2001-2011 by Ludovic Rousseau <[email protected]>.* *Copyright (C) 2003-2004 by Damien Sauveron <[email protected]>.* *Report bugs to <[email protected]>.* *Enabled features: Linux x86_64-unknown-linux-gnu serial usb libudev usbdropdir=/usr/lib/pcsc/drivers ipcdir=/var/run/pcscd configdir=/usr/etc/reader.conf.d* Operating system name and version *Arch GNU/Linux 2012.06.10* (release 2011.08.19, updated weekly) Smart card middleware name and version *community/pcsclite 1.8.3-4 [installed]* * PC/SC Architecture smartcard middleware library* Reader manufacturer name and reader model name *SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader* Smart card name *N/A* _*Log before patch: failure*_ 00000000 debuglog.c:269:DebugLogSetLevel() debug level=debug 00000073 debuglog.c:298:DebugLogSetCategory() Debug options: APDU 00000203 configfile.l:245:DBGetReaderListDir() Parsing conf directory: /etc/reader.conf.d 00000037 configfile.l:257:DBGetReaderListDir() Skipping non regular file: . 00000006 configfile.l:257:DBGetReaderListDir() Skipping non regular file: .. 00000013 configfile.l:298:DBGetReaderList() Parsing conf file: /etc/reader.conf.d/libccidtwin 00000115 pcscdaemon.c:518:main() pcsc-lite 1.8.3 daemon ready. 00002750 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/001/001 00000233 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/001/001 00000177 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/001/002 00000124 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/003/001 00000115 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0003, path: /dev/bus/usb/004/001 00000096 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/002/001 00000065 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/002/001 00000148 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 00000239 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x187C, PID: 0x0515, path: /dev/bus/usb/002/006 00000204 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x187C, PID: 0x0515, path: /dev/bus/usb/002/006 00000360 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x187C, PID: 0x0515, path: /dev/bus/usb/002/006 00000196 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 00000167 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x04E6, PID: 0x5119, path: /dev/bus/usb/002/003 00000019 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x04E6, PID: 0x5119, path: /dev/bus/usb/002/003 00000004 hotplug_libudev.c:311:HPAddDevice() Adding USB device: SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader* 00000036 readerfactory.c:126:RFAddReader() Reader name too long: 97 chars instead of max 93 00000004 hotplug_libudev.c:379:HPAddDevice() Failed adding USB device: SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader* 00000079 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 00000083 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x05CA, PID: 0x181A, path: /dev/bus/usb/002/004 00000076 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x05CA, PID: 0x181A, path: /dev/bus/usb/002/004 00000075 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 00000167 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x187C, PID: 0x0518, path: /dev/bus/usb/002/005 00000157 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 _*patch:*__*truncate interface name at first space*_ Index: src/hotplug_libudev.c =================================================================== --- src/hotplug_libudev.c (revision 6347) +++ src/hotplug_libudev.c (working copy) @@ -348,8 +348,19 @@ /* interface name from the device (if any) */ if (sInterfaceName) { + /* attempt to make the fullName shorter by removing the word "Interface" + from the interface name */ + char shortenedInterfaceName[64]; + strncpy(shortenedInterfaceName,sInterfaceName,sizeof(shortenedInterfaceName)-1); + char* firstSpaceInInterfaceName=strchr(shortenedInterfaceName,' '); + if(firstSpaceInInterfaceName!=NULL) + { + *firstSpaceInInterfaceName='\0'; + Log3(PCSC_LOG_INFO,"Shortened interface name from [%s] to [%s]",sInterfaceName,shortenedInterfaceName); + } + strlcat(fullname, " [", sizeof(fullname)); - strlcat(fullname, sInterfaceName, sizeof(fullname)); + strlcat(fullname, shortenedInterfaceName, sizeof(fullname)); strlcat(fullname, "]", sizeof(fullname)); } _*Log after patch: success*_ 00000000 debuglog.c:269:DebugLogSetLevel() debug level=debug 00000073 debuglog.c:298:DebugLogSetCategory() Debug options: APDU 00000202 configfile.l:298:DBGetReaderList() Parsing conf file: /usr/etc/reader.conf.d 00000025 pcscdaemon.c:518:main() pcsc-lite 1.8.3 daemon ready. 00003061 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/001/001 00000194 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/001/001 00000192 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/001/002 00000279 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/003/001 00000278 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0003, path: /dev/bus/usb/004/001 00000248 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/002/001 00000236 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/002/001 00000084 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 00000051 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x187C, PID: 0x0515, path: /dev/bus/usb/002/006 00000047 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x187C, PID: 0x0515, path: /dev/bus/usb/002/006 00000090 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x187C, PID: 0x0515, path: /dev/bus/usb/002/006 00000053 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 00000049 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x04E6, PID: 0x5119, path: /dev/bus/usb/002/003 00000028 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x04E6, PID: 0x5119, path: /dev/bus/usb/002/003 00000002 hotplug_libudev.c:311:HPAddDevice() Adding USB device: SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader *00000025 hotplug_libudev.c:359:HPAddDevice() Shortened interface name from [CCID Interface] to [CCID]* 00000009 readerfactory.c:935:RFInitializeReader() Attempting startup of SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader [CCID] (21220949C01025) 00 00 us 00000091 readerfactory.c:825:RFBindFunctions() Loading IFD Handler 3.0 00000015 ifdhandler.c:1768:init_driver() Driver version: 1.4.6 00000255 ifdhandler.c:1785:init_driver() LogLevel: 0x0003 00000003 ifdhandler.c:1796:init_driver() DriverOptions: 0x0000 00000044 ifdhandler.c:1809:init_driver() LogLevel from LIBCCID_ifdLogLevel: 0x000F 00000003 ifdhandler.c:83:CreateChannelByNameOrChannel() Lun: 0, device: usb:04e6/5119:libudev:0:/dev/bus/usb/002/003 00000004 ccid_usb.c:180:OpenUSBByName() Reader index: 0, Device: usb:04e6/5119:libudev:0:/dev/bus/usb/002/003 00000009 ccid_usb.c:212:OpenUSBByName() interface_number: 0 00000211 ccid_usb.c:245:OpenUSBByName() ifdManufacturerString: Ludovic Rousseau ([email protected]) 00000003 ccid_usb.c:246:OpenUSBByName() ifdProductString: Generic CCID driver 00000002 ccid_usb.c:247:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later 00000586 ccid_usb.c:365:OpenUSBByName() Checking device: 2/3 00000003 ccid_usb.c:420:OpenUSBByName() Trying to open USB bus/device: 2/3 00000059 ccid_usb.c:509:OpenUSBByName() Found Vendor/Product: 04E6/5119 (SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader) 00000002 ccid_usb.c:511:OpenUSBByName() Using USB bus/device: 2/3 00000002 ccid_usb.c:1029:ControlUSB() request: 0x03 00000407 ccid_usb.c:1042:ControlUSB() control failed (2/3): -9 Success 00000020 ccid_usb.c:973:get_data_rates() IFD does not support GET_DATA_RATES request: -9 00004116 ccid_usb.c:1078:InterruptRead() before (0) 00011728 ccid_usb.c:1120:InterruptRead() after (0) (0) 00000022 NotifySlotChange: 50 02 00000022 -> 000000 65 00 00 00 00 00 00 00 00 00 00000545 <- 000000 81 00 00 00 00 00 00 02 00 01 00000034 ifdhandler.c:353:IFDHGetCapabilities() tag: 0xFB3, usb:04e6/5119:libudev:0:/dev/bus/usb/002/003 (lun: 0) 00000008 readerfactory.c:294:RFAddReader() Using the reader polling thread 00000006 ifdhandler.c:1631:IFDHICCPresence() usb:04e6/5119:libudev:0:/dev/bus/usb/002/003 (lun: 0) 00000009 -> 000000 65 00 00 00 00 00 01 00 00 00 00000510 <- 000000 81 00 00 00 00 00 01 02 00 01 00000016 ifdhandler.c:1749:IFDHICCPresence() Card absent 00000121 ifdhandler.c:353:IFDHGetCapabilities() tag: 0xFAE, usb:04e6/5119:libudev:0:/dev/bus/usb/002/003 (lun: 0) 00000014 ifdhandler.c:441:IFDHGetCapabilities() Reader supports 1 slot(s) 00000049 ifdhandler.c:1631:IFDHICCPresence() usb:04e6/5119:libudev:0:/dev/bus/usb/002/003 (lun: 0) 00000035 -> 000000 65 00 00 00 00 00 02 00 00 00 00000263 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 00000266 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x05CA, PID: 0x181A, path: /dev/bus/usb/002/004 00000158 <- 000000 81 00 00 00 00 00 02 02 00 01 00000027 ifdhandler.c:1749:IFDHICCPresence() Card absent 00000009 ifdhandler.c:1631:IFDHICCPresence() usb:04e6/5119:libudev:0:/dev/bus/usb/002/003 (lun: 0) 00000015 -> 000000 65 00 00 00 00 00 03 00 00 00 00000058 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x05CA, PID: 0x181A, path: /dev/bus/usb/002/004 00000162 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 00000212 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x187C, PID: 0x0518, path: /dev/bus/usb/002/005 00000137 <- 000000 81 00 00 00 00 00 03 02 00 01 00000031 ifdhandler.c:1749:IFDHICCPresence() Card absent 00000009 ifdhandler.c:282:IFDHPolling() usb:04e6/5119:libudev:0:/dev/bus/usb/002/003 (lun: 0) 600000 ms 00000006 ccid_usb.c:1078:InterruptRead() before (0) 00000026 hotplug_libudev.c:260:get_driver() Looking for a driver for VID: 0x8087, PID: 0x0024, path: /dev/bus/usb/002/002 WKR, Frank.
_______________________________________________ Muscle mailing list [email protected] http://lists.drizzle.com/mailman/listinfo/muscle
