#!/usr/bin/perl use Socket; #use Data::Dumper; open STDERR, ">> /var/log/etoken.log"; #print STDERR Dumper(\%ENV); # check environment # is hotplugging enabled in the kernel -> then we're not running udev $hotplug = `/sbin/sysctl kernel.hotplug`; chomp $hotplug; if ($hotplug =~ /kernel.hotplug = (\W+)/) { die "Call with undefined environment is ignored" unless defined($ENV{"DEVICE"}) && defined($ENV{"ACTION"}); $device = $ENV{"DEVICE"}; } else { 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;