Tags are semi-ok, error msg correct, security against exploration
This commit is contained in:
parent
315ddffeb2
commit
65ba4893d4
1 changed files with 28 additions and 3 deletions
31
gopher.pl
31
gopher.pl
|
@ -36,6 +36,8 @@ die "Unable to open port: $! \n" unless $socket;
|
|||
|
||||
drop_privileges('nobody');
|
||||
|
||||
our %tags_entries;
|
||||
|
||||
while (1) {
|
||||
my $listen_socket = $socket->accept();
|
||||
my $thr = threads->create(\&connection_thread, $listen_socket);
|
||||
|
@ -50,18 +52,23 @@ sub connection_thread {
|
|||
my $directory = $_;
|
||||
|
||||
$directory =~ s/^blog\///;
|
||||
$directory =~ s/[.\/]//g;
|
||||
$directory = $basedir . "/" . $directory;
|
||||
$directory =~ s/\/$//;
|
||||
|
||||
if (-f $directory) {
|
||||
$listen_socket->send(send_blog_entry($directory));
|
||||
} else {
|
||||
my $header = generate_header($directory);
|
||||
my $blog_entries = list_blog_entries($directory);
|
||||
my $tags_entries = list_entries_by_tag($directory);
|
||||
|
||||
$listen_socket->send($header . "\r\n");
|
||||
$listen_socket->send("\r\n");
|
||||
$listen_socket->send("i----- Blog entries ---------------\tfake\tfake\t0\r\n");
|
||||
$listen_socket->send($blog_entries . "\r\n");
|
||||
$listen_socket->send("i----- Blog entries by tags---------------\tfake\tfake\t0\r\n");
|
||||
$listen_socket->send($tags_entries . "\r\n");
|
||||
$listen_socket->send("\r\n.\r\n");
|
||||
}
|
||||
|
||||
|
@ -82,7 +89,7 @@ sub generate_header {
|
|||
$message .= "i" . $_ . "\tfake\tfake\t0\r\n";
|
||||
}
|
||||
close FILE;
|
||||
$message .= "0About this gopher server\theader\tlocalhost\t" . $port . "\r\n";
|
||||
$message .= "0About this gopher server\theader\t" . $server . "\t" . $port . "\r\n";
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
@ -107,7 +114,7 @@ sub filter_content {
|
|||
sub list_blog_entries {
|
||||
my ($blog_dir) = @_;
|
||||
unless (opendir(IMD, $blog_dir)) {
|
||||
die("Fuck you all ...");
|
||||
die("Requested file or directory not readable : $blog_dir ");
|
||||
}
|
||||
my @files = readdir(IMD);
|
||||
closedir(IMD);
|
||||
|
@ -119,11 +126,23 @@ sub list_blog_entries {
|
|||
return join("\r\n", @files);
|
||||
}
|
||||
|
||||
sub list_entries_by_tag {
|
||||
my $entries;
|
||||
foreach my $tag (sort keys %tags_entries) {
|
||||
$entries .= "i----- " . $tag . " ---------------\tfake\tfake\t0\r\n";
|
||||
foreach my $entry ($tags_entries{$tag}) {
|
||||
my ($entry_dir, $entry_name) = split '/',$entry;
|
||||
$entries .= map_blog_entry($entry_name, $entry_dir) . "\r\n";
|
||||
}
|
||||
}
|
||||
return $entries;
|
||||
}
|
||||
|
||||
sub sort_entry_line {
|
||||
my $a_date = $2 if ($a =~ m/^0(\[.*\]\s)?(.*?)\s*-.*$/);
|
||||
my $b_date = $2 if ($b =~ m/^0(\[.*\]\s)?(.*?)\s*-.*$/);
|
||||
|
||||
return str2time($a_date) <=> str2time($b_date);
|
||||
return -(str2time($a_date) <=> str2time($b_date));
|
||||
}
|
||||
|
||||
sub read_entry_file {
|
||||
|
@ -141,6 +160,12 @@ sub read_entry_file {
|
|||
}
|
||||
close ENTRY;
|
||||
|
||||
my @tag_list = split ',',$tags;
|
||||
|
||||
foreach my $tag (@tag_list) {
|
||||
$tags_entries{$tag} = $entry_file;
|
||||
}
|
||||
|
||||
my $time = str2time($date_file);
|
||||
my $date = time2str("%o %h %Y", $time);
|
||||
return "[" . $tags . "] " . $date . " - " . $subject if($tags);
|
||||
|
|
Reference in a new issue