#-------------- start of &getcgivars() module, copied in -------------
# Read all CGI vars into an associative array.
# If multiple input fields have the same name, they are concatenated into
# one array element and delimited with the \0 character.
# Currently only supports Content-Type of application/x-www-form-urlencoded.
sub getcgivars {
local($in, %in) ;
local($name, $value) ;
# First, read entire string of CGI vars into $in
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
$in= $ENV{'QUERY_STRING'} ;
} elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
if ($ENV{'CONTENT_TYPE'}=~ m#^application/x-www-form-urlencoded$#i)
{
$ENV{'CONTENT_LENGTH'}
|| &HTMLdie("No Content-Length sent with the POST request.")
;
read(STDIN, $in, $ENV{'CONTENT_LENGTH'}) ;
} else {
&HTMLdie("Unsupported Content-Type: $ENV{'CONTENT_TYPE'}") ;
}
} else {
&HTMLdie("Script was called with unsupported REQUEST_METHOD.")
;
}
# Resolve and unencode name/value pairs into %in
foreach (split('&', $in)) {
s/\+/ /g ;
($name, $value)= split('=', $_, 2) ;
$name=~ s/%(..)/sprintf("%c",hex($1))/ge ;
$value=~ s/%(..)/sprintf("%c",hex($1))/ge ;
$in{$name}.= "\0" if defined($in{$name}) ; # concatenate
multiple vars
$in{$name}.= $value ;
}
return %in ;
}
#-------------- end of &getcgivars() module --------------------------