#! /usr/bin/perl
#
# Beispel-CGI Skript, um dem Benutzer zu erklaeren, aufgrund welcher Regel
# eine URL geblockt worden ist.
#
# Englisches Orginal von Pål Baltzersen 1998
# Deutsche Uebersetzung von Christine Kronberg 2007
#

$QUERY_STRING = $ENV{'QUERY_STRING'};
$DOCUMENT_ROOT = $ENV{'DOCUMENT_ROOT'};

# Email Adresse des Proxy Administrators:
my $PROXYEMAIL = "proxymaster\@foo.bar";
#
#
$clientaddr = "";
$clientname = "";
$clientuser = "";
$clientgroup = "";
$targetgroup = "";
$url = "";
$time = time;
@day = ("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
@month = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

while ($QUERY_STRING =~ /^\&?([^&=]+)=([^&=]*)(.*)/) {
  $key = $1;
  $value = $2;
  $QUERY_STRING = $3;
  if ($key =~ /^(clientaddr|clientname|clientuser|clientgroup|targetgroup|url)$/) {
    eval "\$$key = \$value";
  }
  if ($QUERY_STRING =~ /^url=(.*)/) {
    $url = $1;
    $QUERY_STRING = "";
  }
}

if ($url =~ /\.(gif|jpg|jpeg|mpg|mpeg|avi|mov)$/i) {
  print "Content-Type: image/gif\n";
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time);
  printf "Expires: %s, %02d-%s-%02d %02d:%02d:%02d GMT\n\n", $day[$wday],$mday,$month[$mon],$year,$hour,$min,$sec;
  open(GIF, "$DOCUMENT_ROOT/images/blocked.gif");
  while (<GIF>) {
    print;
  }
  close(GIF)
} else {
  $url =~ s/</</g ;
  $url =~ s/>/>/g ;
  print "Content-type: text/html\n";
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time);
  printf "Expires: %s, %02d-%s-%02d %02d:%02d:%02d GMT\n\n", $day[$wday],$mday,$month[$mon],$year,$hour,$min,$sec;
  print "\n\n  \n    302 Zugriff verweigert\n  \n\n";
  print "  \n";
  if ($srcclass eq "unknown") {
    print "    
\n";
    print "      \n      
\n\n";
    print "    
Der Zugriff wurde verweigert, da 
dieser Rechner nicht
 am Proxy definiert worden ist.
\n\n";
    print "    
\n";
    print "       Zusatz Informationen :  
\n";
    print "       Rechner Adresse = $clientaddr
\n";
    print "       Rechner Name = $clientname
\n";
    print "       Benutzerkennung = $clientuser
\n";
    print "       Rechnergruppe = $targetgroup
\n";
    print "    
\n\n";
    print "    
Sollten diese Informationen nicht korrekt sein, kontaktieren Sie bitte
\n";
    print "      $PROXYEMAIL (mailto:$PROXYEMAIL)\n";
    print "    
\n\n";
  } elsif ($targetgroup eq "in-addr") {
    print "    
\n";
    print "      \n      
\n\n";
    print "    
Zugriff auf IP Adressen URLs sind von diesem Rechner nicht erlaubt.
\n\n";
    print "    
\n";
    print "       Zusatz Informationen :  
\n";
    print "       Rechner Adresse = $clientaddr
\n";
    print "       Rechner Name = $clientname
\n";
    print "       Benutzerkennung = $clientuser
\n";
    print "       Rechnergruppe = $clientgroup
\n";
    print "       URL = $url
\n";
    print "       Zielgruppe = $targetgroup
\n";
    print "    
\n\n";
    print "    
Zu der angegebenen IP Adresse konnte kein Domain Name gefunden werden. Der Zugriff auf\n";
    print "    solche Adresse ist gesperrt. 
\n";
    print "     Sollten diese Informationen nicht korrekt sein, kontaktieren Sie bitte
\n";
    print "      $PROXYEMAIL (mailto:$PROXYEMAIL)\n";
    print "    
\n\n";
  } else {
    print "    
\n";
    print "      \n      
\n\n";
    print "    
Zugriff verweigert
\n\n";
    print "    
\n";
    print "       Zusatz Informationen :  
\n";
    print "       Rechner Adresse = $clientaddr
\n";
    print "       Rechner Name = $clientname
\n";
    print "       Benutzerkennung = $clientuser
\n";
    print "       Rechnergruppe = $clientgroup
\n";
    print "       URL = $url
\n";
    print "       Zielgruppe = $targetgroup
\n";
    print "    
\n\n";
    print "    
Sollten diese Informationen nicht korrekt sein, kontaktieren Sie bitte
\n";
    print "      $PROXYEMAIL (mailto:$PROXYEMAIL)\n";
    print "    
\n\n";
  }
  print "  \n\n\n";
}
exit 0;
