#!/usr/bin/perl ############################################################################### # # # IPFire.org - A linux based firewall # # Copyright (C) 2007 Michael Tremer & Christian Schmidt # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation, either version 3 of the License, or # # (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program. If not, see . # # # # Based on Steffen Schoch (sschoch@users.sourceforge.net) # # # ############################################################################### use strict; use IPC::Open2; use IO::Handle; require '/var/ipfire/general-functions.pl'; my %proxysettings=(); &General::readhash("${General::swroot}/proxy/settings", \%proxysettings); # define here your redirectors (use a comma sperated list) my @redirectors = ""; if ( $proxysettings{'ENABLE_FILTER'} eq 'on' && -e '/usr/bin/squidGuard' ){push(@redirectors,"/usr/bin/squidGuard"); } if ( $proxysettings{'ENABLE_CLAMAV'} eq 'on' && -e '/usr/bin/squidclamav' ){ push(@redirectors,"/usr/bin/squidclamav"); } if ( $proxysettings{'ENABLE_UPDXLRATOR'} eq 'on' && -e '/usr/sbin/updxlrator' ) { push(@redirectors,"/usr/sbin/updxlrator"); } #my $redirectors = [ '/usr/bin/squidclamav', '/usr/bin/squidGuard', '/usr/sbin/updxlrator' ]; # Attention: keep in mind that the order of your redirectors is important. # It doesn't make sense to scan for viruses on pages you restrict access to... # So place first your tools which restrict access, then the tools which do the # content filtering! #print "Anzahl ".$#redirectors."\n"; ##### no need to change anything below this line ##### # init $| = 1; STDOUT->autoflush(1); my $line; my $return; my $i; # open progamms my $pidlist = []; my $rlist = []; my $wlist = []; for($i = 1; $i <= $#redirectors; $i++) { #print "i=".$i." redirector ".$redirectors[$i]."\n"; $pidlist->[$i] = open2($rlist->[$i], $wlist->[$i], $redirectors[$i] ); } # wait for data... while($line = <>) { for($i = 1; $i <= $#redirectors; $i++) { $wlist->[$i]->print($line); $return = $rlist->[$i]->getline; last if($return ne "\n" and $return ne $line); # break if redirector changes data } print $return; } exit 0;