[Tech] hard core perl
Marco Ermini
marco.ermini@gmail.com
Ven 18 Mar 2005 14:46:59 CET
Raga,
siccome so che ci sono esperti di Perl qua... ho questo problema che è
davvero "hard core" infatti serve a "impedire" la navigazione sui siti
porno in un'associazione di volontariato :-)
Quello qua sotto è un programma perl che funge da redirector per
Squid. In pratica si "mangia" una lista di siti da filtrare da un file
m4 situato sotto la directory ./allowed e li "filtra". Io vorrei fare
l'esatto contrario, ovvero: nella lista vorrei mettere solo i siti
permessi (e tutti gli altri vengono "censurati").
C'è qualcuno che è in grado di capire come si cambia opportunamente
questo programma? :-)
Grazie in anticipo... :-)
-------------
use strict;
use warnings;
use File::Basename;
use re 'eval';
my $DIR_AD=dirname($0)."/allowed";
chdir $DIR_AD or die "chdir $DIR_AD: $!";
select STDOUT;
$|=1;
my @got;
RELOAD: {
my $patt="";
open(M4,"-|","m4 --prefix-builtins --synclines main") or die "m4 run: $!";
my %files;
while (<M4>) {
chomp;
next if !$_;
do { $files{$1}=undef; next; } if /^#\s*line\s+\d+\s+"(.*)"$/;
$patt.="|" if $patt;
$patt.=$_."(?{ '";
s/'/'."'".'/g;
$patt.="$_'; })";
}
close M4;
$patt=qr @^http://($patt).*\n$@;
while ($_=shift @got || <>) {
while (my($file,$old)=each %files) {
my $new=(stat $file)[9];
$files{$file}=$new;
next if !defined $old || $old==$new;
push @got,$_;
redo RELOAD;
}
s@$patt@http://192.168.1.1:8080/cgi-bin/redirector-txt.cgi?$^R\n@;
print;
}
} # RELOAD
--
Marco Ermini
http://www.markoer.org
Dubium sapientiae initium. (Descartes)
root@human # mount -t life -o ro /dev/dna /genetic/research
<< This message is for the designated recipient only and may contain
privileged or confidential information. If you have received it in
error, please notify the sender immediately and delete the original.
Any other use of the email by you is prohibited. >>
Maggiori informazioni sulla lista
flug-tech