From 0dee415b1a371573e705c18f09e70c555845e428 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Fri, 27 Jul 2007 18:36:22 +0000 Subject: [PATCH] clean up CGI environment parsing When parsing PATH_TRANSLATED, put results in SCRIPT_* variables. Create additional PLP_* vars only later. This makes both cases result in the same intermediate state, and therefor easier to follow. --- PLP/CGI.pm | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/PLP/CGI.pm b/PLP/CGI.pm index 2056af9..ee81b37 100644 --- a/PLP/CGI.pm +++ b/PLP/CGI.pm @@ -11,9 +11,10 @@ sub init { $PLP::print = 'print'; if (defined $ENV{PATH_TRANSLATED}) { - # Physical mapping provided; SCRIPT_* points to handler script - # (Apache action) - my $path = delete $ENV{PATH_TRANSLATED}; + # SCRIPT_* points to handler script (Apache CGI) + # Run backwards through PATH_TRANSLATED to find target filename, + # then get file (relative) by stripping PATH_INFO. + my ($path, $rel) = (delete $ENV{PATH_TRANSLATED}, delete $ENV{PATH_INFO}); my $path_info; while (not -f $path) { if (not $path =~ s/(\/+[^\/]*)$//) { @@ -21,22 +22,19 @@ sub init { PLP::error(undef, 404); exit; } - # move last path element from PLP_*NAME to PATH_INFO + # move last path element onto PATH_INFO $path_info = $1 . $path_info; } - $ENV{PLP_FILENAME} = $path; - $ENV{PLP_NAME} = delete $ENV{PATH_INFO}; if (defined $path_info) { - $ENV{PLP_NAME} =~ s/\Q$path_info\E$//; + $rel =~ s/\Q$path_info\E$//; $ENV{PATH_INFO} = $path_info; } - } else { - # SCRIPT_*/PATH_INFO already modified to target script - # (Lighttpd cgi.assign) - $ENV{PLP_FILENAME} = $ENV{SCRIPT_FILENAME}; - $ENV{PLP_NAME} = $ENV{SCRIPT_NAME}; + $ENV{SCRIPT_FILENAME} = $path; + $ENV{SCRIPT_NAME} = $rel; } + $ENV{"PLP_$_"} = $ENV{"SCRIPT_$_"} for qw/NAME FILENAME/; + if (not -r $ENV{PLP_FILENAME}) { print STDERR "PLP: Can't read: $ENV{PLP_FILENAME} ($ENV{REQUEST_URI})\n"; PLP::error(undef, 403); -- 2.30.0