#!/usr/bin/perl -w # # Wird von Squid aufgerufen mit einer User/Passwort-Kombination # Checkt Kombination via sisiscgi.pl (misc) auf Sisisrechner # Liefer OK oder ERR zurueck, je nach Ergebnis # Laeuft endlos, damit Squid die Instanz offen halten kann # # Version 1.0, 9/07, misc # ##################################################################### use strict; $| = 1; # Wichtig: Keine Ausgabepufferung, sonst geht gar nix # Server, der zur Auth verwendet werden soll. Dort muss im URL-Pfad /cgi-bin das Script sisiscgi.pl erreichbar sein our $server="meinsisis.server"; our $gesperrt="999999 1111111"; # Gesperrte Benutzernummern, nacheinander, durch Leerzeichen getrennt our $accesspassword="mein-access-passwort"; # ---------------------------------------- sub authenticate_user { my ($username,$password)=@_; my $checkurl=qq#http://$server/cgi-bin/sisiscgi.pl?accesspassword=$accesspassword&order=auth#; my $response=&urlholen($checkurl."&user=$username&pass=$password"); if ( ($response=~m//) and ($response!~m//) ){ return 1; } # Anhand des folgenden Codes kann man erkennen, wie man weitere Authentifizierungen einbinden kann ######### Naechster Versuch: Auth. per Radius # open PIPE,qq{echo "User-Name=$username", "User-Password=$password" | $radiuscommand $radiusserver auth $radiussecret|}; # while (my $z=) { # if ($z=~/code 2,/) { # close PIPE; # return 1; # } # } # close PIPE; # ######## return 0; } # ---------------------------------------- sub urlholen { my $gefragteurl = $_[0]; use LWP::UserAgent; my $ua = new LWP::UserAgent; $ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031007" . $ua->agent); my $req = new HTTP::Request GET => $gefragteurl; my $res = $ua->request($req); if ($res->is_success) { return $res->content; } else { return "Bad luck this time\n"; } } # ---------------------------------------- # Entgegennahme des Benutzernamens und Passwortes ueber STDIN while (){ chomp; my $argumentstring=$_; if ($argumentstring!~/^.+\s.+$/){ print "ERR\n"; next; } my ($username,$password)=split(/ /,$argumentstring); if ($gesperrt=~m/$username/) { # Gesperrter Benutzer print "ERR\n"; next; } if (&authenticate_user($username,$password)){ print "OK\n"; } else { print "ERR\n"; } }