3 # Contributed by Bastiaan Bakker for SOCKETMAP
4 # $Id: socketmapServer.pl,v 1.1 2003-05-21 15:36:33 ca Exp $
9 die "usage: $0 <connection>" if (@ARGV < 1);
10 my $connection = shift @ARGV;
13 if ($connection =~ /tcp:(.+):([0-9]*)/) {
14 $sock = new IO::Socket::INET (
21 } elsif ($connection =~ /((unix)|(local)):(.+)/) {
23 $sock = new IO::Socket::UNIX (
29 die "unrecognized connection specification $connection";
32 while(my $client = $sock->accept()) {
33 my $childpid = fork();
37 die "can't fork $!" unless defined($childpid);
39 handleConnection($client);
47 sub handleConnection {
49 $client->autoflush(1);
51 while(!eof($client)) {
53 my $request = netstringRead($client);
54 my ($mapName, $key) = split(' ', $request);
55 my $value = mapLookup($mapName, $key);
56 my $result = (defined($value)) ? "OK $value" : "NOTFOUND";
57 netstringWrite($client, $result);
67 my %mapping = ('bastiaan.bakker@example.com' => 'bastiaan',
68 'wolter.eldering@example.com' => 'wolter@other.example.com');
71 my $value = ($mapName eq "virtuser") ? $mapping{$key} : undef;
79 print $sock length($data).':'.$data.',';
84 my $saveSeparator = $/;
86 my $dataLength = <$sock>;
87 die "cannot read netstring length" unless defined($dataLength);
90 if ($sock->read($data, $dataLength) == $dataLength) {
91 ($sock->getc() eq ',') or die "data misses closing ,";
93 die "received only ".length($data)." of $dataLength bytes";