#!/usr/bin/perl
# RedFox! Productions: DirList
# All coding done by one Ranna Fox
use rfp;
use strict;
use CGI qw( :standard );
my $r = new rfp;
my $file = param('d') || "prefix/";
$r->print_start("RF!P::DL->($file);");
if ($file =~ /^\//) {
print "Ahem...you may not list files with absolute paths. Especially not that absolute path\n";
$r->print_end;
exit;
} elsif ($file =~ /\.\./) {
print "'Scuse me, I won't list directories with .. in their path. Better fix that.\n";
$r->print_end;
exit;
} elsif (not $file =~ /^prefix\//) {
print "See, the way things work is that if you're gonna list a directory, you gotta put a 'prefix/' before it, which means it has to be in my directory.\n";
$r->print_end;
exit;
}
my $filen;
($filen = $file) =~ s{^prefix/}{/home/admin/ranna/public_html/};
if (not -d $filen) {
print "That...uh...doesn't appear to exist... o.O\n";
$r->print_end;
exit;
}
&parse_dir($filen, $file);
sub parse_dir {
my $dir = $_[0];
my $req = $_[1];
opendir(PARSEDIR, "$dir") || die "Couldn't open directory $dir: $!\n";
my $currdir;
$dir =~ s/(.*)\/$/$1/;
($currdir = $dir) =~ s{.*/([^/]*)$}{$1};
print "$currdir/\n\n";
foreach my $file (readdir(PARSEDIR)) {
my $fullname = $dir . "/" . $file;
next if ($file =~ /^\..*/ || ! -r $fullname);
if (-d $fullname) {
$req = $req . "/" . $file;
&parse_dir($fullname, $req);
} else {
my $dirn;
($dirn = $dir) =~ s{/home/admin/ranna/public_html}{};
print "- [Bare link]";
if (-T $fullname) {
print "[Online]";
} else {
print "[Download]";
}
print " - $file
\n";
}
}
closedir(PARSEDIR);
print "
\n";
}
$r->print_end;