package Apache::FakeSSI; use strict; use vars qw(@ISA); use Apache::Constants qw(:common OPT_INCNOEXEC OPT_INCLUDES); use Symbol; @ISA = qw(Apache::SSI); sub ssi_include { my ($self, $args) = @_; unless (exists $args->{file} or exists $args->{virtual}) { return $self->error("No 'file' or 'virtual' attribute found in SSI 'include' tag"); } my $subr = $self->find_file($args); my $fh = gensym; open $fh, $subr->filename or return $self->error("Can't open file '@{[$subr->filename()]}' for include"); if ($subr->allow_options & OPT_INCLUDES) { do {local $/=undef; $self->new( scalar(<$fh>), $subr )}->output; } else { $self->{_r}->send_fd($fh); } close $fh; return ''; } sub ssi_exec { my($self, $args) = @_; #XXX did we check enough? my $r = $self->{_r}; my $filename = $r->filename; if ($r->allow_options & OPT_INCNOEXEC) { $self->error("httpd: exec used but not allowed in $filename"); return ""; } return scalar `$args->{cmd}` if exists $args->{cmd}; unless (exists $args->{cgi}) { $self->error("No 'cmd' or 'cgi' argument given to #exec"); return ''; } # Okay, we're doing