From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Just Keijser Date: Thu, 05 Apr 2007 09:24:08 +0000 Subject: Re: Fedora Core 5, Aladdin eToken PRO32 and udev hotplug Message-Id: <4614C038.70307@nikhef.nl> List-Id: References: <46092CC9.9000106@nikhef.nl> In-Reply-To: <46092CC9.9000106@nikhef.nl> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: linux-hotplug@vger.kernel.org hi all, just for the record: I finally managed to figure out what goes wrong.=20 It's a nice catch-22 : - etoken usb stick is inserted - udev calls etoken.hotplug script based on rule BUS=3D"usb",=20 SUBSYSTEM=3D"usb" - etoken.hotplug script sends a message to the etokend deamon - the etokend daemon wants to talk to the etoken stick using the 'char'=20 device /dev/bus/usb/XXX:YYY to enable the device - however, the char device is not created until after the etoken.hotplug=20 finishes ... catch-22! the workaround is to change the udev 'add' rule to call the=20 etoken.hotplug script *after* the char device has been created by udev. =20 This means that instead of matching on ACTION=3D"add", BUS=3D"usb", SUBSYSTEM=3D"usb", \ I am now matching on ACTION=3D"add", SUBSYSTEM=3D"usb_device", \ and I can happily insert and remove the etoken stick over and over and=20 over ;-) cheers, Jan Just Keijser System Integrator NIKHEF Amsterdam Jan Just Keijser wrote: > hi all, > > I've got a weird problem with the udev-way of hotplugging things.=20 > here's my setup. It's a bit long, so please bear with me ;-) > - Fedora Core 5, kernel 2.6.20, i686 > - udev-084-13.fc5.2 (FC5 default) > - Aladdin eToken PRO32 with CardOS 4.21 (*NOT* recognized by=20 > OpenCT/OpenSC); this is a USB stick that acts as a smart card for=20 > storing certificates, private keys etc etc. > - Aladdin RTE 3.65 eToken software (binaries only). > > Here's what happens: > The RTE eToken software installs a daemon, /usr/local/sbin/etokend,=20 > which listens on a UNIX socket /var/tmp/.etoken > It also installs a perl script > /etc/hotplug.d/usb/etoken.hotplug > which you're suppose to call when an eToken is inserted or removed;=20 > the Perl script talks to the etokend daemon using the /var/tmp/.etoken=20 > UNIX socket. > This mechanism works fine on CentOS 4 , with the older 'hotplug'=20 > mechanism installed. I can plug the token in and out as many times as=20 > I like, and it will be recognized every time. > > With FC5 and udev, things get hairier: first , I added a rule in > /etc/udev/rules.d/20-etoken.rules > --- > # add rule > ACTION=3D"add", BUS=3D"usb", SUBSYSTEM=3D"usb", \ > SYSFS{idVendor}=3D"0529", SYSFS{idProduct}=3D"0600", \ > RUN=3D"/etc/hotplug.d/usb/etoken.hotplug" > --- > > to make sure the Perl thingie is called when I plug in a token. I've=20 > added debug statements to the etoken.hotplug script and can see that=20 > it is actually being called when I plug in the token (not when I=20 > remove it, however). > > First gripe: how do I add a rule to call the same script when the=20 > token in unplugged? When the token is unplugged the SYSFS vars seem to=20 > be gone.... so how do I create a rule that matches this usb device only? > > The script is called, and the very first time I insert the token, it=20 > works. Yippee for udev! > However... if I switch tokens, or take it out and put it back in a=20 > couple of times, then sooner or later it will no longer be recognized. > I did some tracing and digging and am now stuck: > - calling the /etc/hotplug.d/usb/etoken.hotplug by hand *ALWAYS*=20 > causes the thing to come up, e.g. > # ACTION=ADd DEVICE=3D/proc/bus/usb/001/003=20 > /etc/hotplug.d/usb/etoken.hotplug > works > - calling the script from within the udev rules file causes it to=20 > sometimes work and sometimes not. > - if I stick 'socat' in between the hotplug script and the etokend=20 > daemon I can see what data is sent to the etokend daemon. It's the=20 > same from the command line as it is from within the udev framework.=20 > Also, with 'socat' in the middle it seems to always work from the=20 > commandline and merely sometimes from within the udev framework > - the same script works fine on a CentOS4 box (kernel 2.6.9,=20 > hotplug-2004_04_01-7.7) > > Of course, I'd like the eToken to be recognized by the OS without user=20 > intervention... > So the big question for me is: what's so different about how scripts=20 > are called from within the udev manager vs calling them from the=20 > commandline? I've checked all environment variables and tried to=20 > mimick the 'udev' env var set as much as possible on the command line=20 > (e.g. no PATH, MANPATH, LANG, LC_ALL etc etc) but on the command-line,=20 > the script always works... > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=3Djoin.php&p=3Dsourceforge&CID=DEVD= EV _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel