#!/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'");
### lol. I don't care about directory traversal. have fun.
#if(!( ($path =~ /^\/var\/gopher\//) or ($path =~ /^\/home\/[^\/]+\/public_gopher\//) or ($path =~/^\/home\/[^\/]+\/public_gopher$/)) ) {
# syslog("err|daemon","god: $rhost tried directory traversal '$request' '$path'");
# print "3cut it out.\t.\t.\t.\r\n.\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.\r\n";
exit 2;
}
print <FILE>;
close(FILE);