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

Reply via email to