#!/usr/bin/perl # Aladdin eToken insertion/removal hotplug # This script has to be installed into /etc/hotplug/usb directory # It is called with ACTION and DEVICE passed as parameters # This script is responsible to connect eTokend daemon via socket and pass the command about # token insertion or removal. # Notes: # 1. The script does not check that the device is one of eToken devices. It was responsibility # of installation script to set it properly. Anyway, eTokend will ignore devices it do not # recognize. use Socket; #use Data::Dumper; open STDERR, ">> /var/log/etoken.log"; #print STDERR Dumper(\%ENV); # check environment die "Call with undefined environment is ignored" unless defined($ENV{"DEVNAME"}) && defined($ENV{"ACTION"}); $device = $ENV{"DEVNAME"}; $device =~ s/dev/proc/; # build request structure for insertion/removal $data_len = length($device) + 1; # one more for null-terminator $magic = 0x55AAAA55; $insert_token = 1; $remove_token = 2; $command = ($ENV{ACTION} eq "add") ? $insert_token : $remove_token; $data = pack("IIIIIIa" . $data_len, $magic, 0, 0, $command, $data_len, 0, $device); $socket_name = "/var/tmp/.etokend"; # open socket with eTokend socket (SOCK,PF_UNIX,SOCK_STREAM, 0) or die "socket: $!"; connect (SOCK, sockaddr_un($socket_name)) or die "connect $socket_name: $!"; print SOCK $data; close SOCK; exit 0;