#!/usr/bin/perl # proxy.cgi: evil ballot stuffing proxy script require LWP::UserAgent; require CGI; use HTTP::Request::Common; $real_server = 'ballot.berkeley.edu'; $ua = LWP::UserAgent->new; $cgi = new CGI; $params = $cgi->Vars; # Get a reference to the parameters hash $method = $ENV{'REQUEST_METHOD'}; $uri = $ENV{'REQUEST_URI'}; $ua->agent($ENV{'HTTP_USER_AGENT'}); # The candidates to stuff the ballot box with: %stuff_me = ( Presidentlist => 23, Executivelist => 27, Externallist => 34, Academiclist => 41, Senatorlist => 60 ); # Stuff the ballot box! if ( $uri =~ /cast\.cfm/ ) { foreach $race ( keys %{$params} ) { if ( $stuffee = $stuff_me{$race} ) { $$params{$race} = $stuffee . ',' . $$params{$race}; # Prepend stuffee $$params{$race} =~ s/,$stuffee//; # Avoid duplicate votes @votes = split( /,/, $$params{$race} ); if (@votes == 20) { pop(@votes); } # Avoid overvoting $$params{$race} = join( ',', @votes ); } } } if ( $method eq 'POST' ) { $page = $ua->request(POST 'https://'.$real_server.$uri, $params)->as_string; } else { $req = HTTP::Request->new( $method, 'https://'.$real_server.$uri ); $page = $ua->request($req)->as_string; } $page =~ s/.*\n//; # Kill Apache's HTTP/1.1 200 OK message print $page; # spit page out for the user