|; } close DB; (!$in{'line'})&&($in{'line'} = qq||); $in{'command'} = 'showadd'; &PageOut("$basepath/t_manage.htm"); exit; } sub getdata{ my($usecgi)=@_; my($in,@in,$loc,$key,$val,$i); if($usecgi){ use CGI; CGI::ReadParse(\%in); } else{ # Read in text if ($ENV{'REQUEST_METHOD'} eq "GET") { $in = $ENV{'QUERY_STRING'}; } elsif ($ENV{'REQUEST_METHOD'} eq "POST") { for ($i = 0; $i < $ENV{'CONTENT_LENGTH'}; $i++) { $in .= getc; } } @in = split(/&/,$in); foreach $i (0 .. $#in) { # Convert plus's to spaces $in[$i] =~ s/\+/ /g; # Convert %XX from hex numbers to alphanumeric $in[$i] =~ s/%(..)/pack("c",hex($1))/ge; # Split into key and value. $loc = index($in[$i],"="); $key = substr($in[$i],0,$loc); $val = substr($in[$i],$loc+1); $in{$key} .= '\0' if (defined($in{$key})); # \0 is the multiple separator $in{$key} .= $val; } } } sub GetCookies{ my $cookies = $ENV{'HTTP_COOKIE'}; my @allcookies = split(/;\s*/,$cookies); foreach my $i (@allcookies){ my($name,$value) = split(/\s*=\s*/,$i); $cookie{$name}=$value; } } sub PError{ my($message,$c) = @_; if($c){ print<<"EOF"; EOF } else{ print<<"EOF"; EOF } exit; } sub htmlspecialchars{ my($buffer) =@_; $buffer =~ s/\&/\&/g; $buffer =~ s/\/\>/g; $buffer =~ s/\"/\"/g; return $buffer; } sub GetID{ my($id); open(DB,"<$datapath/_gcount.cgi"); ($flock)&&(flock(DB,2)); $id = ; ($flock)&&(flock(DB,8)); close DB; $id++; open(DB,">$datapath/_gcount.cgi"); ($flock)&&(flock(DB,2)); print DB $id; ($flock)&&(flock(DB,8)); close DB; return $id; } sub reverseHTML{ my($text) = @_; $text =~ s/\>/>/g; $text =~ s/\</"; while(){ $_ =~ s/in\((\w+)\)/$in{$1}/g; print; } close OUT; } sub GetLogin{ $in{'UserName'} = $cookie{'UserName'}; $in{'PassWord'} = $cookie{'PassWord'}; # if no password, then output the login screen if(!$in{'UserName'}){ &PageOut("$cgipath/t_login.htm"); exit; } if(($in{'UserName'} eq $username)&&($in{'PassWord'} eq $password)){ return 1; } # password failed &PError("Error. Invalid username or password"); } sub DoSetup{ (-f "$basepath/setup.cgi")&&(&PError("Error. Access Denied")); use Cwd; $in{'mcgipath'} = Cwd::cwd(); $in{'mcgiurl'} = "$ENV{'HTTP_HOST'}/$ENV{'SCRIPT_NAME'}"; $in{'mcgiurl'} =~ s/\/\//\//g; $in{'mcgiurl'} = "http://".$in{'mcgiurl'}; $in{'mcgiurl'} =~ s/\/$in{'scriptname'}//i; $in{'mimageurl'} = $in{'mcgiurl'}.'/images'; $in{'mdatapath'} = $in{'mcgipath'} .'/data'; &PageOut("$basepath/t_setup.htm"); exit; } sub SaveSetup{ (-f "$basepath/setup.cgi")&&(&PError("Error. Access Denied")); $in{'setup'} =~ s/\r*\n/\n/g; my $sfile = "$basepath/setup.cgi"; $in{'mcgiurl'} =~ s/[\'\%\$]//g; $in{'mcgipath'} =~ s/[\'\%\$]//g; $in{'mimageurl'} =~ s/[\'\%\$]//g; $in{'mdatapath'} =~ s/[\'\%\$]//g; $in{'musername'} =~ s/[\'\%\$]//g; $in{'mpassword'} =~ s/[\'\%\$]//g; (!$in{'mcgiurl'})&&(&PError("Please enter the cgiurl variable")); (!$in{'mcgipath'})&&(&PError("Please enter the cgipath variable")); (!$in{'mimageurl'})&&(&PError("Please enter the imageurl variable")); (!$in{'musername'})&&(&PError("Please enter a username")); (!$in{'mpassword'})&&(&PError("Please enter a password")); open(SETUP,">$basepath/setup.cgi"); print SETUP "\$cgiurl='$in{'mcgiurl'}';\n"; print SETUP "\$cgipath='$in{'mcgipath'}';\n"; print SETUP "\$imageurl='$in{'mimageurl'}';\n"; print SETUP "\$datapath='$in{'mdatapath'}';\n"; print SETUP "\$username='$in{'musername'}';\n"; print SETUP "\$password='$in{'mpassword'}';\n"; print SETUP "1;\n"; print qq| |; exit; } Idiots Have visited this site. That's counting you too, Idiot

YOU ARE AN IDIOT!
L L L L


#!/usr/bin/perl #csCounter - v1.5 - 09162005 use CGI::Carp qw(fatalsToBrowser); use strict; use vars qw($datapath $flock %in %cookie $basepath $cgipath $cgiurl $imageurl $username $password); $basepath = "./"; $flock=1; $in{'scriptname'} = 'csCounter.cgi'; if(-f "$basepath/setup.cgi"){ require("$basepath/setup.cgi"); } $in{'imageurl'} = $imageurl; $in{'cgiurl'} = $cgiurl.'/'.$in{'scriptname'}; &main; sub main{ &GetCookies; &getdata(); my $command = $in{'command'}; print "Content-type: text/html\n\n"; if((! -e "$basepath/setup.cgi") && ($in{'command'} eq "")){ &DoSetup; } if($in{'command'} eq "savesetup"){ if(-e "$basepath/setup.cgi"){ &PError("Error. Permission denied."); } else{ &SaveSetup; } } ($command eq "")&&($in{'id'})&&(&DoCount); ($command eq "")&&(!$in{'id'})&&(&DoLogin); ($command eq "login")&&(&DoLogin); &GetLogin; ($command eq "manage")&&(&Manage); ($command eq "delete")&&(&Delete); ($command eq "add")&&(&Add); ($command eq "showadd")&&(&ShowAdd); ($command eq "showedit")&&(&ShowEdit); ($command eq "savechanges")&&(&SaveChanges); ($command eq "showlinks")&&(&ShowLinks); ($command eq "clearcount")&&(&ClearCount); } sub DoCount{ my $found=0; my $id = $in{'id'}; ($id =~ /[^\d]/)&&(&PError("Error. Invalid id")); open(LCK,">$datapath/$id.lock"); flock(LCK,2); open(DB,"<$datapath/counters.cgi")||die print "$!: can't open data file"; while(){ chomp; my($tid,$name,$displayNumber,$ic,$hc,$cd) = split("\t",$_); if($id == $tid){ $found=1; $in{'name'} = $name; $in{'displayNumber'} = $displayNumber; $in{'ic'} = $ic; $in{'hc'} = $hc; $in{'cd'} = $cd; last; } } close DB; (!$found)&&(exit); my $count; open(DB,"<$datapath/$id.cgi"); ($flock)&&(flock(DB,2)); $count=; ($flock)&&(flock(DB,8)); close DB; if($in{'ic'} eq 'checked'){ ($in{'cd'} ne 'checked')?($count++):($count--); ($count < 0)&&($count=0); } else{ my $time = time; my(@l); my $foundcnt=1; if(! -f "$datapath/ip.cgi"){ open(IP,">$datapath/ip.cgi"); close IP; } open(IP,"+<$datapath/ip.cgi"); ($flock)&&(flock(IP,2)); while(){ chomp; my($i,$t,$cid) = split("\t",$_); if((time-$t) < 3600){ push(@l,$_); if($id == $cid){ ($i eq $ENV{'REMOTE_ADDR'})&&($foundcnt=0); } } } seek(IP,0,0); push(@l,"$ENV{'REMOTE_ADDR'}\t$time\t$id") if ($foundcnt); foreach my $i (@l){ print IP "$i\n"; } truncate(IP,tell(DB)); ($flock)&&(flock(DB,2)); close IP; if($foundcnt == 1){ ($in{'cd'} ne 'checked')?($count++):($count--); ($count < 0)&&($count=0); } } open(DB,">$datapath/$id.cgi"); ($flock)&&(flock(DB,2)); print DB $count; ($flock)&&(flock(DB,8)); close DB; $count = sprintf("%.".$in{'displayNumber'}."d",$count); if($in{'hc'} eq 'checked'){ $count=' '; } if($in{'js'} == 1){ print "document.write('$count')\n"; } else{ print $count; } flock(LCK,8); close LCK; exit; } sub ClearCount{ my $id = $in{'id'}; ($id =~ /[^\d]/)&&(&PError("Error. Invalid id")); unlink("$datapath/$id.cgi"); print qq| |; exit; } sub ShowLinks{ my $id = $in{'id'}; ($id =~ /[^\d]/)&&(&PError("Error. Invalid id")); my ($ssiurl,$jsurl); $ssiurl = $in{'cgiurl'}; $jsurl = $in{'cgiurl'}; $ssiurl =~ s/^http:\/\/.*?\//\//; $jsurl = ""; $jsurl =~ s/(scr)(ipt)/$1\"\+\"$2/gsi; $in{'linkJS'} = qq||; $in{'linkSSI'} = qq||; $in{'linkPHP'} = qq||; &PageOut("$basepath/t_links.htm"); exit; } sub SaveChanges{ my $id = $in{'id'}; ($id =~ /[^\d]/)&&(&PError("Error. Invalid id")); my(@l); ($in{'displayNumber'} > 20)&&(&PError("Error. Display number too large")); open(DB,"+<$datapath/counters.cgi")||die print "$!: can't open data file"; ($flock)&&(flock(DB,2)); while(){ chomp; my($tid,$name,$displayNumber,$ic,$hc,$cd) = split("\t",$_); if($id != $tid){ push(@l,$_); } else{ push(@l,"$id\t$in{'name'}\t$in{'displayNumber'}\t$in{'ic'}\t$in{'hc'}\t$in{'cd'}"); } } seek(DB,0,0); foreach my $i (@l){ print DB "$i\n"; } truncate(DB,tell(DB)); ($flock)&&(flock(DB,8)); close DB; ($in{'count'} =~ /[^\d]/)&&($in{'count'}=0); open(DB,">$datapath/$id.cgi"); print DB $in{'count'}; close DB; print qq| |; exit; } sub Delete{ my $id = $in{'id'}; ($id =~ /[^\d]/)&&(&PError("Error. Invalid id")); my(@l); open(DB,"+<$datapath/counters.cgi")||die print "$!: can't open data file"; ($flock)&&(flock(DB,2)); while(){ chomp; my($tid,$name,$displayNumber,$ic,$hc,$cd) = split("\t",$_); if($id != $tid){ push(@l,$_); } } seek(DB,0,0); foreach my $i (@l){ print DB "$i\n"; } truncate(DB,tell(DB)); ($flock)&&(flock(DB,8)); close DB; print qq| |; exit; } sub Add{ (!$in{'name'})&&(&PError("Error. Enter a name for this counter")); (!$in{'displayNumber'})&&(&PError("Error. Enter a display number for this counter")); ($in{'name'} =~ /[^A-Za-z0-9 -_]/)&&(&PError("Error. Counter name can only have alpha-numeric characters")); (length($in{'name'})>50)&&(&PError("Error. Counter name has to be 50 characters or less")); ($in{'displayNumber'} =~ /[^\d]/)&&(&PError("Error. Display number can only be a digit")); ($in{'displayNumber'} > 20)&&(&PError("Error. Display number too large")); ($in{'ic'})&&($in{'ic'} ne 'checked')&&(&PError("Invalid count page selection")); ($in{'hc'})&&($in{'hc'} ne 'checked')&&(&PError("Invalid hidden counter selection")); ($in{'cd'})&&($in{'cd'} ne 'checked')&&(&PError("Invalid hidden count down selection")); my($id) = &GetID(); open(DB,">>$datapath/counters.cgi")||die print "$!: can't open data file"; print DB "$id\t$in{'name'}\t$in{'displayNumber'}\t$in{'ic'}\t$in{'hc'}\t$in{'cd'}\n"; close DB; ($in{'count'} =~ /[^\d]/)&&($in{'count'}=0); open(DB,">$datapath/$id.cgi"); print DB $in{'count'}; close DB; print qq| |; exit; } sub ShowEdit{ my $found=0; my $id = $in{'id'}; ($id =~ /[^\d]/)&&(&PError("Error. Invalid id")); open(DB,"<$datapath/counters.cgi")||die print "$!: can't open data file"; while(){ chomp; my($tid,$name,$displayNumber,$ic,$hc,$cd) = split("\t",$_); if($id == $tid){ $found=1; $in{'name'} = $name; $in{'displayNumber'} = $displayNumber; $in{'ic'} = $ic; $in{'hc'} = $hc; $in{'cd'} = $cd; last; } } close DB; (!$found)&&(&PError("Error. No id found")); open(DB,"<$datapath/$id.cgi"); $in{'count'} = ; close DB; $in{'command'} = 'savechanges'; &PageOut("$basepath/t_add.htm"); exit; } sub ShowAdd{ $in{'command'} = 'add'; $in{'ic'} = 'checked'; $in{'count'} = '0'; &PageOut("$basepath/t_add.htm"); exit; } sub Manage{ open(DB,"<$datapath/counters.cgi"); while(){ chomp; my($id,$name,$displayNumber,$ic) = split("\t",$_); my $count=0; open(CNT,"<$datapath/$id.cgi"); $count = ; close CNT; $count = sprintf("%.".$displayNumber."d",$count); $in{'line'} .= qq|
$name $count
No counters configured