[WiZKiD] <wizkid@wizkid.org> on Jul 2, 2002:
> #!/usr/bin/perl
> $|=1;
>
> $accessfile = "/usr/local/squid/etc/ipguard.acc";
>
> while(<>) {
> $a = $_;
> #$u = URL $h = HOST $usr = USER/FQDN $met = METHOD
> ($u,$h,$usr,$met) = split(/ /,$a);
> ($ip,$fqdn) = split(/\//,$h);
>
> open (FILE,"<$accessfile");
> @a = <FILE>;
> close(FILE);
>
> foreach $a (@a) {
> chomp($a);
> ($alip,$alusr) = split(/:/,$a);
> if ($alip eq $ip) { $usr = $alusr; }
> }
>
> print STDOUT "$u $ip/$fqdn $usr $met\r";
> }
You don't have to read $accessfile for every request. Just check mtime
for every request and if it changes, recache $accessfile. Like this,
Perl may well be fast enough for what you want. I'd certainly give it a
try. Beware, code below is untested!
#!/usr/bin/perl
$|=1;
$accessfile = "/usr/local/squid/etc/ipguard.acc";
%accesscache = ();
$mtime = 0;
while(<>) {
$a = $_;
#$u = URL $h = HOST $usr = USER/FQDN $met = METHOD
($u,$h,$usr,$met) = split(/ /,$a);
($ip,$fqdn) = split(/\//,$h);
$mtime = &cache_access_file() if (stat($accessfile))[9] <> $mtime;
$usr = $accessfile{$ip} if exists $accessfile{$ip};
print STDOUT "$u $ip/$fqdn $usr $met\r";
}
sub cache_access_file {
%accesscache = (); # clear old cache
open (FILE, "<$accessfile");
while (<FILE>) {
my ($alip,$alusr) = split(/:/,$a);
$accesscache{$alip} = $alusr; # Assuming $alips are unique
}
close FILE;
return stat($accessfile))[9];
}
Received on Wed Jul 03 2002 - 05:22:56 MDT
This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 17:09:00 MST