Tags are semi-ok, error msg correct, security against exploration

This commit is contained in:
Thomas Schwery 2010-09-14 10:51:22 +02:00
parent 315ddffeb2
commit 65ba4893d4

View file

@ -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);