#!/usr/bin/env perl
use Cwd 'abs_path';
use Sys::Syslog;
use Socket qw(:addrinfo getnameinfo);
$|=1;
alarm(10);
my $request=<>;
alarm(0);
$request =~ s/[\r\n]//g;
chdir("/var/gopher");
my $path=abs_path("./$request");
$path="/var/gopher/" if $path eq "/var/gopher";
my $peer = getpeername(STDIN);
my ($err, $rhost, $rport) = getnameinfo($peer, NI_NUMERICHOST);
syslog("info|daemon","god: connection from $rhost.$rport requesting '$request'");
if(!($path =~ /^\/var\/gopher\//)) {
       syslog("err|daemon","god: $rhost tried directory traversal '$request' '$path'");
       print "3cut it out.\t.\t.\t.\r\n";
       exit 1;
}
$path.="/map" if -d $path;
if(!open(FILE, "<$path")){
       syslog("err|daemon","god: $rhost request could not be found '$request' '$path'");
       print "3not found.\t.\t.\t.\r\n";
       exit 2;
}
print <FILE>;
close(FILE);