summaryrefslogtreecommitdiffstats
path: root/ldap/admin/src/Cgi.pm
blob: d4f0ba6ab11aa9687d9f71d55db3d2c22bee0343 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#
# BEGIN COPYRIGHT BLOCK
# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
# Copyright (C) 2005 Red Hat, Inc.
# 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;