diff options
Diffstat (limited to 'ldap/admin/src/Cgi.pm')
-rw-r--r-- | ldap/admin/src/Cgi.pm | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/ldap/admin/src/Cgi.pm b/ldap/admin/src/Cgi.pm new file mode 100644 index 00000000..aba11e75 --- /dev/null +++ b/ldap/admin/src/Cgi.pm @@ -0,0 +1,70 @@ +# +# BEGIN COPYRIGHT BLOCK +# Copyright 2001 Sun Microsystems, Inc. +# Portions copyright 1999, 2001-2003 Netscape Communications Corporation. +# All rights reserved. +# END COPYRIGHT BLOCK +# +package Cgi; + +sub parse { + my $line = shift; + my $assign; + my $var; + my $value; + + # save time, don't parse empty lines + return if (!$line); + + chomp( $line ); + if ( $raw ) { + $raw .= '&' . $line; + } else { + $raw = $line; + } + # decode the line first + $line = &decode($line); + # this only works if there are no '&' characters in var or value . . . + foreach $assign ( split( /&/, $line ) ) { + # assume the var is everything before the first '=' in assign + # and the value is everything after the first '=' + ( $var, $value ) = split( /=/, $assign, 2 ); + $main::cgiVars{$var} = $value; + } +} + +sub decode { + my $string = shift; + + $string =~ s/\+/ /g; + $string =~ s/%(\w\w)/chr(hex($1))/ge; + + return $string; +} + +sub main::freakOut { + my $i; + + for ( $i = 0 ; $i < scalar( @_ ) ; ++$i ) { + $_[$i] =~ s/'/\\'/g; + } + print "<SCRIPT language=JAVASCRIPT>\n"; + print "alert('@_');\n"; + print "location='index';\n</SCRIPT>\n"; + exit 0; +} + +if ($ENV{'QUERY_STRING'}) { + &parse( $ENV{'QUERY_STRING'} ); + $Cgi::QUERY_STRING = $ENV{'QUERY_STRING'}; +} + +if ( $ENV{'CONTENT_LENGTH'} ) { + read STDIN, $Cgi::CONTENT, $ENV{'CONTENT_LENGTH'}; + &parse( $Cgi::CONTENT ); +} + +# $Cgi::QUERY_STRING contains the query string and +# $Cgi::CONTENT contains what was passed in through stdin + +1; |