/usr/local/CPAN/HTML-EP/Apache/EP.pm


# -*- perl -*-
#
#   HTML::EP	- A Perl based HTML extension.
#
#
#   Copyright (C) 1998    Jochen Wiedmann
#                         Am Eisteich 9
#                         72555 Metzingen
#                         Germany
#
#                         Phone: +49 7123 14887
#                         Email: joe@ispsoft.de
#
#   All rights reserved.
#
#   You may distribute this module under the terms of either
#   the GNU General Public License or the Artistic License, as
#   specified in the Perl README file.
#
############################################################################

require 5.004;
use strict;


use Apache ();
use DBI ();
use HTML::EP ();
use Symbol ();

# Pull in HTML::EP and the helper packages
use HTML::EP ();
use HTML::EP::Locale ();
use HTML::EP::Session ();


package Apache::EP;

$Apache::EP::VERSION = '0.1003';

my $Is_Win32 = $^O eq "MSWin32";


sub handler ($$) {
    my($class, $r) = @_;
    if(ref $r) {
	$r->request($r);
    } else {
	$r = Apache->request;
    }
    my $filename = $r->filename;
    local $^W;

    if (($r->allow_options() & Apache::Constants::OPT_EXECCGI())  ==  0) {
	$r->log_reason("Options ExecCGI is off in this directory",
		       $filename);
	return Apache::Constants::FORBIDDEN();
    }
    if (!-r $filename  ||  !-s _) {
	$r->log_reason("File not found", $filename);
	return Apache::Constants::NOT_FOUND();
    }
    if (-d _) {
	$r->log_reason("attempt to invoke directory as script", $filename);
	return Apache::Constants::FORBIDDEN();
    }

    $r->chdir_file($filename);
    $r->cgi_env('PATH_TRANSLATED' => $filename);
    local $SIG{'__WARN__'} = \&HTML::EP::WarnHandler;
    my $self = HTML::EP->new();
    $self->{'_ep_r'} = $r;
    $r->no_cache(1);
    $self->CgiRun($filename, $r);
    return Apache::Constants::OK();
}


1;