#!/usr/bin/perl
#
# $Revision: 3.1 $ $Date: 2025-08-19 04:00:05-04 $
# $Source: /home/vogelke/projects/autoindex/local-cgi/perl/RCS/autoindex,v $
# $Host: furbag.my.domain $
# $UUID: 64a713ce-9818-5925-b57e-b776c17aba43 $
#
#<autoindex: generate an index if all else fails.

use Modern::Perl;
use File::Basename;
use CGI::Carp qw(fatalsToBrowser);
use POSIX qw(strftime);
use Cwd;

my $myname = basename($0);
$myname =~ s/\.\w*$//;    # strip any extension

# Hardcoded default display script.

my $defdisplay = '/doc/html/cgi-bin/dirindex';

# Current time.

my $top    = $ENV{'DOCUMENT_ROOT'} . $ENV{'REQUEST_URI'};
my $dir    = $ENV{'REQUEST_URI'};
my $status = 'OK';
my $ok     = 1;
my $str    = '';

# Sensible working directory.

if (-d "$top") {
    unless (chdir($top)) {
        $status = "$top: cannot cd: $!";
        $ok     = 0;
    }
}
else {
    $ok     = 0;
    $status = "$top not a directory";
}

# We may want a different directory handler depending on where we are.
# Look for an ".autoindex" file; do this BEFORE we print any header stuff.
# If we don't find ".autoindex", assume we want a basic directory index
# and exec "dirindex".

my $fh;
if (open($fh, '<', ".autoindex") || open($fh, '<', "../.autoindex")) {
    chomp($str = <$fh>);
    close($fh);
}
else {
    $str = $defdisplay;
}

# These two environment variables keep their values across exec(),
# so fix them.
$ENV{'SCRIPT_FILENAME'} = $str;
$ENV{'SCRIPT_NAME'} = $str;
$ENV{'SCRIPT_NAME'} =~ s!^/doc/html!!;

exec ("$str") or print "couldn't exec $str: $!";
exit(0);
