diff options
Diffstat (limited to 'lib/Apache/Inject/Handler.pm')
-rw-r--r-- | lib/Apache/Inject/Handler.pm | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/lib/Apache/Inject/Handler.pm b/lib/Apache/Inject/Handler.pm deleted file mode 100644 index ae81fbb..0000000 --- a/lib/Apache/Inject/Handler.pm +++ /dev/null @@ -1,90 +0,0 @@ -package Apache::Inject::Handler; - -use 5.010000; -use strict; - -use mod_perl2; -use Apache2::Const qw/OK DECLINED/; -use Apache2::Log (); -use Apache2::RequestRec (); -use Apache2::RequestUtil (); - -my $doc = qr{ - \A - (?<head> \s* - ( <!-- .*? --> )? \s* - ( <!doctype[^>]*> )? \s* - ( <!-- .*? --> )? \s* - ( <html[^>]*> )? \s* - ( <!-- .*? --> )? \s* - ( <head[^>]*> .*? </head> \s* - | ( <meta[^>]*> \s* - | <link[^>]*> \s* - | <title[^>]*> .*? </title> \s* - | <style[^>]*> .*? </style> \s* - | <script[^>]*> .*? </script> \s* - | <base[^>]*> \s* - | <!-- .*? --> \s* - )+ - )? - ( <!-- .*? --> )? \s* - ( <body[^>]*> )? \s* - )? - (?<body> .*? ) - (?<rest> </html> \s* - ( <!-- .*? --> )? \s* - )? - \z -}xmsi; - -sub handler { - my $r = shift; - - return DECLINED if not $r->content_type eq 'text/html'; - - my $content = ${$r->slurp_filename}; - return DECLINED if not $content =~ /$doc/; - - if (not $r->document_root) { - $r->warn('Inject: Declining request due to empty document root'); - return DECLINED; - } - - print $+{head} if $+{head}; - inject($r, "InjectHead"); - print $+{body} if $+{body}; - inject($r, "InjectFoot"); - print $+{rest} if $+{rest}; - - return OK; -} - -sub inject { - my ($r, $var) = @_; - - # Retrieve value implicitly set by Inject directive - return if not (my $val = $r->dir_config($var)); - return if $val eq '-'; # special value signifying absence of argument - - # Validate path - if ($val =~ m{^/}) { - $r->log_error("Inject: $var should not begin with slash, as it is already always relative to document root"); - } - if ($val =~ m{^../|/../|/..$}) { - $r->log_error("Inject: $var cannot extend past document root"); - return; - } - - # note: document root has been confirmed not to be empty - my $root = $r->document_root; - - # Read contents of specified file - open my $fh, '<', "$root/$val" or do { - $r->log_error("Inject: $var $root/$val does not exist"); - return; - }; - print for <$fh>; - close $fh; -} - -1; |