From e24010a9a90b8a5a4fdb1cffcac94df5a07a17fc Mon Sep 17 00:00:00 2001 From: ms Date: Fri, 30 Jun 2006 14:31:17 +0000 Subject: [PATCH] =?utf8?q?Ge=C3=A4ndert:=20=20=20*=20Leider=20wurden=20die?= =?utf8?q?=20CGIs=203x=20hintereinander=20in=20die=20Datei=20geschrieben.?= =?utf8?q?=20:(?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@186 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8 --- html/cgi-bin/logs.cgi/urlfilter.dat | 902 ---- html/cgi-bin/redirect.cgi | 332 -- html/cgi-bin/urlfilter.cgi | 6008 --------------------------- 3 files changed, 7242 deletions(-) diff --git a/html/cgi-bin/logs.cgi/urlfilter.dat b/html/cgi-bin/logs.cgi/urlfilter.dat index 94d150c87e..c2be5b0499 100644 --- a/html/cgi-bin/logs.cgi/urlfilter.dat +++ b/html/cgi-bin/logs.cgi/urlfilter.dat @@ -449,905 +449,3 @@ sub oldernewer } # ------------------------------------------------------------------- -#!/usr/bin/perl -# -# SmoothWall CGIs -# -# This code is distributed under the terms of the GPL -# -# (c) The SmoothWall Team -# -# $Id: urlfilter.dat,v 1.4 2005/05/15 00:00:00 marco Exp $ -# - -use strict; - -# enable only the following on debugging purpose -#use warnings; -#use CGI::Carp 'fatalsToBrowser'; - -use POSIX(); - -require '/var/ipfire/general-functions.pl'; -require "${General::swroot}/lang.pl"; -require "${General::swroot}/header.pl"; - -my $dbdir = "${General::swroot}/urlfilter/blacklists"; -my $logdir = "/var/log/squidGuard"; - -my %cgiparams=(); -my %logsettings=(); -my %filtersettings=(); -my %selected=(); - -my $errormessage=''; - -my @log=(); -my $logarch=''; -my $date=''; -my $time=''; -my $pid=''; -my @loginfo=(); -my @ip=(); -my @category=(); -my $dsturl=''; -my $site=''; -my $attr1=''; -my $attr2=''; - -my $start=0; -my $prev=0; -my $next=0; -my $lines=0; -my @slice=(); - -my @then=(); -my @temp=(); -my @temp_then=(); -my @temp_now=(); -my $lastleap=''; - -my $day=''; -my $daystr=''; -my $month=''; -my $monthstr=''; -my $longmonthstr=''; -my $year=''; - -my $logday=''; -my $logmonth=''; -my $logyear=''; - -my @shortmonths = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', - 'Sep', 'Oct', 'Nov', 'Dec' ); -my @longmonths = ( $Lang::tr{'january'}, $Lang::tr{'february'}, $Lang::tr{'march'}, - $Lang::tr{'april'}, $Lang::tr{'may'}, $Lang::tr{'june'}, $Lang::tr{'july'}, $Lang::tr{'august'}, - $Lang::tr{'september'}, $Lang::tr{'october'}, $Lang::tr{'november'}, - $Lang::tr{'december'} ); - -my @now = localtime(time); -my $doy = $now[7]; -my $tdoy = $now[7]; -my $year = $now[5]+1900; - -$cgiparams{'DAY'} = $now[3]; -$cgiparams{'MONTH'} = $now[4]; -$cgiparams{'LOGTYPE'} = 'urlfilter'; - -&Header::getcgihash(\%cgiparams); -$logsettings{'LOGVIEW_REVERSE'} = 'off'; -&General::readhash("${General::swroot}/logging/settings", \%logsettings); -if (-e "${General::swroot}/urlfilter/settings") -{ - &General::readhash("${General::swroot}/urlfilter/settings", \%filtersettings); -} - -$now[4] = $cgiparams{'MONTH'}+1; -if($now[4] < 10) { - $now[4] = "0$now[4]"; } - -$start = -1; - -if ($ENV{'QUERY_STRING'} && $cgiparams{'ACTION'} ne $Lang::tr{'update'}) -{ - @temp = split(',',$ ENV{'QUERY_STRING'}); - $start = $temp[0]; - $cgiparams{'MONTH'} = $temp[1]; - $cgiparams{'DAY'} = $temp[2]; - $cgiparams{'LOGTYPE'} = $temp[3]; -} - -if (!($cgiparams{'MONTH'} =~ /^(0|1|2|3|4|5|6|7|8|9|10|11)$/) || - !($cgiparams{'DAY'} =~ /^(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/)) -{ - $cgiparams{'DAY'} = $now[3]; - $cgiparams{'MONTH'} = $now[4]; -} -elsif($cgiparams{'ACTION'} eq '>>') -{ - @temp_now = localtime(time); - $temp_now[4] = $cgiparams{'MONTH'}; - $temp_now[3] = $cgiparams{'DAY'}; - @temp_then = localtime(POSIX::mktime(@temp_now) + 86400); - ## Retrieve the same time on the next day - - ## 86400 seconds in a day - $cgiparams{'MONTH'} = $temp_then[4]; - $cgiparams{'DAY'} = $temp_then[3]; -} -elsif($cgiparams{'ACTION'} eq '<<') -{ - @temp_now = localtime(time); - $temp_now[4] = $cgiparams{'MONTH'}; - $temp_now[3] = $cgiparams{'DAY'}; - @temp_then = localtime(POSIX::mktime(@temp_now) - 86400); - ## Retrieve the same time on the previous day - - ## 86400 seconds in a day - $cgiparams{'MONTH'} = $temp_then[4]; - $cgiparams{'DAY'} = $temp_then[3]; -} - -$monthstr = $shortmonths[$cgiparams{'MONTH'}]; -$longmonthstr = $longmonths[$cgiparams{'MONTH'}]; - -if (($cgiparams{'DAY'} ne $now[3]) || ($cgiparams{'MONTH'} ne $now[4])) -{ - @then = (); - if ( ( $cgiparams{'MONTH'} eq $now[4]) && ($cgiparams{'DAY'} > $now[3]) || - ( $cgiparams{'MONTH'} > $now[4] ) ) { - @then = localtime(POSIX::mktime( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1901 )); - } else { - @then = localtime(POSIX::mktime( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1900 )); - } - $tdoy = $then[7]; - $lastleap=($year-1)%4; - if ($tdoy>$doy) { - if ($lastleap == 0 && $tdoy < 60) { - $doy=$tdoy+366; - } else { - $doy=$doy+365; - } - } -} - -$day = $cgiparams{'DAY'}; -if ($day <= 9) { - $daystr = " $day"; -} else { - $daystr = $day; -} -if ($day < 10) { - $day = "0$day"; -} - -&processevent; - -if ($cgiparams{'ACTION'} eq $Lang::tr{'export'}) -{ - print "Content-type: text/plain\n\n"; - print "IPCop URL filter log\r\n"; - print "Section: $cgiparams{'LOGTYPE'}\r\n"; - print "Date: $daystr $longmonthstr\r\n"; - print "\r\n"; - - if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @log = reverse @log; } - - foreach (@log) - { - ($date,$time,$pid,@loginfo) = split(/ /); - @ip = split(/\//,$loginfo[2]); - @category = split(/\//,$loginfo[0]); - $dsturl = $loginfo[1]; - $loginfo[3] =~ s/\%5c/\\/; - print "$date "; - print "$time "; - if ($cgiparams{'LOGTYPE'} eq 'squidGuard') - { - print "$pid "; - print "@loginfo"; - } else { - print "$category[1] "; - print "$ip[0] "; - if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "$loginfo[3] "; } - print "$dsturl"; - print "\n"; - } - } - - exit; -} - -&Header::showhttpheaders(); - -&Header::openpage($Lang::tr{'urlfilter log viewer'}, 1, ''); - -&Header::openbigbox('100%', 'left', '', $errormessage); - -if ($errormessage) { - &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); - print "$errormessage \n"; - &Header::closebox(); -} - -&Header::openbox('100%', 'left', "$Lang::tr{'settings'}:"); - -$selected{'LOGTYPE'}{$cgiparams{'LOGTYPE'}} = "selected='selected'"; - -print < - - - - - - - - - - - - - - -
$Lang::tr{'section'} - - $Lang::tr{'month'}: - $Lang::tr{'day'}: -
- -END -; - -&Header::closebox(); - -&Header::openbox('100%', 'left', $Lang::tr{'log'}); - -$lines = @log; - -if ($start == -1) { $start = $lines - $Header::viewsize; } -if ($start >= $lines - $Header::viewsize) { $start = $lines - $Header::viewsize; }; -if ($start < 0) { $start = 0; } - -$prev = $start - $Header::viewsize; -$next = $start + $Header::viewsize; - -if ($prev < 0) { $prev = 0; } -if ($next >= $lines) { $next = -1 } -if ($start == 0) { $prev = -1; } - -if ($cgiparams{'LOGTYPE'} eq 'urlfilter') -{ - print "$Lang::tr{'urlfilter log summary'} $longmonthstr $daystr: $lines

\n"; -} - -@slice = splice(@log, $start, $Header::viewsize); - -if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @slice = reverse @slice; } - -if ($lines) -{ - - $lines = 0; - - print "\n"; - unless ($cgiparams{'LOGTYPE'} eq 'squidGuard') - { - print "\n"; - print "\n"; - print "\n"; - print "\n"; - if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "\n"; } - print "\n"; - print "\n"; - } - - foreach (@slice) - { - undef $attr1; undef $attr2; - $lines++; - ($date,$time,$pid,@loginfo) = split(/ /); - @ip = split(/\//,$loginfo[2]); - @category = split(/\//,$loginfo[0]); - $dsturl = $loginfo[1]; - $loginfo[3] =~ s/\%5c/\\/; - if ($cgiparams{'LOGTYPE'} eq 'squidGuard') { - if (@loginfo[0] =~ /squidGuard/) { $attr1 .= ""; $attr2 .= ""; } - if (@loginfo[1] =~ /ready/) { $attr1 .= ""; $attr2 .= ""; } - if (@loginfo[2] =~ /emergency/) { $attr1 .= ""; $attr2 .= ""; } - print "\n"; - } else { - if ($lines % 2) { print "\n"; } else { print "\n"; } - } - if ($cgiparams{'LOGTYPE'} eq 'squidGuard') { - print "\n"; - } else { - print "\n"; - print "\n"; - print "\n"; - if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') - { - print "\n"; - $site = substr($dsturl,0,55); - if (length($dsturl) > 55) { $site .= "..."; } - } else { - $site = substr($dsturl,0,69); - if (length($dsturl) > 69) { $site .= "..."; } - } - #print "\n"; - print "\n"; - } - print "\n"; - } - - print "
$Lang::tr{'urlfilter time'}$Lang::tr{'urlfilter category'}$Lang::tr{'urlfilter client'}$Lang::tr{'urlfilter username'}$Lang::tr{'urlfilter dst'}
$time   $pid   $attr1@loginfo$attr2$time$category[1]$ip[0]$loginfo[3]$site$site

\n"; - -} - -&oldernewer(); - -&Header::closebox(); - -&Header::closebigbox(); - -&Header::closepage(); - -# ------------------------------------------------------------------- - -sub processevent -{ - my $filestr=''; - - undef @log; - if ($cgiparams{'LOGTYPE'} eq 'squidGuard') - { - $filestr = "$logdir/squidGuard.log"; - foreach $logarch (<$filestr.*.gz>) - { - open (LOG,"gzip -dc $logarch |"); - foreach () { - ($date,$time,$pid,@loginfo) = split(/ /); - ($logyear,$logmonth,$logday) = split(/-/,$date); - if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) } - } - close(LOG); - } - open (LOG,$filestr); - foreach () { - ($date,$time,$pid,@loginfo) = split(/ /); - ($logyear,$logmonth,$logday) = split(/-/,$date); - if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) } - } - close(LOG); - } else { - foreach $logarch (<$logdir/*.gz>) - { - if ($logarch !~ /squidGuard\.log/) { - open (LOG,"gzip -dc $logarch |"); - foreach () { - ($date,$time,$pid,@loginfo) = split(/ /); - ($logyear,$logmonth,$logday) = split(/-/,$date); - if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) } - } - close(LOG); - } - } - foreach $filestr (<$logdir/*.log>) - { - if ($filestr !~ /squidGuard\.log/) { - open (LOG,$filestr); - foreach () { - ($date,$time,$pid,@loginfo) = split(/ /); - ($logyear,$logmonth,$logday) = split(/-/,$date); - if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) } - } - close(LOG); - } - } - @log = sort { substr($a,11,8) cmp substr($b,11,8) } @log; - - } -} - -# ------------------------------------------------------------------- - -sub oldernewer -{ - print ""; - print ""; - - print "\n"; - - print "\n"; - - print ""; - print "
"; - if ($prev != -1) { - print "$Lang::tr{'older'}"; } - else { - print "$Lang::tr{'older'}"; } - print ""; - if ($next != -1) { - print "$Lang::tr{'newer'}"; } - else { - print "$Lang::tr{'newer'}"; } - print "
"; -} - -# ------------------------------------------------------------------- -#!/usr/bin/perl -# -# SmoothWall CGIs -# -# This code is distributed under the terms of the GPL -# -# (c) The SmoothWall Team -# -# $Id: urlfilter.dat,v 1.4 2005/05/15 00:00:00 marco Exp $ -# - -use strict; - -# enable only the following on debugging purpose -#use warnings; -#use CGI::Carp 'fatalsToBrowser'; - -use POSIX(); - -require '/var/ipfire/general-functions.pl'; -require "${General::swroot}/lang.pl"; -require "${General::swroot}/header.pl"; - -my $dbdir = "${General::swroot}/urlfilter/blacklists"; -my $logdir = "/var/log/squidGuard"; - -my %cgiparams=(); -my %logsettings=(); -my %filtersettings=(); -my %selected=(); - -my $errormessage=''; - -my @log=(); -my $logarch=''; -my $date=''; -my $time=''; -my $pid=''; -my @loginfo=(); -my @ip=(); -my @category=(); -my $dsturl=''; -my $site=''; -my $attr1=''; -my $attr2=''; - -my $start=0; -my $prev=0; -my $next=0; -my $lines=0; -my @slice=(); - -my @then=(); -my @temp=(); -my @temp_then=(); -my @temp_now=(); -my $lastleap=''; - -my $day=''; -my $daystr=''; -my $month=''; -my $monthstr=''; -my $longmonthstr=''; -my $year=''; - -my $logday=''; -my $logmonth=''; -my $logyear=''; - -my @shortmonths = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', - 'Sep', 'Oct', 'Nov', 'Dec' ); -my @longmonths = ( $Lang::tr{'january'}, $Lang::tr{'february'}, $Lang::tr{'march'}, - $Lang::tr{'april'}, $Lang::tr{'may'}, $Lang::tr{'june'}, $Lang::tr{'july'}, $Lang::tr{'august'}, - $Lang::tr{'september'}, $Lang::tr{'october'}, $Lang::tr{'november'}, - $Lang::tr{'december'} ); - -my @now = localtime(time); -my $doy = $now[7]; -my $tdoy = $now[7]; -my $year = $now[5]+1900; - -$cgiparams{'DAY'} = $now[3]; -$cgiparams{'MONTH'} = $now[4]; -$cgiparams{'LOGTYPE'} = 'urlfilter'; - -&Header::getcgihash(\%cgiparams); -$logsettings{'LOGVIEW_REVERSE'} = 'off'; -&General::readhash("${General::swroot}/logging/settings", \%logsettings); -if (-e "${General::swroot}/urlfilter/settings") -{ - &General::readhash("${General::swroot}/urlfilter/settings", \%filtersettings); -} - -$now[4] = $cgiparams{'MONTH'}+1; -if($now[4] < 10) { - $now[4] = "0$now[4]"; } - -$start = -1; - -if ($ENV{'QUERY_STRING'} && $cgiparams{'ACTION'} ne $Lang::tr{'update'}) -{ - @temp = split(',',$ ENV{'QUERY_STRING'}); - $start = $temp[0]; - $cgiparams{'MONTH'} = $temp[1]; - $cgiparams{'DAY'} = $temp[2]; - $cgiparams{'LOGTYPE'} = $temp[3]; -} - -if (!($cgiparams{'MONTH'} =~ /^(0|1|2|3|4|5|6|7|8|9|10|11)$/) || - !($cgiparams{'DAY'} =~ /^(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/)) -{ - $cgiparams{'DAY'} = $now[3]; - $cgiparams{'MONTH'} = $now[4]; -} -elsif($cgiparams{'ACTION'} eq '>>') -{ - @temp_now = localtime(time); - $temp_now[4] = $cgiparams{'MONTH'}; - $temp_now[3] = $cgiparams{'DAY'}; - @temp_then = localtime(POSIX::mktime(@temp_now) + 86400); - ## Retrieve the same time on the next day - - ## 86400 seconds in a day - $cgiparams{'MONTH'} = $temp_then[4]; - $cgiparams{'DAY'} = $temp_then[3]; -} -elsif($cgiparams{'ACTION'} eq '<<') -{ - @temp_now = localtime(time); - $temp_now[4] = $cgiparams{'MONTH'}; - $temp_now[3] = $cgiparams{'DAY'}; - @temp_then = localtime(POSIX::mktime(@temp_now) - 86400); - ## Retrieve the same time on the previous day - - ## 86400 seconds in a day - $cgiparams{'MONTH'} = $temp_then[4]; - $cgiparams{'DAY'} = $temp_then[3]; -} - -$monthstr = $shortmonths[$cgiparams{'MONTH'}]; -$longmonthstr = $longmonths[$cgiparams{'MONTH'}]; - -if (($cgiparams{'DAY'} ne $now[3]) || ($cgiparams{'MONTH'} ne $now[4])) -{ - @then = (); - if ( ( $cgiparams{'MONTH'} eq $now[4]) && ($cgiparams{'DAY'} > $now[3]) || - ( $cgiparams{'MONTH'} > $now[4] ) ) { - @then = localtime(POSIX::mktime( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1901 )); - } else { - @then = localtime(POSIX::mktime( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1900 )); - } - $tdoy = $then[7]; - $lastleap=($year-1)%4; - if ($tdoy>$doy) { - if ($lastleap == 0 && $tdoy < 60) { - $doy=$tdoy+366; - } else { - $doy=$doy+365; - } - } -} - -$day = $cgiparams{'DAY'}; -if ($day <= 9) { - $daystr = " $day"; -} else { - $daystr = $day; -} -if ($day < 10) { - $day = "0$day"; -} - -&processevent; - -if ($cgiparams{'ACTION'} eq $Lang::tr{'export'}) -{ - print "Content-type: text/plain\n\n"; - print "IPCop URL filter log\r\n"; - print "Section: $cgiparams{'LOGTYPE'}\r\n"; - print "Date: $daystr $longmonthstr\r\n"; - print "\r\n"; - - if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @log = reverse @log; } - - foreach (@log) - { - ($date,$time,$pid,@loginfo) = split(/ /); - @ip = split(/\//,$loginfo[2]); - @category = split(/\//,$loginfo[0]); - $dsturl = $loginfo[1]; - $loginfo[3] =~ s/\%5c/\\/; - print "$date "; - print "$time "; - if ($cgiparams{'LOGTYPE'} eq 'squidGuard') - { - print "$pid "; - print "@loginfo"; - } else { - print "$category[1] "; - print "$ip[0] "; - if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "$loginfo[3] "; } - print "$dsturl"; - print "\n"; - } - } - - exit; -} - -&Header::showhttpheaders(); - -&Header::openpage($Lang::tr{'urlfilter log viewer'}, 1, ''); - -&Header::openbigbox('100%', 'left', '', $errormessage); - -if ($errormessage) { - &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); - print "$errormessage \n"; - &Header::closebox(); -} - -&Header::openbox('100%', 'left', "$Lang::tr{'settings'}:"); - -$selected{'LOGTYPE'}{$cgiparams{'LOGTYPE'}} = "selected='selected'"; - -print < - - - - - - - - - - - - - - -
$Lang::tr{'section'} - - $Lang::tr{'month'}: - $Lang::tr{'day'}: -
- -END -; - -&Header::closebox(); - -&Header::openbox('100%', 'left', $Lang::tr{'log'}); - -$lines = @log; - -if ($start == -1) { $start = $lines - $Header::viewsize; } -if ($start >= $lines - $Header::viewsize) { $start = $lines - $Header::viewsize; }; -if ($start < 0) { $start = 0; } - -$prev = $start - $Header::viewsize; -$next = $start + $Header::viewsize; - -if ($prev < 0) { $prev = 0; } -if ($next >= $lines) { $next = -1 } -if ($start == 0) { $prev = -1; } - -if ($cgiparams{'LOGTYPE'} eq 'urlfilter') -{ - print "$Lang::tr{'urlfilter log summary'} $longmonthstr $daystr: $lines

\n"; -} - -@slice = splice(@log, $start, $Header::viewsize); - -if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @slice = reverse @slice; } - -if ($lines) -{ - - $lines = 0; - - print "\n"; - unless ($cgiparams{'LOGTYPE'} eq 'squidGuard') - { - print "\n"; - print "\n"; - print "\n"; - print "\n"; - if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "\n"; } - print "\n"; - print "\n"; - } - - foreach (@slice) - { - undef $attr1; undef $attr2; - $lines++; - ($date,$time,$pid,@loginfo) = split(/ /); - @ip = split(/\//,$loginfo[2]); - @category = split(/\//,$loginfo[0]); - $dsturl = $loginfo[1]; - $loginfo[3] =~ s/\%5c/\\/; - if ($cgiparams{'LOGTYPE'} eq 'squidGuard') { - if (@loginfo[0] =~ /squidGuard/) { $attr1 .= ""; $attr2 .= ""; } - if (@loginfo[1] =~ /ready/) { $attr1 .= ""; $attr2 .= ""; } - if (@loginfo[2] =~ /emergency/) { $attr1 .= ""; $attr2 .= ""; } - print "\n"; - } else { - if ($lines % 2) { print "\n"; } else { print "\n"; } - } - if ($cgiparams{'LOGTYPE'} eq 'squidGuard') { - print "\n"; - } else { - print "\n"; - print "\n"; - print "\n"; - if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') - { - print "\n"; - $site = substr($dsturl,0,55); - if (length($dsturl) > 55) { $site .= "..."; } - } else { - $site = substr($dsturl,0,69); - if (length($dsturl) > 69) { $site .= "..."; } - } - #print "\n"; - print "\n"; - } - print "\n"; - } - - print "
$Lang::tr{'urlfilter time'}$Lang::tr{'urlfilter category'}$Lang::tr{'urlfilter client'}$Lang::tr{'urlfilter username'}$Lang::tr{'urlfilter dst'}
$time   $pid   $attr1@loginfo$attr2$time$category[1]$ip[0]$loginfo[3]$site$site

\n"; - -} - -&oldernewer(); - -&Header::closebox(); - -&Header::closebigbox(); - -&Header::closepage(); - -# ------------------------------------------------------------------- - -sub processevent -{ - my $filestr=''; - - undef @log; - if ($cgiparams{'LOGTYPE'} eq 'squidGuard') - { - $filestr = "$logdir/squidGuard.log"; - foreach $logarch (<$filestr.*.gz>) - { - open (LOG,"gzip -dc $logarch |"); - foreach () { - ($date,$time,$pid,@loginfo) = split(/ /); - ($logyear,$logmonth,$logday) = split(/-/,$date); - if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) } - } - close(LOG); - } - open (LOG,$filestr); - foreach () { - ($date,$time,$pid,@loginfo) = split(/ /); - ($logyear,$logmonth,$logday) = split(/-/,$date); - if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) } - } - close(LOG); - } else { - foreach $logarch (<$logdir/*.gz>) - { - if ($logarch !~ /squidGuard\.log/) { - open (LOG,"gzip -dc $logarch |"); - foreach () { - ($date,$time,$pid,@loginfo) = split(/ /); - ($logyear,$logmonth,$logday) = split(/-/,$date); - if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) } - } - close(LOG); - } - } - foreach $filestr (<$logdir/*.log>) - { - if ($filestr !~ /squidGuard\.log/) { - open (LOG,$filestr); - foreach () { - ($date,$time,$pid,@loginfo) = split(/ /); - ($logyear,$logmonth,$logday) = split(/-/,$date); - if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) } - } - close(LOG); - } - } - @log = sort { substr($a,11,8) cmp substr($b,11,8) } @log; - - } -} - -# ------------------------------------------------------------------- - -sub oldernewer -{ - print ""; - print ""; - - print "\n"; - - print "\n"; - - print ""; - print "
"; - if ($prev != -1) { - print "$Lang::tr{'older'}"; } - else { - print "$Lang::tr{'older'}"; } - print ""; - if ($next != -1) { - print "$Lang::tr{'newer'}"; } - else { - print "$Lang::tr{'newer'}"; } - print "
"; -} - -# ------------------------------------------------------------------- diff --git a/html/cgi-bin/redirect.cgi b/html/cgi-bin/redirect.cgi index 40087d1743..c7b6a608f3 100644 --- a/html/cgi-bin/redirect.cgi +++ b/html/cgi-bin/redirect.cgi @@ -164,335 +164,3 @@ sub readhash close FILE; } } -#!/usr/bin/perl - -# -# $Id: redirect.cgi,v 0.1 2004/09/26 00:00:00 marco Exp $ -# - -use CGI qw(param); - -$swroot="/var/ipfire"; - -my %netsettings; -my %filtersettings; - -&readhash("$swroot/ethernet/settings", \%netsettings); -&readhash("$swroot/urlfilter/settings", \%filtersettings); - -$category=param("category"); -$url=param("url"); -$ip=param("ip"); - -if ($filtersettings{'MSG_TEXT_1'} eq '') { - $msgtext1 = "A C C E S S    D E N I E D"; -} else { $msgtext1 = $filtersettings{'MSG_TEXT_1'}; } -if ($filtersettings{'MSG_TEXT_2'} eq '') { - $msgtext2 = "Access to the requested page has been denied"; -} else { $msgtext2 = $filtersettings{'MSG_TEXT_2'}; } -if ($filtersettings{'MSG_TEXT_3'} eq '') { - $msgtext3 = "Please contact the Network Administrator if you think there has been an error"; -} else { $msgtext3 = $filtersettings{'MSG_TEXT_3'}; } - -if ($category eq '') { $category = ' '; } else { $category = '['.$category.']'; } - -print "Pragma: no-cache\n"; -print "Cache-control: no-cache\n"; -print "Connection: close\n"; -print "Content-type: text/html\n\n"; - -print < - - - - - -END -; - -if (($filtersettings{'ENABLE_JPEG'} eq 'on') && (-e "/home/httpd/html/images/urlfilter/background.jpg")) -{ -print < -END -; -} else { -print < -END -; -} - -print < - - - - - - - - - - - -
- - $category - -
- - - - - - - - - -
- - $msgtext1 - -
- - $msgtext2 - - -END -; - -if (!($url eq "")) -{ -print <URL: $url -END -; -} - -if (!($ip eq "")) -{ -print <Client IP address: $ip -END -; -} - -print <

$msgtext3 - -

- -
- Web Filtering by - - - IPCop and - - SquidGuard - -
- - - - - - -END -; - -sub readhash -{ - my $filename = $_[0]; - my $hash = $_[1]; - my ($var, $val); - - if (-e $filename) - { - open(FILE, $filename) or die "Unable to read file $filename"; - while () - { - chop; - ($var, $val) = split /=/, $_, 2; - if ($var) - { - $val =~ s/^\'//g; - $val =~ s/\'$//g; - - # Untaint variables read from hash - $var =~ /([A-Za-z0-9_-]*)/; $var = $1; - $val =~ /([\w\W]*)/; $val = $1; - $hash->{$var} = $val; - } - } - close FILE; - } -} -#!/usr/bin/perl - -# -# $Id: redirect.cgi,v 0.1 2004/09/26 00:00:00 marco Exp $ -# - -use CGI qw(param); - -$swroot="/var/ipfire"; - -my %netsettings; -my %filtersettings; - -&readhash("$swroot/ethernet/settings", \%netsettings); -&readhash("$swroot/urlfilter/settings", \%filtersettings); - -$category=param("category"); -$url=param("url"); -$ip=param("ip"); - -if ($filtersettings{'MSG_TEXT_1'} eq '') { - $msgtext1 = "A C C E S S    D E N I E D"; -} else { $msgtext1 = $filtersettings{'MSG_TEXT_1'}; } -if ($filtersettings{'MSG_TEXT_2'} eq '') { - $msgtext2 = "Access to the requested page has been denied"; -} else { $msgtext2 = $filtersettings{'MSG_TEXT_2'}; } -if ($filtersettings{'MSG_TEXT_3'} eq '') { - $msgtext3 = "Please contact the Network Administrator if you think there has been an error"; -} else { $msgtext3 = $filtersettings{'MSG_TEXT_3'}; } - -if ($category eq '') { $category = ' '; } else { $category = '['.$category.']'; } - -print "Pragma: no-cache\n"; -print "Cache-control: no-cache\n"; -print "Connection: close\n"; -print "Content-type: text/html\n\n"; - -print < - - - - - -END -; - -if (($filtersettings{'ENABLE_JPEG'} eq 'on') && (-e "/home/httpd/html/images/urlfilter/background.jpg")) -{ -print < -END -; -} else { -print < -END -; -} - -print < - - - - - - - - - - - -
- - $category - -
- - - - - - - - - -
- - $msgtext1 - -
- - $msgtext2 - - -END -; - -if (!($url eq "")) -{ -print <URL: $url -END -; -} - -if (!($ip eq "")) -{ -print <Client IP address: $ip -END -; -} - -print <

$msgtext3 - -

- -
- Web Filtering by - - - IPCop and - - SquidGuard - -
- - - - - - -END -; - -sub readhash -{ - my $filename = $_[0]; - my $hash = $_[1]; - my ($var, $val); - - if (-e $filename) - { - open(FILE, $filename) or die "Unable to read file $filename"; - while () - { - chop; - ($var, $val) = split /=/, $_, 2; - if ($var) - { - $val =~ s/^\'//g; - $val =~ s/\'$//g; - - # Untaint variables read from hash - $var =~ /([A-Za-z0-9_-]*)/; $var = $1; - $val =~ /([\w\W]*)/; $val = $1; - $hash->{$var} = $val; - } - } - close FILE; - } -} diff --git a/html/cgi-bin/urlfilter.cgi b/html/cgi-bin/urlfilter.cgi index 4da98f974f..78fe9915a1 100644 --- a/html/cgi-bin/urlfilter.cgi +++ b/html/cgi-bin/urlfilter.cgi @@ -3002,6011 +3002,3 @@ sub writeconfigfile } # ------------------------------------------------------------------- -#!/usr/bin/perl -# -# SmoothWall CGIs -# -# This code is distributed under the terms of the GPL -# -# (c) written from scratch -# -# $Id: urlfilter.cgi,v 1.7 2006/05/08 00:00:00 marco Exp $ -# - -use strict; - -# enable only the following on debugging purpose -#use warnings; -#use CGI::Carp 'fatalsToBrowser'; - -use File::Copy; -use IO::Socket; - -require '/var/ipfire/general-functions.pl'; -require "${General::swroot}/lang.pl"; -require "${General::swroot}/header.pl"; - -my %netsettings=(); -my %mainsettings=(); -my %proxysettings=(); -my %filtersettings=(); -my %tcsettings=(); -my %uqsettings=(); -my %besettings=(); -my %updatesettings=(); -my %checked=(); -my %selected=(); -my $id=0; -my $line=''; -my $i=0; -my $n=0; -my $time=''; -my $filesize; -my $category=''; -my $section=''; -my $blacklist=''; -my $blistbackup=''; - -my $changed = 'no'; -my $tcfile = "${General::swroot}/urlfilter/timeconst"; -my $uqfile = "${General::swroot}/urlfilter/userquota"; -my $dbdir = "${General::swroot}/urlfilter/blacklists"; -my $editdir = "${General::swroot}/urlfilter/editor"; -my $repository = "/home/httpd/html/repository"; -my $hintcolour = '#FFFFCC'; - -my $sourceurlfile = "${General::swroot}/urlfilter/autoupdate/autoupdate.urls"; -my $updconffile = "${General::swroot}/urlfilter/autoupdate/autoupdate.conf"; -my $updflagfile = "${General::swroot}/urlfilter/blacklists/.autoupdate.last"; -my $upd_cron_dly = "${General::swroot}/urlfilter/autoupdate/cron.daily"; -my $upd_cron_wly = "${General::swroot}/urlfilter/autoupdate/cron.weekly"; -my $upd_cron_mly = "${General::swroot}/urlfilter/autoupdate/cron.monthly"; - -my $errormessage=''; -my $updatemessage=''; -my $restoremessage=''; -my $buttontext=''; -my $source_name=''; -my $source_url=''; -my $blacklistage=0; - -my @repositorylist=(); -my @repositoryfiles=(); -my @categories=(); -my @selectedcategories=(); -my @filtergroups=(); -my @tclist=(); -my @uqlist=(); -my @source_urllist=(); -my @temp=(); - -my $lastslashpos=0; - -my $toggle=''; -my $gif=''; -my $led=''; -my $ldesc=''; -my $gdesc=''; - -if (! -d $dbdir) { mkdir("$dbdir"); } -if (! -e $tcfile) { system("touch $tcfile"); } -if (! -e $uqfile) { system("touch $uqfile"); } -if (! -e $sourceurlfile) { system("touch $sourceurlfile"); } - -&General::readhash("${General::swroot}/ethernet/settings", \%netsettings); -&General::readhash("${General::swroot}/main/settings", \%mainsettings); -&General::readhash("${General::swroot}/proxy/settings", \%proxysettings); - -&readblockcategories; - -open(FILE, $tcfile); -@tclist = ; -close(FILE); -open(FILE, $uqfile); -@uqlist = ; -close(FILE); -open(FILE, $sourceurlfile); -@source_urllist = ; -close(FILE); - -$filtersettings{'ENABLE_CUSTOM_BLACKLIST'} = 'off'; -$filtersettings{'ENABLE_CUSTOM_WHITELIST'} = 'off'; -$filtersettings{'ENABLE_CUSTOM_EXPRESSIONS'} = 'off'; -$filtersettings{'BLOCK_EXECUTABLES'} = 'off'; -$filtersettings{'BLOCK_AUDIO-VIDEO'} = 'off'; -$filtersettings{'BLOCK_ARCHIVES'} = 'off'; -$filtersettings{'ENABLE_REWRITE'} = 'off'; -$filtersettings{'UNFILTERED_CLIENTS'} = ''; -$filtersettings{'BANNED_CLIENTS'} = ''; -$filtersettings{'SHOW_CATEGORY'} = 'off'; -$filtersettings{'SHOW_URL'} = 'off'; -$filtersettings{'SHOW_IP'} = 'off'; -$filtersettings{'ENABLE_DNSERROR'} = 'off'; -$filtersettings{'ENABLE_JPEG'} = 'off'; -$filtersettings{'REDIRECT_PAGE'} = ''; -$filtersettings{'MSG_TEXT_1'} = ''; -$filtersettings{'MSG_TEXT_2'} = ''; -$filtersettings{'MSG_TEXT_3'} = ''; -$filtersettings{'ENABLE_EXPR_LISTS'} = 'off'; -$filtersettings{'BLOCK_IP_ADDR'} = 'off'; -$filtersettings{'BLOCK_ALL'} = 'off'; -$filtersettings{'ENABLE_EMPTY_ADS'} = 'off'; -$filtersettings{'ENABLE_GLOBAL_WHITELIST'} = 'off'; -$filtersettings{'ENABLE_SAFESEARCH'} = 'off'; -$filtersettings{'ENABLE_LOG'} = 'off'; -$filtersettings{'ENABLE_USERNAME_LOG'} = 'off'; -$filtersettings{'ENABLE_CATEGORY_LOG'} = 'off'; -$filtersettings{'CHILDREN'} = '5'; -$filtersettings{'ENABLE_AUTOUPDATE'} = 'off'; - -$filtersettings{'ACTION'} = ''; -$filtersettings{'VALID'} = ''; - -&Header::getcgihash(\%filtersettings); -&Header::getcgihash(\%tcsettings); -&Header::getcgihash(\%uqsettings); -&Header::getcgihash(\%besettings); - -if (($filtersettings{'ACTION'} eq $Lang::tr{'save'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save and restart'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload file'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter remove file'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload background'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload blacklist'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter backup'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter restore'})) -{ - if (!($filtersettings{'CHILDREN'} =~ /^\d+$/) || ($filtersettings{'CHILDREN'} < 1)) - { - $errormessage = $Lang::tr{'urlfilter invalid num of children'}; - goto ERROR; - } - - if ((!($filtersettings{'REDIRECT_PAGE'} eq '')) && (!($filtersettings{'REDIRECT_PAGE'} =~ /^https?:\/\//))) - { - $filtersettings{'REDIRECT_PAGE'} = "http://".$filtersettings{'REDIRECT_PAGE'}; - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter remove file'}) - { - if (-e "$repository/$filtersettings{'ID'}") { unlink("$repository/$filtersettings{'ID'}"); } - $filtersettings{'ACTION'} = $Lang::tr{'urlfilter manage repository'}; - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload file'}) - { - &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPLOADFILE'}); - - $filtersettings{'ACTION'} = $Lang::tr{'urlfilter manage repository'}; - $_ = $filtersettings{'UPLOADFILE'}; - tr/\\/\//; - $_ = substr($_,rindex($_,"/")+1); - if ($_) { - if (copy($filtersettings{'UPLOADFILE'}, "$repository/$_") != 1) - { - $errormessage = $!; - goto ERROR; - } - } - - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload background'}) - { - &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'BACKGROUND'}); - - if (copy($filtersettings{'BACKGROUND'}, "/home/httpd/html/images/urlfilter/background.jpg") != 1) - { - $errormessage = $!; - goto ERROR; - } - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload blacklist'}) - { - &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPDATEFILE'}); - - if (!($filtersettings{'UPDATEFILE'} =~ /.tar.gz$/)) - { - $errormessage = $Lang::tr{'urlfilter wrong filetype'}; - goto ERROR; - } - - if (copy($filtersettings{'UPDATEFILE'}, "${General::swroot}/urlfilter/blacklists.tar.gz") != 1) - { - $errormessage = $!; - goto ERROR; - } - - if (!(-d "${General::swroot}/urlfilter/update")) { mkdir("${General::swroot}/urlfilter/update"); } - - my $exitcode = system("/bin/tar --no-same-owner -xzf ${General::swroot}/urlfilter/blacklists.tar.gz -C ${General::swroot}/urlfilter/update"); - - if ($exitcode > 0) - { - $errormessage = $Lang::tr{'urlfilter tar error'}; - } else { - - if (-d "${General::swroot}/urlfilter/update/category") - { - system("mv ${General::swroot}/urlfilter/update/category ${General::swroot}/urlfilter/update/blacklists"); - } - - if (!(-d "${General::swroot}/urlfilter/update/blacklists")) - { - $errormessage = $Lang::tr{'urlfilter invalid content'}; - } else { - system("cp -r ${General::swroot}/urlfilter/update/blacklists/* $dbdir"); - - &readblockcategories; - &readcustomlists; - - &writeconfigfile; - - $updatemessage = $Lang::tr{'urlfilter upload success'}; - system("${General::swroot}/urlfilter/bin/prebuild.pl &"); - system("logger -t installpackage[urlfilter] \"URL filter blacklist - Blacklist update from local source completed\""); - } - } - if (-d "${General::swroot}/urlfilter/update") { system("rm -rf ${General::swroot}/urlfilter/update"); } - if (-e "${General::swroot}/urlfilter/blacklists.tar.gz") { unlink("${General::swroot}/urlfilter/blacklists.tar.gz"); } - if ($errormessage) { goto ERROR; } - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter backup'}) - { - $blistbackup = ($filtersettings{'ENABLE_FULLBACKUP'} eq 'on') ? "blacklists" : "blacklists/custom"; - if (system("/bin/tar -C ${General::swroot}/urlfilter -czf ${General::swroot}/urlfilter/backup.tar.gz settings timeconst userquota autoupdate $blistbackup")) - { - $errormessage = $Lang::tr{'urlfilter backup error'}; - goto ERROR; - } - else - { - print "Content-type: application/gzip\n"; - print "Content-length: "; - print (-s "${General::swroot}/urlfilter/backup.tar.gz"); - print "\n"; - print "Content-disposition: attachment; filename=urlfilter-backup.tar.gz\n\n"; - - open (FILE, "${General::swroot}/urlfilter/backup.tar.gz"); - while () { print; } - close (FILE); - - if (-e "${General::swroot}/urlfilter/backup.tar.gz") { unlink("${General::swroot}/urlfilter/backup.tar.gz"); } - exit; - } - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter restore'}) - { - &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPDATEFILE'}); - - if (!($filtersettings{'UPDATEFILE'} =~ /.tar.gz$/)) - { - $errormessage = $Lang::tr{'urlfilter wrong filetype'}; - goto ERROR; - } - - if (!(-d "${General::swroot}/urlfilter/restore")) { mkdir("${General::swroot}/urlfilter/restore"); } - - if (copy($filtersettings{'UPDATEFILE'}, "${General::swroot}/urlfilter/backup.tar.gz") != 1) - { - $errormessage = $!; - } - - my $exitcode = system("/bin/tar --no-same-owner --preserve-permissions -xzf ${General::swroot}/urlfilter/backup.tar.gz -C ${General::swroot}/urlfilter/restore"); - if ($exitcode > 0) - { - $errormessage = $Lang::tr{'urlfilter tar error'}; - } else { - if (!(-e "${General::swroot}/urlfilter/restore/settings")) - { - $errormessage = $Lang::tr{'urlfilter invalid restore file'}; - } else { - system("cp -rp ${General::swroot}/urlfilter/restore/* ${General::swroot}/urlfilter/"); - &readblockcategories; - &readcustomlists; - &writeconfigfile; - - $restoremessage = $Lang::tr{'urlfilter restore success'}; - } - } - - if (-e "${General::swroot}/urlfilter/backup.tar.gz") { unlink("${General::swroot}/urlfilter/backup.tar.gz"); } - if (-d "${General::swroot}/urlfilter/restore") { system("rm -rf ${General::swroot}/urlfilter/restore"); } - if ($errormessage) { goto ERROR; } - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'save'}) - { - $filtersettings{'VALID'} = 'yes'; - &savesettings; - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save and restart'}) - { - if (!(-e "${General::swroot}/proxy/enable")) - { - $errormessage = $Lang::tr{'urlfilter web proxy service required'}; - goto ERROR; - } - if (!($proxysettings{'ENABLE_FILTER'} eq 'on')) - { - $errormessage = $Lang::tr{'urlfilter not enabled'}; - goto ERROR; - } - - $filtersettings{'VALID'} = 'yes'; - &savesettings; - - system("chown -R nobody.nobody $dbdir"); - - if (-e "$dbdir/custom/allowed/domains.db") { unlink("$dbdir/custom/allowed/domains.db"); } - if (-e "$dbdir/custom/allowed/urls.db") { unlink("$dbdir/custom/allowed/urls.db"); } - if (-e "$dbdir/custom/blocked/domains.db") { unlink("$dbdir/custom/blocked/domains.db"); } - if (-e "$dbdir/custom/blocked/urls.db") { unlink("$dbdir/custom/blocked/urls.db"); } - - foreach (<$dbdir/*>) - { - if (-d $_){ system("chmod 644 $_/*"); } - if (-d $_){ system("chmod 666 $_/*.db"); } - } - if (-d "$dbdir/custom/allowed") - { - system("chmod 755 $dbdir/custom/allowed"); - system("chmod 644 $dbdir/custom/allowed/*"); - } - if (-d "$dbdir/custom/blocked") - { - system("chmod 755 $dbdir/custom/blocked"); - system("chmod 644 $dbdir/custom/blocked/*"); - } - - system('/usr/local/bin/restartsquid'); - } - -ERROR: - - if ($errormessage) { $filtersettings{'VALID'} = 'no'; } - -} - -if ($tcsettings{'ACTION'} eq $Lang::tr{'urlfilter set time constraints'}) { $tcsettings{'TCMODE'} = 'on'} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'add'})) -{ - $tcsettings{'TCMODE'}='on'; - - if (!$tcsettings{'DST'}) - { - $errormessage=$Lang::tr{'urlfilter dst error'}; - } - - if (!$tcsettings{'SRC'}) - { - $errormessage=$Lang::tr{'urlfilter src error'}; - } - - if (!($tcsettings{'TO_HOUR'}.$tcsettings{'TO_MINUTE'} gt $tcsettings{'FROM_HOUR'}.$tcsettings{'FROM_MINUTE'})) - { - $errormessage=$Lang::tr{'urlfilter timespace error'}; - } - - if (!(($tcsettings{'MON'} eq 'on') || ($tcsettings{'TUE'} eq 'on') || ($tcsettings{'WED'} eq 'on') || ($tcsettings{'THU'} eq 'on') || ($tcsettings{'FRI'} eq 'on') || ($tcsettings{'SAT'} eq 'on') || ($tcsettings{'SUN'} eq 'on'))) - { - $errormessage=$Lang::tr{'urlfilter weekday error'}; - } - - if (!$errormessage) - { - if ($tcsettings{'DST'} =~ /^any/) { $tcsettings{'DST'} = 'any'; } - if ($tcsettings{'ENABLERULE'} eq 'on') { $tcsettings{'ACTIVE'} = $tcsettings{'ENABLERULE'}; } else { $tcsettings{'ACTIVE'} = 'off'} - - $tcsettings{'ENABLERULE'} = 'on'; - if($tcsettings{'EDITING'} eq 'no') { - open(FILE,">>$tcfile"); - flock FILE, 2; - print FILE "$tcsettings{'DEFINITION'},$tcsettings{'MON'},$tcsettings{'TUE'},$tcsettings{'WED'},$tcsettings{'THU'},$tcsettings{'FRI'},$tcsettings{'SAT'},$tcsettings{'SUN'},$tcsettings{'FROM_HOUR'},$tcsettings{'FROM_MINUTE'},$tcsettings{'TO_HOUR'},$tcsettings{'TO_MINUTE'},$tcsettings{'SRC'},$tcsettings{'DST'},$tcsettings{'ACCESS'},$tcsettings{'ACTIVE'},$tcsettings{'COMMENT'}\n"; - } else { - open(FILE, ">$tcfile"); - flock FILE, 2; - $id = 0; - foreach $line (@tclist) - { - $id++; - if ($tcsettings{'EDITING'} eq $id) { - print FILE "$tcsettings{'DEFINITION'},$tcsettings{'MON'},$tcsettings{'TUE'},$tcsettings{'WED'},$tcsettings{'THU'},$tcsettings{'FRI'},$tcsettings{'SAT'},$tcsettings{'SUN'},$tcsettings{'FROM_HOUR'},$tcsettings{'FROM_MINUTE'},$tcsettings{'TO_HOUR'},$tcsettings{'TO_MINUTE'},$tcsettings{'SRC'},$tcsettings{'DST'},$tcsettings{'ACCESS'},$tcsettings{'ACTIVE'},$tcsettings{'COMMENT'}\n"; - } else { print FILE "$line"; } - } - } - close(FILE); - undef %tcsettings; - $tcsettings{'CHANGED'}='yes'; - $tcsettings{'TCMODE'}='on'; - $changed = 'yes'; - } else { - if ($tcsettings{'EDITING'} ne 'no') - { - $tcsettings{'ACTION'} = $Lang::tr{'edit'}; - $tcsettings{'ID'} = $tcsettings{'EDITING'}; - } - } -} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'remove'})) -{ - $id = 0; - open(FILE, ">$tcfile"); - flock FILE, 2; - foreach $line (@tclist) - { - $id++; - unless ($tcsettings{'ID'} eq $id) { print FILE "$line"; } - } - close(FILE); - $tcsettings{'CHANGED'}='yes'; - $tcsettings{'TCMODE'}='on'; -} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'urlfilter restart'})) -{ - if (!($proxysettings{'ENABLE_FILTER'} eq 'on')) - { - $errormessage = $Lang::tr{'urlfilter not enabled'}; - } - if (!(-e "${General::swroot}/proxy/enable")) - { - $errormessage = $Lang::tr{'urlfilter web proxy service required'}; - } - - if (!$errormessage) { system('/usr/local/bin/restartsquid'); } - $tcsettings{'TCMODE'}='on'; -} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'toggle enable disable'})) -{ - open(FILE, ">$tcfile"); - flock FILE, 2; - $id = 0; - foreach $line (@tclist) - { - $id++; - unless ($tcsettings{'ID'} eq $id) { print FILE "$line"; } - else - { - chomp($line); - @temp = split(/\,/,$line); - if ($temp[15] eq 'on') { $temp[15] = 'off'; } else { $temp[15] = 'on' } - print FILE "$temp[0],$temp[1],$temp[2],$temp[3],$temp[4],$temp[5],$temp[6],$temp[7],$temp[8],$temp[9],$temp[10],$temp[11],$temp[12],$temp[13],$temp[14],$temp[15],$temp[16]\n"; - } - } - close(FILE); - $tcsettings{'CHANGED'}='yes'; - $tcsettings{'TCMODE'}='on'; -} - -if (!$errormessage) { - $tcsettings{'ENABLERULE'}='on'; - $tcsettings{'TO_HOUR'}='24'; -} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'edit'}) && (!$errormessage)) -{ - $id = 0; - foreach $line (@tclist) - { - $id++; - if ($tcsettings{'ID'} eq $id) - { - chomp($line); - @temp = split(/\,/,$line); - $tcsettings{'DEFINITION'} = $temp[0]; - $tcsettings{'MON'} = $temp[1]; - $tcsettings{'TUE'} = $temp[2]; - $tcsettings{'WED'} = $temp[3]; - $tcsettings{'THU'} = $temp[4]; - $tcsettings{'FRI'} = $temp[5]; - $tcsettings{'SAT'} = $temp[6]; - $tcsettings{'SUN'} = $temp[7]; - $tcsettings{'FROM_HOUR'} = $temp[8]; - $tcsettings{'FROM_MINUTE'} = $temp[9]; - $tcsettings{'TO_HOUR'} = $temp[10]; - $tcsettings{'TO_MINUTE'} = $temp[11]; - $tcsettings{'SRC'} = $temp[12]; - $tcsettings{'DST'} = $temp[13]; - $tcsettings{'ACCESS'} = $temp[14]; - $tcsettings{'ENABLERULE'} = $temp[15]; - $tcsettings{'COMMENT'} = $temp[16]; - } - } - $tcsettings{'TCMODE'}='on'; -} - -if ($uqsettings{'ACTION'} eq $Lang::tr{'urlfilter set user quota'}) { $uqsettings{'UQMODE'} = 'on'} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'add'})) -{ - $uqsettings{'UQMODE'}='on'; - - if ((!($uqsettings{'TIME_QUOTA'} =~ /^\d+/)) || ($uqsettings{'TIME_QUOTA'} < '1')) - { - $errormessage=$Lang::tr{'urlfilter quota time error'}; - } - - @temp = split(/\n/,$uqsettings{'QUOTA_USERS'}); - undef $uqsettings{'QUOTA_USERS'}; - foreach (@temp) - { - s/^\s+//g; s/\s+$//g; - if ($_) { $uqsettings{'QUOTA_USERS'} .= $_."\n"; } - } - - if ($uqsettings{'QUOTA_USERS'} eq '') - { - $errormessage=$Lang::tr{'urlfilter quota user error'}; - } - - $_ = $uqsettings{'QUOTA_USERS'}; - chomp; s/\n/|/g; - my $quota_users = $_; - - if ($uqsettings{'QUOTA_USERS'} =~ /\\/) - { - $errormessage=$Lang::tr{'urlfilter invalid user error'}; - } - - if (!$errormessage) { - if ($uqsettings{'ENABLEQUOTA'} eq 'on') { $uqsettings{'ACTIVE'} = $uqsettings{'ENABLEQUOTA'}; } else { $uqsettings{'ACTIVE'} = 'off'} - - $uqsettings{'ENABLERULE'} = 'on'; - if($uqsettings{'EDITING'} eq 'no') { - open(FILE,">>$uqfile"); - flock FILE, 2; - print FILE "$uqsettings{'TIME_QUOTA'},$uqsettings{'SPORADIC'},$uqsettings{'RENEWAL'},$quota_users,$uqsettings{'ACTIVE'}\n"; - } else { - open(FILE, ">$uqfile"); - flock FILE, 2; - $id = 0; - foreach $line (@uqlist) - { - $id++; - if ($uqsettings{'EDITING'} eq $id) { - print FILE "$uqsettings{'TIME_QUOTA'},$uqsettings{'SPORADIC'},$uqsettings{'RENEWAL'},$quota_users,$uqsettings{'ACTIVE'}\n"; - } else { print FILE "$line"; } - } - } - close(FILE); - undef %uqsettings; - $uqsettings{'CHANGED'}='yes'; - $uqsettings{'MODE'}='USERQUOTA'; - $uqsettings{'UQMODE'}='on'; - $changed = 'yes'; - } else { - if ($uqsettings{'EDITING'} ne 'no') - { - $uqsettings{'ACTION'} = $Lang::tr{'edit'}; - $uqsettings{'ID'} = $uqsettings{'EDITING'}; - } - } -} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'remove'})) -{ - $id = 0; - open(FILE, ">$uqfile"); - flock FILE, 2; - foreach $line (@uqlist) - { - $id++; - unless ($uqsettings{'ID'} eq $id) { print FILE "$line"; } - } - close(FILE); - $uqsettings{'CHANGED'}='yes'; - $uqsettings{'UQMODE'}='on'; -} - -if (!$errormessage) { - $uqsettings{'ENABLEQUOTA'}='on'; -} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'edit'}) && (!$errormessage)) -{ - $id = 0; - foreach $line (@uqlist) - { - $id++; - if ($uqsettings{'ID'} eq $id) - { - chomp($line); - @temp = split(/\,/,$line); - $uqsettings{'TIME_QUOTA'} = $temp[0]; - $uqsettings{'SPORADIC'} = $temp[1]; - $uqsettings{'RENEWAL'} = $temp[2]; - $uqsettings{'QUOTA_USERS'} = $temp[3]; - $uqsettings{'ENABLEQUOTA'} = $temp[4]; - } - } - $uqsettings{'UQMODE'}='on'; -} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'toggle enable disable'})) -{ - open(FILE, ">$uqfile"); - flock FILE, 2; - $id = 0; - foreach $line (@uqlist) - { - $id++; - unless ($uqsettings{'ID'} eq $id) { print FILE "$line"; } - else - { - chomp($line); - @temp = split(/\,/,$line); - if ($temp[4] eq 'on') { $temp[4] = 'off'; } else { $temp[4] = 'on' } - print FILE "$temp[0],$temp[1],$temp[2],$temp[3],$temp[4]\n"; - } - } - close(FILE); - $uqsettings{'CHANGED'}='yes'; - $uqsettings{'UQMODE'}='on'; -} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'urlfilter restart'})) -{ - if (!($proxysettings{'ENABLE_FILTER'} eq 'on')) - { - $errormessage = $Lang::tr{'urlfilter not enabled'}; - } - if (!(-e "${General::swroot}/proxy/enable")) - { - $errormessage = $Lang::tr{'urlfilter web proxy service required'}; - } - - if (!$errormessage) { system('/usr/local/bin/restartsquid'); } - $uqsettings{'UQMODE'}='on'; -} - -if ($besettings{'ACTION'} eq $Lang::tr{'urlfilter blacklist editor'}) { $besettings{'BEMODE'} = 'on'; } - -if ($besettings{'MODE'} eq 'BLACKLIST_EDITOR') -{ - @temp = split(/\n/,$besettings{'BE_DOMAINS'}); - undef $besettings{'BE_DOMAINS'}; - foreach (@temp) - { - s/^\s+//g; s/\s+$//g; - if ($_) { $besettings{'BE_DOMAINS'} .= $_."\n"; } - } - chomp($besettings{'BE_DOMAINS'}); - @temp = split(/\n/,$besettings{'BE_URLS'}); - undef $besettings{'BE_URLS'}; - foreach (@temp) - { - s/^\s+//g; s/\s+$//g; - if ($_) { $besettings{'BE_URLS'} .= $_."\n"; } - } - chomp($besettings{'BE_URLS'}); - @temp = split(/\n/,$besettings{'BE_EXPRESSIONS'}); - undef $besettings{'BE_EXPRESSIONS'}; - foreach (@temp) - { - s/^\s+//g; s/\s+$//g; - if ($_) { $besettings{'BE_EXPRESSIONS'} .= $_."\n"; } - } - chomp($besettings{'BE_EXPRESSIONS'}); -} - -if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter load blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR')) -{ - $besettings{'BEMODE'} = 'on'; - - $besettings{'BE_NAME'} = $besettings{'BE_BLACKLIST'}; - - delete $besettings{'BE_DOMAINS'}; - delete $besettings{'BE_URLS'}; - delete $besettings{'BE_EXPRESSIONS'}; - - if (-e "$dbdir/$besettings{'BE_NAME'}/domains") - { - open(FILE, "$dbdir/$besettings{'BE_NAME'}/domains"); - while () { unless ($_ eq '\n') { $besettings{'BE_DOMAINS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_DOMAINS'}); - } - if (-e "$dbdir/$besettings{'BE_NAME'}/urls") - { - open(FILE, "$dbdir/$besettings{'BE_NAME'}/urls"); - while () { unless ($_ eq '\n') { $besettings{'BE_URLS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_URLS'}); - } - if (-e "$dbdir/$besettings{'BE_NAME'}/expressions") - { - open(FILE, "$dbdir/$besettings{'BE_NAME'}/expressions"); - while () { unless ($_ eq '\n') { $besettings{'BE_EXPRESSIONS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_EXPRESSIONS'}); - } -} - -if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter import blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR')) -{ - $besettings{'BEMODE'} = 'on'; - - &Header::getcgihash(\%besettings, {'wantfile' => 1, 'filevar' => 'IMPORTFILE'}); - - if (!($besettings{'IMPORTFILE'} =~ /.tar.gz$/)) - { - $errormessage = $Lang::tr{'urlfilter wrong filetype'}; - } else { - if (!-d "$editdir") { mkdir("$editdir"); } - - if (copy($besettings{'IMPORTFILE'}, "$editdir/blacklist.tar.gz") != 1) - { - $errormessage = $!; - } else { - - my $exitcode = system("/bin/tar --no-same-owner --preserve-permissions -xzf $editdir/blacklist.tar.gz -C $editdir"); - if ($exitcode > 0) - { - $errormessage = $Lang::tr{'urlfilter tar error'}; - } else { - $i = 0; - foreach (<$editdir/blacklists/*>) - { - if (-d) - { - $i++; - $besettings{'BE_NAME'} = substr($_, rindex($_,"/")+1); - } - } - - if (!($i == 1)) - { - $errormessage = $Lang::tr{'urlfilter invalid import file'}; - } else { - delete $besettings{'BE_DOMAINS'}; - delete $besettings{'BE_URLS'}; - delete $besettings{'BE_EXPRESSIONS'}; - - if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/domains") - { - open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/domains"); - while () { unless ($_ eq '\n') { $besettings{'BE_DOMAINS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_DOMAINS'}); - } - if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/urls") - { - open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/urls"); - while () { unless ($_ eq '\n') { $besettings{'BE_URLS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_URLS'}); - } - if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/expressions") - { - open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/expressions"); - while () { unless ($_ eq '\n') { $besettings{'BE_EXPRESSIONS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_EXPRESSIONS'}); - } - } - } - - if (-d $editdir) { system("rm -rf $editdir"); } - - } - } -} - -if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter export blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR')) -{ - $besettings{'BEMODE'} = 'on'; - - if ($besettings{'BE_NAME'} eq '') - { - $errormessage = $Lang::tr{'urlfilter category name error'}; - } elsif ($besettings{'BE_DOMAINS'} || $besettings{'BE_URLS'} || $besettings{'BE_EXPRESSIONS'}) { - - $_ = $besettings{'BE_NAME'}; tr/A-Z/a-z/; $besettings{'BE_NAME'} = $_; - - if (!(-d "$editdir")) { mkdir("$editdir"); } - if (!(-d "$editdir/blacklists")) { mkdir("$editdir/blacklists"); } - if (!(-d "$editdir/blacklists/$besettings{'BE_NAME'}")) { mkdir("$editdir/blacklists/$besettings{'BE_NAME'}"); } - - open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/domains"); - flock FILE, 2; - print FILE "$besettings{'BE_DOMAINS'}\n"; - close FILE; - open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/urls"); - flock FILE, 2; - print FILE "$besettings{'BE_URLS'}\n"; - close FILE; - open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/expressions"); - flock FILE, 2; - print FILE "$besettings{'BE_EXPRESSIONS'}\n"; - close FILE; - - if (system("/bin/tar -C $editdir -czf $editdir/$besettings{'BE_NAME'}.tar.gz blacklists")) - { - $errormessage = $Lang::tr{'urlfilter export error'}; - } - else - { - print "Content-type: application/gzip\n"; - print "Content-length: "; - print (-s "$editdir/$besettings{'BE_NAME'}.tar.gz"); - print "\n"; - print "Content-disposition: attachment; filename=$besettings{'BE_NAME'}.tar.gz\n\n"; - - open (FILE, "$editdir/$besettings{'BE_NAME'}.tar.gz"); - while () { print; } - close (FILE); - - if (-d $editdir) { system("rm -rf $editdir"); } - exit; - } - } else { - $errormessage = $Lang::tr{'urlfilter category data error'}; - } -} - -if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter install blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR')) -{ - $besettings{'BEMODE'} = 'on'; - - if ($besettings{'BE_NAME'} eq '') - { - $errormessage = $Lang::tr{'urlfilter category name error'}; - } elsif ($besettings{'BE_DOMAINS'} || $besettings{'BE_URLS'} || $besettings{'BE_EXPRESSIONS'}) { - - $_ = $besettings{'BE_NAME'}; tr/A-Z/a-z/; $besettings{'BE_NAME'} = $_; - - if (!-d "$editdir") { mkdir("$editdir"); } - - if (!-d "$dbdir/$besettings{'BE_NAME'}") { mkdir("$dbdir/$besettings{'BE_NAME'}"); } - - if (-e "$dbdir/$besettings{'BE_NAME'}/domains") { unlink("$dbdir/$besettings{'BE_NAME'}/domains"); } - if ($besettings{'BE_DOMAINS'}) - { - open(FILE, ">$dbdir/$besettings{'BE_NAME'}/domains"); - flock FILE, 2; - print FILE "$besettings{'BE_DOMAINS'}\n"; - close FILE; - } - if (-e "$dbdir/$besettings{'BE_NAME'}/urls") { unlink("$dbdir/$besettings{'BE_NAME'}/urls"); } - if ($besettings{'BE_URLS'}) - { - open(FILE, ">$dbdir/$besettings{'BE_NAME'}/urls"); - flock FILE, 2; - print FILE "$besettings{'BE_URLS'}\n"; - close FILE; - } - if (-e "$dbdir/$besettings{'BE_NAME'}/expressions") { unlink("$dbdir/$besettings{'BE_NAME'}/expressions"); } - if ($besettings{'BE_EXPRESSIONS'}) - { - open(FILE, ">$dbdir/$besettings{'BE_NAME'}/expressions"); - flock FILE, 2; - print FILE "$besettings{'BE_EXPRESSIONS'}\n"; - close FILE; - } - - open(FILE, ">$editdir/install.conf"); - flock FILE, 2; - print FILE "logdir /var/log/squidGuard\n"; - print FILE "dbhome $dbdir/$besettings{'BE_NAME'}\n\n"; - print FILE "dest $besettings{'BE_NAME'} {\n"; - if ($besettings{'BE_DOMAINS'}) { print FILE " domainlist domains\n"; } - if ($besettings{'BE_URLS'}) { print FILE " urllist urls\n"; } - if ($besettings{'BE_EXPRESSIONS'}) { print FILE " expressions expressions\n"; } - print FILE "}\n\n"; - print FILE "acl {\n"; - print FILE " default {\n"; - print FILE " pass none\n"; - print FILE " }\n"; - print FILE "}\n"; - close FILE; - - system("rm -f $dbdir/$besettings{'BE_NAME'}/*.db"); - system("/usr/sbin/squidGuard -c $editdir/install.conf -C all"); - system("chmod a+w $dbdir/$besettings{'BE_NAME'}/*.db"); - - &readblockcategories; - &readcustomlists; - - &writeconfigfile; - - system('/usr/local/bin/restartsquid') unless ($besettings{'NORESTART'} eq 'on'); - - if (-d $editdir) { system("rm -rf $editdir"); } - } else { - $errormessage = $Lang::tr{'urlfilter category data error'}; - } -} - -if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save schedule'}) -{ - if (($filtersettings{'UPDATE_SOURCE'} eq 'custom') && ($filtersettings{'CUSTOM_UPDATE_URL'} eq '')) - { - $errormessage = $Lang::tr{'urlfilter custom url required'}; - } else { - open (FILE, ">$updconffile"); - print FILE "ENABLE_AUTOUPDATE=$filtersettings{'ENABLE_AUTOUPDATE'}\n"; - print FILE "UPDATE_SCHEDULE=$filtersettings{'UPDATE_SCHEDULE'}\n"; - print FILE "UPDATE_SOURCE=$filtersettings{'UPDATE_SOURCE'}\n"; - print FILE "CUSTOM_UPDATE_URL=$filtersettings{'CUSTOM_UPDATE_URL'}\n"; - close FILE; - - if (-e $upd_cron_dly) { unlink($upd_cron_dly); } - if (-e $upd_cron_wly) { unlink($upd_cron_wly); } - if (-e $upd_cron_mly) { unlink($upd_cron_mly); } - - if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'daily')) - { - symlink("../bin/autoupdate.pl",$upd_cron_dly) - } else { - symlink("/bin/false",$upd_cron_dly) - } - - if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'weekly')) - { - symlink("../bin/autoupdate.pl",$upd_cron_wly) - } else { - symlink("/bin/false",$upd_cron_wly) - } - - if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'monthly')) - { - symlink("../bin/autoupdate.pl",$upd_cron_mly) - } else { - symlink("/bin/false",$upd_cron_mly) - } - } -} - -if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter update now'}) -{ - if ($filtersettings{'UPDATE_SOURCE'} eq 'custom') - { - if ($filtersettings{'CUSTOM_UPDATE_URL'} eq '') - { - $errormessage = $Lang::tr{'urlfilter custom url required'}; - } else { - system("${General::swroot}/urlfilter/bin/autoupdate.pl $filtersettings{'CUSTOM_UPDATE_URL'} &"); - } - } else { - system("${General::swroot}/urlfilter/bin/autoupdate.pl $filtersettings{'UPDATE_SOURCE'} &"); - } -} - - -if (-e "${General::swroot}/urlfilter/settings") { &General::readhash("${General::swroot}/urlfilter/settings", \%filtersettings); } - -&readcustomlists; - -$checked{'ENABLE_CUSTOM_BLACKLIST'}{'off'} = ''; -$checked{'ENABLE_CUSTOM_BLACKLIST'}{'on'} = ''; -$checked{'ENABLE_CUSTOM_BLACKLIST'}{$filtersettings{'ENABLE_CUSTOM_BLACKLIST'}} = "checked='checked'"; -$checked{'ENABLE_CUSTOM_WHITELIST'}{'off'} = ''; -$checked{'ENABLE_CUSTOM_WHITELIST'}{'on'} = ''; -$checked{'ENABLE_CUSTOM_WHITELIST'}{$filtersettings{'ENABLE_CUSTOM_WHITELIST'}} = "checked='checked'"; -$checked{'ENABLE_CUSTOM_EXPRESSIONS'}{'off'} = ''; -$checked{'ENABLE_CUSTOM_EXPRESSIONS'}{'on'} = ''; -$checked{'ENABLE_CUSTOM_EXPRESSIONS'}{$filtersettings{'ENABLE_CUSTOM_EXPRESSIONS'}} = "checked='checked'"; -$checked{'BLOCK_EXECUTABLES'}{'off'} = ''; -$checked{'BLOCK_EXECUTABLES'}{'on'} = ''; -$checked{'BLOCK_EXECUTABLES'}{$filtersettings{'BLOCK_EXECUTABLES'}} = "checked='checked'"; -$checked{'BLOCK_AUDIO-VIDEO'}{'off'} = ''; -$checked{'BLOCK_AUDIO-VIDEO'}{'on'} = ''; -$checked{'BLOCK_AUDIO-VIDEO'}{$filtersettings{'BLOCK_AUDIO-VIDEO'}} = "checked='checked'"; -$checked{'BLOCK_ARCHIVES'}{'off'} = ''; -$checked{'BLOCK_ARCHIVES'}{'on'} = ''; -$checked{'BLOCK_ARCHIVES'}{$filtersettings{'BLOCK_ARCHIVES'}} = "checked='checked'"; -$checked{'ENABLE_REWRITE'}{'off'} = ''; -$checked{'ENABLE_REWRITE'}{'on'} = ''; -$checked{'ENABLE_REWRITE'}{$filtersettings{'ENABLE_REWRITE'}} = "checked='checked'"; -$checked{'SHOW_CATEGORY'}{'off'} = ''; -$checked{'SHOW_CATEGORY'}{'on'} = ''; -$checked{'SHOW_CATEGORY'}{$filtersettings{'SHOW_CATEGORY'}} = "checked='checked'"; -$checked{'SHOW_URL'}{'off'} = ''; -$checked{'SHOW_URL'}{'on'} = ''; -$checked{'SHOW_URL'}{$filtersettings{'SHOW_URL'}} = "checked='checked'"; -$checked{'SHOW_IP'}{'off'} = ''; -$checked{'SHOW_IP'}{'on'} = ''; -$checked{'SHOW_IP'}{$filtersettings{'SHOW_IP'}} = "checked='checked'"; -$checked{'ENABLE_DNSERROR'}{'off'} = ''; -$checked{'ENABLE_DNSERROR'}{'on'} = ''; -$checked{'ENABLE_DNSERROR'}{$filtersettings{'ENABLE_DNSERROR'}} = "checked='checked'"; -$checked{'ENABLE_JPEG'}{'off'} = ''; -$checked{'ENABLE_JPEG'}{'on'} = ''; -$checked{'ENABLE_JPEG'}{$filtersettings{'ENABLE_JPEG'}} = "checked='checked'"; -$checked{'ENABLE_EXPR_LISTS'}{'off'} = ''; -$checked{'ENABLE_EXPR_LISTS'}{'on'} = ''; -$checked{'ENABLE_EXPR_LISTS'}{$filtersettings{'ENABLE_EXPR_LISTS'}} = "checked='checked'"; -$checked{'BLOCK_IP_ADDR'}{'off'} = ''; -$checked{'BLOCK_IP_ADDR'}{'on'} = ''; -$checked{'BLOCK_IP_ADDR'}{$filtersettings{'BLOCK_IP_ADDR'}} = "checked='checked'"; -$checked{'BLOCK_ALL'}{'off'} = ''; -$checked{'BLOCK_ALL'}{'on'} = ''; -$checked{'BLOCK_ALL'}{$filtersettings{'BLOCK_ALL'}} = "checked='checked'"; -$checked{'ENABLE_EMPTY_ADS'}{'off'} = ''; -$checked{'ENABLE_EMPTY_ADS'}{'on'} = ''; -$checked{'ENABLE_EMPTY_ADS'}{$filtersettings{'ENABLE_EMPTY_ADS'}} = "checked='checked'"; -$checked{'ENABLE_GLOBAL_WHITELIST'}{'off'} = ''; -$checked{'ENABLE_GLOBAL_WHITELIST'}{'on'} = ''; -$checked{'ENABLE_GLOBAL_WHITELIST'}{$filtersettings{'ENABLE_GLOBAL_WHITELIST'}} = "checked='checked'"; -$checked{'ENABLE_SAFESEARCH'}{'off'} = ''; -$checked{'ENABLE_SAFESEARCH'}{'on'} = ''; -$checked{'ENABLE_SAFESEARCH'}{$filtersettings{'ENABLE_SAFESEARCH'}} = "checked='checked'"; -$checked{'ENABLE_LOG'}{'off'} = ''; -$checked{'ENABLE_LOG'}{'on'} = ''; -$checked{'ENABLE_LOG'}{$filtersettings{'ENABLE_LOG'}} = "checked='checked'"; -$checked{'ENABLE_USERNAME_LOG'}{'off'} = ''; -$checked{'ENABLE_USERNAME_LOG'}{'on'} = ''; -$checked{'ENABLE_USERNAME_LOG'}{$filtersettings{'ENABLE_USERNAME_LOG'}} = "checked='checked'"; -$checked{'ENABLE_CATEGORY_LOG'}{'off'} = ''; -$checked{'ENABLE_CATEGORY_LOG'}{'on'} = ''; -$checked{'ENABLE_CATEGORY_LOG'}{$filtersettings{'ENABLE_CATEGORY_LOG'}} = "checked='checked'"; - -foreach $category (@filtergroups) { - $checked{$category}{'off'} = ''; - $checked{$category}{'on'} = ''; - $checked{$category}{$filtersettings{$category}} = "checked='checked'"; -} - -$selected{'DEFINITION'}{$tcsettings{'DEFINITION'}} = "selected='selected'"; -$selected{'FROM_HOUR'}{$tcsettings{'FROM_HOUR'}} = "selected='selected'"; -$selected{'FROM_MINUTE'}{$tcsettings{'FROM_MINUTE'}} = "selected='selected'"; -$selected{'TO_HOUR'}{$tcsettings{'TO_HOUR'}} = "selected='selected'"; -$selected{'TO_MINUTE'}{$tcsettings{'TO_MINUTE'}} = "selected='selected'"; - -@selectedcategories = split(/\|/,$tcsettings{'DST'}); -foreach (@selectedcategories) -{ - $selected{'DST'}{$_} = "selected='selected'"; -} - -$selected{'ACCESS'}{$tcsettings{'ACCESS'}} = "selected='selected'"; - -$checked{'ENABLERULE'}{'off'} = ''; -$checked{'ENABLERULE'}{'on'} = ''; -$checked{'ENABLERULE'}{$tcsettings{'ENABLERULE'}} = "checked='checked'"; -$checked{'MON'}{'off'} = ''; -$checked{'MON'}{'on'} = ''; -$checked{'MON'}{$tcsettings{'MON'}} = "checked='checked'"; -$checked{'TUE'}{'off'} = ''; -$checked{'TUE'}{'on'} = ''; -$checked{'TUE'}{$tcsettings{'TUE'}} = "checked='checked'"; -$checked{'WED'}{'off'} = ''; -$checked{'WED'}{'on'} = ''; -$checked{'WED'}{$tcsettings{'WED'}} = "checked='checked'"; -$checked{'THU'}{'off'} = ''; -$checked{'THU'}{'on'} = ''; -$checked{'THU'}{$tcsettings{'THU'}} = "checked='checked'"; -$checked{'FRI'}{'off'} = ''; -$checked{'FRI'}{'on'} = ''; -$checked{'FRI'}{$tcsettings{'FRI'}} = "checked='checked'"; -$checked{'SAT'}{'off'} = ''; -$checked{'SAT'}{'on'} = ''; -$checked{'SAT'}{$tcsettings{'SAT'}} = "checked='checked'"; -$checked{'SUN'}{'off'} = ''; -$checked{'SUN'}{'on'} = ''; -$checked{'SUN'}{$tcsettings{'SUN'}} = "checked='checked'"; - -$selected{'SPORADIC'}{$uqsettings{'SPORADIC'}} = "selected='selected'"; -$selected{'RENEWAL'} {$uqsettings{'RENEWAL'}} = "selected='selected'"; - -$checked{'ENABLEQUOTA'}{'off'} = ''; -$checked{'ENABLEQUOTA'}{'on'} = ''; -$checked{'ENABLEQUOTA'}{$uqsettings{'ENABLEQUOTA'}} = "checked='checked'"; - -$selected{'BE_BLACKLIST'}{$besettings{'BE_BLACKLIST'}} = "selected='selected'"; - - -&Header::showhttpheaders(); - -&Header::openpage($Lang::tr{'urlfilter configuration'}, 1, ''); - -&Header::openbigbox('100%', 'left', '', $errormessage); - -if ($errormessage) { - &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); - print "$errormessage \n"; - &Header::closebox(); -} elsif (($tcsettings{'CHANGED'} eq 'yes') || ($uqsettings{'CHANGED'} eq 'yes') ) { - &writeconfigfile; - print "

\n"; - &Header::openbox('100%', 'left', "$Lang::tr{'urlfilter restart notification'}:"); - print "$Lang::tr{'urlfilter restart message'}\n"; - if ($uqsettings{'MODE'} eq 'USERQUOTA') { print "

$Lang::tr{'urlfilter quota restart message'}\n"; } - print "\n"; - print "

"; - if ($tcsettings{'MODE'} eq 'TIMECONSTRAINT') { print ""; } - if ($uqsettings{'MODE'} eq 'USERQUOTA') { print ""; } - &Header::closebox(); - print "

\n"; -} - -if ($restoremessage) { - &Header::openbox('100%', 'left', "$Lang::tr{'urlfilter restore results'}:"); - print "$restoremessage\n"; - print " \n"; - &Header::closebox(); -} - -if ((!$tcsettings{'TCMODE'}) && (!$uqsettings{'UQMODE'}) && (!$besettings{'BEMODE'})) { - -if (!($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter manage repository'})) { - -#========================================================== -# -# Section: Main Configuration -# -#========================================================== - -print "
\n"; - -&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter filter settings'}:"); -print < - - $Lang::tr{'urlfilter block categories'} - -END -; - -if (@categories == 0) { -print < - $Lang::tr{'urlfilter no categories'} -   -   -   - - -END -; -} - -for ($n=0; $n<=@categories; $n = $n + $i) { - for ($i=0; $i<=3; $i++) { - if ($i eq 0) { print "\n"; } - if (($n+$i) < @categories) { - print "@categories[$n+$i]:<\/td>\n"; - print "\n"; - } - if ($i eq 3) { print "<\/tr>\n"; } - } -} - -print < -
- - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter custom blacklist'}   
$Lang::tr{'urlfilter blocked domains'} *$Lang::tr{'urlfilter blocked urls'} *
- - - - - - - -
$Lang::tr{'urlfilter enable custom blacklist'}:  
-
- - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter custom whitelist'}   
$Lang::tr{'urlfilter allowed domains'} *$Lang::tr{'urlfilter allowed urls'} *
- - - - - - - -
$Lang::tr{'urlfilter enable custom whitelist'}:  
-
- - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter custom expression list'}
$Lang::tr{'urlfilter blocked expressions'} *
$Lang::tr{'urlfilter enable custom expression list'}:  
-
- - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter file ext block'}
$Lang::tr{'urlfilter block executables'}:$Lang::tr{'urlfilter block audio-video'}:
$Lang::tr{'urlfilter block archives'}:  
-
- - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter local file redirection'}
$Lang::tr{'urlfilter enable rewrite rules'}:  
   
-
- - - - - - - - - - - - -
$Lang::tr{'urlfilter network access control'}  
$Lang::tr{'urlfilter unfiltered clients'}: *$Lang::tr{'urlfilter banned clients'}: *
-
- - - - - - - - - - -
$Lang::tr{'urlfilter timebased access control'}
  
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter block settings'}
$Lang::tr{'urlfilter show category'}:$Lang::tr{'urlfilter redirectpage'}: *
$Lang::tr{'urlfilter show url'}:$Lang::tr{'urlfilter msg text 1'}: *
$Lang::tr{'urlfilter show ip'}:$Lang::tr{'urlfilter msg text 2'}: *
$Lang::tr{'urlfilter show dnserror'}:$Lang::tr{'urlfilter msg text 3'}: *
$Lang::tr{'urlfilter enable jpeg'}:  
- - - - - - - - - - -
$Lang::tr{'urlfilter background image'}

$Lang::tr{'urlfilter background text'}:
 
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter advanced settings'}
$Lang::tr{'urlfilter enable expression lists'}:$Lang::tr{'urlfilter enable log'}:
$Lang::tr{'urlfilter safesearch'}:$Lang::tr{'urlfilter username log'}:
$Lang::tr{'urlfilter empty ads'}:$Lang::tr{'urlfilter category log'}:
$Lang::tr{'urlfilter block ip'}:$Lang::tr{'urlfilter children'}:
$Lang::tr{'urlfilter block all'}:$Lang::tr{'urlfilter whitelist always allowed'}:
-
- - - - - -
- *  - $Lang::tr{'this field may be blank'} - -URL filter -
- - - - - - - -
  
-END -; - -&Header::closebox(); - -print "\n"; - -print "
\n"; - -&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter maintenance'}:"); - -print < - -$Lang::tr{'urlfilter blacklist update'} - - -$Lang::tr{'urlfilter upload information'}

$Lang::tr{'urlfilter upload text'}: - - -   - - - -


- - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter automatic blacklist update'} -END -; -if (-e "$updflagfile") -{ -$blacklistage = int(-M "$updflagfile"); -print "  [ $Lang::tr{'urlfilter blacklist age 1'} $blacklistage $Lang::tr{'urlfilter blacklist age 2'} ]"; -} - -$updatesettings{'UPDATE_SCHEDULE'} = 'monthly'; -$updatesettings{'CUSTOM_UPDATE_URL'} = ''; - -if (-e "$updconffile") { &General::readhash("$updconffile", \%updatesettings); } - -$checked{'ENABLE_AUTOUPDATE'}{'off'} = ''; -$checked{'ENABLE_AUTOUPDATE'}{'on'} = ''; -$checked{'ENABLE_AUTOUPDATE'}{$updatesettings{'ENABLE_AUTOUPDATE'}} = "checked='checked'"; - -$selected{'UPDATE_SCHEDULE'}{$updatesettings{'UPDATE_SCHEDULE'}} = "selected='selected'"; - -$selected{'UPDATE_SOURCE'}{$updatesettings{'UPDATE_SOURCE'}} = "selected='selected'"; - -print < -
$Lang::tr{'urlfilter enable automatic blacklist update'}:
$Lang::tr{'urlfilter automatic update schedule'}: - -
$Lang::tr{'urlfilter select source'}: - -
$Lang::tr{'urlfilter custom url'}:
- - - - -
   
- -
- - - - - - - - - - - -
$Lang::tr{'urlfilter blacklist editor'}
$Lang::tr{'urlfilter blacklist editor info'}
- -
- - - - - - - - - - - - - - -
$Lang::tr{'urlfilter backup settings'}
$Lang::tr{'urlfilter enable full backup'}:  
- -
- - - - - - - - - - - -
$Lang::tr{'urlfilter restore settings'}
$Lang::tr{'urlfilter restore text'}:
 
- -END -; - -&Header::closebox(); - -} else { - -#========================================================== -# -# Section: Manage Repository -# -#========================================================== - -print "
\n"; - -&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter manage local file repository'}:"); -print < - - $Lang::tr{'urlfilter repository information'}

- - - $Lang::tr{'urlfilter upload file text'}: - - -   - - -
$Lang::tr{'urlfilter upload file information 1'}: $Lang::tr{'urlfilter upload file information 2'} - - -
- - - - -
- -END -; - -&Header::closebox(); - -&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter current files'}: [$repository]"); - -@repositorylist = <$repository/*>; - -undef @repositoryfiles; -foreach (@repositorylist) -{ - if (!-d) { push(@repositoryfiles,substr($_,rindex($_,"/")+1)); } -} - -if (@repositoryfiles) -{ - print < - - $Lang::tr{'urlfilter filename'} - $Lang::tr{'urlfilter filesize'} - - -END -; - $id = 0; - foreach $line (@repositoryfiles) - { - $id++; - if ($id % 2) { - print "\n"; } - else { - print "\n"; } - $filesize = (-s "$repository/$line"); - 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; - -print <   $line - $filesize    - - -
- - - -
- - - -END -; - } - -print < - - - -
- - - - - - -
  $Lang::tr{'legend'}:    $Lang::tr{$Lang::tr{'remove'}
-END -; -} else { - - print "$Lang::tr{'urlfilter empty repository'}\n"; -} - -&Header::closebox(); - -} - -} elsif ($tcsettings{'TCMODE'}) { - -#========================================================== -# -# Section: Set Time Constraints -# -#========================================================== - -print "
\n"; - -$buttontext = $Lang::tr{'urlfilter add rule'}; -if ($tcsettings{'ACTION'} eq $Lang::tr{'edit'}) { -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter edit time constraint rule'}.':'); -$buttontext = $Lang::tr{'urlfilter update rule'}; -} else { -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter add new time constraint rule'}.':'); -} -print < - - $Lang::tr{'urlfilter constraint definition'} -    - $Lang::tr{'urlfilter monday'} - $Lang::tr{'urlfilter tuesday'} - $Lang::tr{'urlfilter wednesday'} - $Lang::tr{'urlfilter thursday'} - $Lang::tr{'urlfilter friday'} - $Lang::tr{'urlfilter saturday'} - $Lang::tr{'urlfilter sunday'} -    - $Lang::tr{'urlfilter from'} -   - $Lang::tr{'urlfilter to'} -   - - - - - -   - - - - - - - -   - - -END -; -for ($i=0;$i<=45;$i+=15) { -$_ = sprintf("%02s",$i); -print "\n"; -} -print < - - - - - -END -; -for ($i=0;$i<=45;$i+=15) { -$_ = sprintf("%02s",$i); -print "\n"; -} -print < - -   - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter source'}  $Lang::tr{'urlfilter dst'} **  $Lang::tr{'urlfilter access'} 
  - -   - -  
$Lang::tr{'remark'} *    
    
- - - - - -
$Lang::tr{'urlfilter enabled'}
- -

- - - - - - - - - - -
 
-

- - - - - - - - - -
* $Lang::tr{'this field may be blank'}
** $Lang::tr{'urlfilter select multi'}
-END -; - -if ($tcsettings{'ACTION'} eq $Lang::tr{'edit'}) { - print "\n"; -} else { - print "\n"; -} - -&Header::closebox(); -print "

\n"; - -&Header::openbox('100%', 'left', $Lang::tr{'current rules'}); -print < - - $Lang::tr{'urlfilter constraint definition'} - $Lang::tr{'urlfilter time space'} - $Lang::tr{'urlfilter src'} - $Lang::tr{'urlfilter dst'} -   - -END -; - -if ($tcsettings{'ACTION'} ne '' or $changed ne 'no') -{ - open(FILE, $tcfile); - @tclist = ; - close(FILE); -} - -$id = 0; -foreach $line (@tclist) -{ - $id++; - chomp($line); - @temp = split(/\,/,$line); - if($tcsettings{'ACTION'} eq $Lang::tr{'edit'} && $tcsettings{'ID'} eq $id) { - print "\n"; } - elsif ($id % 2) { - print "\n"; } - else { - print "\n"; } - if ($temp[0] eq 'within') { $temp[0]=$Lang::tr{'urlfilter constraint within'}; } else { $temp[0]=$Lang::tr{'urlfilter constraint outside'}; } - if ($temp[13] eq 'any') { $temp[13]=$Lang::tr{'urlfilter category all'}; } - if ($temp[15] eq 'on') { $gif='on.gif'; $toggle='off'; $gdesc=$Lang::tr{'click to disable'};} - else { $gif='off.gif'; $toggle='on'; $gdesc=$Lang::tr{'click to enable'}; } - if ($temp[14] eq 'block') { $led='led-red.gif'; $ldesc=$Lang::tr{'urlfilter block access'};} - else { $led='led-green.gif'; $ldesc=$Lang::tr{'urlfilter allow access'}; } - - undef $time; - if ($temp[1] eq 'on') { $time.=$Lang::tr{'urlfilter mon'}; } else { $time.='='; } - if ($temp[2] eq 'on') { $time.=$Lang::tr{'urlfilter tue'}; } else { $time.='='; } - if ($temp[3] eq 'on') { $time.=$Lang::tr{'urlfilter wed'}; } else { $time.='='; } - if ($temp[4] eq 'on') { $time.=$Lang::tr{'urlfilter thu'}; } else { $time.='='; } - if ($temp[5] eq 'on') { $time.=$Lang::tr{'urlfilter fri'}; } else { $time.='='; } - if ($temp[6] eq 'on') { $time.=$Lang::tr{'urlfilter sat'}; } else { $time.='='; } - if ($temp[7] eq 'on') { $time.=$Lang::tr{'urlfilter sun'}; } else { $time.='='; } - $time=$time.'   '.$temp[8].':'.$temp[9].' to '.$temp[10].':'.$temp[11]; - -print <$temp[0] - $time - $temp[12] - $temp[13] - $ldesc - - -
- - - - - -
- - - -
- - - - -
- - - -
- - - - -
- - - -END -; - if($tcsettings{'ACTION'} eq $Lang::tr{'edit'} && $tcsettings{'ID'} eq $id) { - print "\n"; } - elsif ($id % 2) { - print "\n"; } - else { - print "\n"; } -print <$temp[16] - - - - -END -; -} - -print "\n"; - -# If the time constraint file contains entries, print entries and action icons -if (! -z "$tcfile") { -print < - -   $Lang::tr{'legend'}: -     $Lang::tr{ - $Lang::tr{'urlfilter allow'} -     $Lang::tr{ - $Lang::tr{'urlfilter block'} -   $Lang::tr{ - $Lang::tr{'click to disable'} -     $Lang::tr{ - $Lang::tr{'click to enable'} -     $Lang::tr{ - $Lang::tr{'edit'} -     $Lang::tr{ - $Lang::tr{'remove'} - - -END -; -} - -&Header::closebox(); - -} elsif ($uqsettings{'UQMODE'}) { - -#========================================================== -# -# Section: Set User Quota -# -#========================================================== - -print "
\n"; - -$buttontext = $Lang::tr{'urlfilter add rule'}; -if ($uqsettings{'ACTION'} eq $Lang::tr{'edit'}) { -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter edit user quota rule'}.':'); -$buttontext = $Lang::tr{'urlfilter update rule'}; -} else { -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter add new user quota rule'}.':'); -} -print < - - - - - $Lang::tr{'urlfilter user time quota'}: - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter assigned quota users'}:
- - - - $Lang::tr{'urlfilter activity detection'}: - - - - $Lang::tr{'urlfilter renewal period'}: - - - -   - - - $Lang::tr{'urlfilter enabled'} - - - - -

- - - - - - - - - - -
 
- -

-END -; - -if ($uqsettings{'ACTION'} eq $Lang::tr{'edit'}) { - print "\n"; -} else { - print "\n"; -} - -&Header::closebox(); -print "

\n"; - -&Header::openbox('100%', 'left', $Lang::tr{'current rules'}); -print < - - $Lang::tr{'urlfilter time quota'} - $Lang::tr{'urlfilter activity detection'} - $Lang::tr{'urlfilter renewal'} - $Lang::tr{'urlfilter assigned users'} -   - -END -; - -if ($uqsettings{'ACTION'} ne '' or $changed ne 'no') -{ - open(FILE, $uqfile); - @uqlist = ; - close(FILE); -} - -$id = 0; -foreach $line (@uqlist) -{ - $id++; - chomp($line); - @temp = split(/\,/,$line); - if($uqsettings{'ACTION'} eq $Lang::tr{'edit'} && $uqsettings{'ID'} eq $id) { - print "\n"; } - elsif ($id % 2) { - print "\n"; } - else { - print "\n"; } - if ($temp[4] eq 'on') { $gif='on.gif'; $toggle='off'; $gdesc=$Lang::tr{'click to disable'};} - else { $gif='off.gif'; $toggle='on'; $gdesc=$Lang::tr{'click to enable'}; } - - $temp[5] = $temp[1]; - if ($temp[1] eq '0') { $temp[5] = $Lang::tr{'urlfilter disabled'} } else { $temp[5] = ($temp[5]/60).' '.$Lang::tr{'urlfilter minutes'} } - $_ = $temp[3]; s/\|/, /g; $temp[6] = $_; - -print <$temp[0] $Lang::tr{'urlfilter minutes'} - $temp[5] - $Lang::tr{'urlfilter '.$temp[2]} - $temp[6] - - -
- - - - - -
- - - -
- - - - -
- - - -
- - - - -
- - - -END -; -} - -print "\n"; - -# If the user quota file contains entries, print entries and action icons -if (! -z "$uqfile") { -print < - -   $Lang::tr{'legend'}: -   $Lang::tr{ - $Lang::tr{'click to disable'} -     $Lang::tr{ - $Lang::tr{'click to enable'} -     $Lang::tr{ - $Lang::tr{'edit'} -     $Lang::tr{ - $Lang::tr{'remove'} - - -END -; -} - -&Header::closebox(); - -} else { - -#========================================================== -# -# Section: Blacklist editor -# -#========================================================== - -print "
\n"; - -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter urlfilter blacklist editor'}.':'); - -print < - - - - - $Lang::tr{'urlfilter blacklist name'} - - - $Lang::tr{'urlfilter blacklist category name'}: - - - -
- - - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter edit domains urls expressions'}
$Lang::tr{'urlfilter domains'}$Lang::tr{'urlfilter urls'}
$Lang::tr{'urlfilter expressions'}
-
- - - - - - - - - - - - - -
$Lang::tr{'urlfilter load blacklist'}
$Lang::tr{'urlfilter select blacklist'}: -   
-
- - - - - - - - - - - -
$Lang::tr{'urlfilter import blacklist'}
$Lang::tr{'urlfilter import text'}:
 
-
- - - - - - - -
$Lang::tr{'urlfilter export blacklist'}
-
- - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter install blacklist'}
$Lang::tr{'urlfilter dont restart urlfilter'}:  

$Lang::tr{'urlfilter install information'}
-
- - - - - - -
 
- -END -; - -&Header::closebox(); -print "\n"; - -} - -&Header::closebigbox(); - -&Header::closepage(); - -# ------------------------------------------------------------------- - -sub savesettings -{ - &writeconfigfile; - - delete $filtersettings{'CUSTOM_BLACK_DOMAINS'}; - delete $filtersettings{'CUSTOM_BLACK_URLS'}; - delete $filtersettings{'CUSTOM_WHITE_DOMAINS'}; - delete $filtersettings{'CUSTOM_WHITE_URLS'}; - delete $filtersettings{'CUSTOM_EXPRESSIONS'}; - delete $filtersettings{'BACKGROUND'}; - delete $filtersettings{'UPDATEFILE'}; - - &General::writehash("${General::swroot}/urlfilter/settings", \%filtersettings); -} - -# ------------------------------------------------------------------- - -sub readblockcategories -{ - undef(@categories); - foreach $blacklist (<$dbdir/*>) { - if (-d $blacklist) { - $lastslashpos = rindex($blacklist,"/"); - if ($lastslashpos > -1) { - $section = substr($blacklist,$lastslashpos+1); - } else { - $section = $blacklist; - } - if (!($section eq 'custom')) { push(@categories,$section) }; - } - } - - @filtergroups = @categories; - foreach (@filtergroups) { - tr/a-z/A-Z/; - $_ = "FILTER_".$_; - } -} - -# ------------------------------------------------------------------- - -sub readcustomlists -{ - if (-e "$dbdir/custom/blocked/domains") { - open(FILE,"$dbdir/custom/blocked/domains"); - delete $filtersettings{'CUSTOM_BLACK_DOMAINS'}; - while () { $filtersettings{'CUSTOM_BLACK_DOMAINS'} .= $_ }; - close(FILE); - } - - if (-e "$dbdir/custom/blocked/urls") { - open(FILE,"$dbdir/custom/blocked/urls"); - delete $filtersettings{'CUSTOM_BLACK_URLS'}; - while () { $filtersettings{'CUSTOM_BLACK_URLS'} .= $_ }; - close(FILE); - } - - if (-e "$dbdir/custom/blocked/expressions") { - open(FILE,"$dbdir/custom/blocked/expressions"); - delete $filtersettings{'CUSTOM_EXPRESSIONS'}; - while () { $filtersettings{'CUSTOM_EXPRESSIONS'} .= $_ }; - close(FILE); - } - - if (-e "$dbdir/custom/allowed/domains") { - open(FILE,"$dbdir/custom/allowed/domains"); - delete $filtersettings{'CUSTOM_WHITE_DOMAINS'}; - while () { $filtersettings{'CUSTOM_WHITE_DOMAINS'} .= $_ }; - close(FILE); - } - if (-e "$dbdir/custom/allowed/urls") { - open(FILE,"$dbdir/custom/allowed/urls"); - delete $filtersettings{'CUSTOM_WHITE_URLS'}; - while () { $filtersettings{'CUSTOM_WHITE_URLS'} .= $_ }; - close(FILE); - } -} - -# ------------------------------------------------------------------- - -sub aggregatedconstraints -{ - my $aggregated; - my @old; - my @new; - my @tmp1; - my @tmp2; - my $x; - - if (-e $tcfile) - { - open(TC, $tcfile); - @old = ; - close(TC); - - while (@old > 0) - { - $aggregated = 0; - $x = shift(@old); - chomp($x); - @tmp1 = split(/\,/,$x); - $tmp1[16] = ''; - foreach (@new) - { - @tmp2 = split(/\,/); - if ($tmp2[15] eq 'on') - { - if (($tmp1[0] eq $tmp2[0]) && ($tmp1[12] eq $tmp2[12]) && ($tmp1[13] eq $tmp2[13]) && ($tmp1[14] eq $tmp2[14])) - { - $aggregated = 1; - $tmp2[16] .= " weekly "; - if ($tmp1[1] eq 'on') { $tmp2[16] .= "m"; } - if ($tmp1[2] eq 'on') { $tmp2[16] .= "t"; } - if ($tmp1[3] eq 'on') { $tmp2[16] .= "w"; } - if ($tmp1[4] eq 'on') { $tmp2[16] .= "h"; } - if ($tmp1[5] eq 'on') { $tmp2[16] .= "f"; } - if ($tmp1[6] eq 'on') { $tmp2[16] .= "a"; } - if ($tmp1[7] eq 'on') { $tmp2[16] .= "s"; } - $tmp2[16] .= " $tmp1[8]:$tmp1[9]-$tmp1[10]:$tmp1[11]\n"; - $_ = join(",",@tmp2); - } - - } - } - if (!$aggregated) - { - $tmp1[16] .= " weekly "; - if ($tmp1[1] eq 'on') { $tmp1[16] .= "m"; } - if ($tmp1[2] eq 'on') { $tmp1[16] .= "t"; } - if ($tmp1[3] eq 'on') { $tmp1[16] .= "w"; } - if ($tmp1[4] eq 'on') { $tmp1[16] .= "h"; } - if ($tmp1[5] eq 'on') { $tmp1[16] .= "f"; } - if ($tmp1[6] eq 'on') { $tmp1[16] .= "a"; } - if ($tmp1[7] eq 'on') { $tmp1[16] .= "s"; } - $tmp1[16] .= " $tmp1[8]:$tmp1[9]-$tmp1[10]:$tmp1[11]\n"; - $x = join(",",@tmp1); - push(@new,$x); - } - } - } - - return @new; - -} - -# ------------------------------------------------------------------- - -sub writeconfigfile -{ - my $executables = "\\.\(ade|adp|asx|bas|bat|chm|com|cmd|cpl|crt|dll|eml|exe|hiv|hlp|hta|inc|inf|ins|isp|jse|jtd|lnk|msc|msh|msi|msp|mst|nws|ocx|oft|ops|pcd|pif|plx|reg|scr|sct|sha|shb|shm|shs|sys|tlb|tsp|url|vbe|vbs|vxd|wsc|wsf|wsh\)\$"; - my $audiovideo = "\\.\(aiff|asf|avi|dif|divx|mov|movie|mp3|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wmf|wmv\)\$"; - my $archives = "\\.\(bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$"; - - my $ident = " anonymous"; - - my $defaultrule=''; - my $tcrule=''; - my $redirect=''; - my $qredirect=''; - - my $idx; - - my @ec=(); - my @tc=(); - my @uq=(); - - if (!(-d "$dbdir/custom")) { mkdir("$dbdir/custom") } - if (!(-d "$dbdir/custom/blocked")) { mkdir("$dbdir/custom/blocked") } - if (!(-d "$dbdir/custom/allowed")) { mkdir("$dbdir/custom/allowed") } - - open(FILE, ">/$dbdir/custom/blocked/domains"); - print FILE $filtersettings{'CUSTOM_BLACK_DOMAINS'}; - close(FILE); - open(FILE, ">/$dbdir/custom/blocked/urls"); - print FILE $filtersettings{'CUSTOM_BLACK_URLS'}; - close(FILE); - open(FILE, ">/$dbdir/custom/blocked/expressions"); - print FILE $filtersettings{'CUSTOM_EXPRESSIONS'}; - close(FILE); - open(FILE, ">/$dbdir/custom/blocked/files"); - if ($filtersettings{'BLOCK_EXECUTABLES'} eq 'on') { print FILE "$executables\n"; } - if ($filtersettings{'BLOCK_AUDIO-VIDEO'} eq 'on') { print FILE "$audiovideo\n"; } - if ($filtersettings{'BLOCK_ARCHIVES'} eq 'on') { print FILE "$archives\n"; } - close(FILE); - open(FILE, ">/$dbdir/custom/allowed/domains"); - print FILE $filtersettings{'CUSTOM_WHITE_DOMAINS'}; - close(FILE); - open(FILE, ">/$dbdir/custom/allowed/urls"); - print FILE $filtersettings{'CUSTOM_WHITE_URLS'}; - close(FILE); - - if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { $ident = ""; } - - if ($filtersettings{'REDIRECT_PAGE'} eq '') - { - if (($filtersettings{'SHOW_CATEGORY'} eq 'on') || ($filtersettings{'SHOW_URL'} eq 'on') || ($filtersettings{'SHOW_IP'} eq 'on')) { - if ($filtersettings{'SHOW_CATEGORY'} eq 'on') { $redirect .= "&category=%t"; } - if ($filtersettings{'SHOW_URL'} eq 'on') { $redirect .= "&url=%u"; } - if ($filtersettings{'SHOW_IP'} eq 'on') { $redirect .= "&ip=%a"; } - $redirect =~ s/^&/?/; - $redirect = "http:\/\/$netsettings{'GREEN_ADDRESS'}:81\/redirect.cgi".$redirect; - } else { - $redirect="http:\/\/$netsettings{'GREEN_ADDRESS'}:81\/redirect.cgi"; - } - } else { $redirect=$filtersettings{'REDIRECT_PAGE'}; } - - if ($filtersettings{'ENABLE_DNSERROR'} eq 'on') { $redirect = "302:http://0.0.0.0"; } - - undef $defaultrule; - - if ($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') - { - $defaultrule .= "custom-allowed "; - } - if ($filtersettings{'BLOCK_ALL'} eq 'on') - { - $defaultrule .= "none"; - } - else - { - if ($filtersettings{'BLOCK_IP_ADDR'} eq 'on') - { - $defaultrule .= "!in-addr "; - } - for ($i=0; $i<=@filtergroups; $i++) { - if ($filtersettings{@filtergroups[$i]} eq 'on') - { - $defaultrule .= "!@categories[$i] "; - } - } - if ($filtersettings{'ENABLE_CUSTOM_BLACKLIST'} eq 'on') - { - $defaultrule .= "!custom-blocked "; - } - if ($filtersettings{'ENABLE_CUSTOM_EXPRESSIONS'} eq 'on') - { - $defaultrule .= "!custom-expressions "; - } - if (($filtersettings{'BLOCK_EXECUTABLES'} eq 'on') || - ($filtersettings{'BLOCK_AUDIO-VIDEO'} eq 'on') || - ($filtersettings{'BLOCK_ARCHIVES'} eq 'on')) - { - $defaultrule .= "!files "; - } - $defaultrule .= "any"; - } - - open(FILE, ">${General::swroot}/urlfilter/squidGuard.conf") or die "Unable to write squidGuard.conf file"; - flock(FILE, 2); - - print FILE "logdir /var/log/squidGuard\n"; - print FILE "dbhome $dbdir\n\n"; - - undef @repositoryfiles; - if ($filtersettings{'ENABLE_REWRITE'} eq 'on') - { - @repositorylist = <$repository/*>; - foreach (@repositorylist) - { - if (!-d) { push(@repositoryfiles,substr($_,rindex($_,"/")+1)); } - } - } - - if ((($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) || ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')) - { - print FILE "rewrite rew-rule-0 {\n"; - - if (($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) - { - print FILE " # rewrite localfiles\n"; - foreach (@repositoryfiles) - { - print FILE " s@.*/$_\$\@http://$netsettings{'GREEN_ADDRESS'}:81/repository/$_\@i\n"; - } - } - - if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on') - { - print FILE " # rewrite safesearch\n"; - print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)(\\bsafe=\\w+)(.*)\@\\1\\3safe=strict\\5\@i\n"; - print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)\@\\1safe=strict\\\&\\3\@i\n"; - print FILE " s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W)(.*)(\\bvm=\\w+)(.*)\@\\1\\2vm=r\\4\@i\n"; - print FILE " s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W.*)\@\\1\\\&vm=r\@i\n"; - print FILE " s@(.*\\Walltheweb\\.com/customize\\?)(.*)(\\bcopt_offensive=\\w+)(.*)\@\\1\\2copt_offensive=on\\4\@i\n"; - } - - print FILE "}\n\n"; - - if ((!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) && ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')) { - print FILE "rewrite rew-rule-1 {\n"; - if (($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) - { - print FILE " # rewrite localfiles\n"; - foreach (@repositoryfiles) - { - print FILE " s@.*/$_\$\@http://$netsettings{'GREEN_ADDRESS'}:81/repository/$_\@i\n"; - } - } else { - print FILE " # rewrite nothing\n"; - } - print FILE "}\n\n"; - } - } - - if (-e $uqfile) - { - open(UQ, $uqfile); - @uqlist = ; - close(UQ); - - if (@uqlist > 0) - { - $idx=0; - foreach (@uqlist) - { - chomp; - @uq = split(/\,/); - if ($uq[4] eq 'on') - { - $idx++; - $uq[0] = $uq[0] * 60; - if ($uq[1] eq '0') { - if ($uq[2] eq 'hourly') { $uq[1] = 3600 } - if ($uq[2] eq 'daily') { $uq[1] = 86400 } - if ($uq[2] eq 'weekly') { $uq[1] = 604800 } - } - $uq[3] =~ s/\|/ /g; - print FILE "src quota-$idx {\n"; - print FILE " user $uq[3]\n"; - print FILE " userquota $uq[0] $uq[1] $uq[2]\n"; - print FILE "}\n\n"; - } - } - - } - } - - @tclist = &aggregatedconstraints; - - if (@tclist > 0) - { - $idx=0; - foreach (@tclist) - { - chomp; - @tc = split(/\,/); - if ($tc[15] eq 'on') - { - $idx++; - print FILE "src network-$idx {\n"; - print FILE " ip $tc[12]\n"; - print FILE "}\n\n"; - } - } - - $idx=0; - foreach (@tclist) - { - chomp; - @tc = split(/\,/); - if ($tc[15] eq 'on') - { - $idx++; - print FILE "time constraint-$idx {\n"; - print FILE "$tc[16]\n"; - print FILE "}\n\n"; - } - } - } - - if (!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) { - print FILE "src unfiltered {\n"; - print FILE " ip $filtersettings{'UNFILTERED_CLIENTS'}\n"; - print FILE "}\n\n"; - } - if (!($filtersettings{'BANNED_CLIENTS'} eq '')) { - print FILE "src banned {\n"; - print FILE " ip $filtersettings{'BANNED_CLIENTS'}\n"; - print FILE "}\n\n"; - } - - foreach $category (@categories) { - print FILE "dest $category {\n"; - if (-e "$dbdir/$category/domains") { - print FILE " domainlist $category\/domains\n"; - } - if (-e "$dbdir/$category/urls") { - print FILE " urllist $category\/urls\n"; - } - if ((-e "$dbdir/$category/expressions") && ($filtersettings{'ENABLE_EXPR_LISTS'} eq 'on')) { - print FILE " expressionlist $category\/expressions\n"; - } - if (($category eq 'ads') && ($filtersettings{'ENABLE_EMPTY_ADS'} eq 'on')) - { - print FILE " redirect http:\/\/$netsettings{'GREEN_ADDRESS'}:81\/images/urlfilter/1x1.gif\n"; - } - if ($filtersettings{'ENABLE_LOG'} eq 'on') - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile $ident $category.log\n"; - } else { - print FILE " logfile $ident urlfilter.log\n"; - } - } - print FILE "}\n\n"; - } - - print FILE "dest files {\n"; - print FILE " expressionlist custom\/blocked\/files\n"; - if ($filtersettings{'ENABLE_LOG'} eq 'on') - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile $ident files.log\n"; - } else { - print FILE " logfile $ident urlfilter.log\n"; - } - } - print FILE "}\n\n"; - - print FILE "dest custom-allowed {\n"; - print FILE " domainlist custom\/allowed\/domains\n"; - print FILE " urllist custom\/allowed\/urls\n"; - print FILE "}\n\n"; - - print FILE "dest custom-blocked {\n"; - print FILE " domainlist custom\/blocked\/domains\n"; - print FILE " urllist custom\/blocked\/urls\n"; - if ($filtersettings{'ENABLE_LOG'} eq 'on') - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile $ident custom.log\n"; - } else { - print FILE " logfile $ident urlfilter.log\n"; - } - } - print FILE "}\n\n"; - - print FILE "dest custom-expressions {\n"; - print FILE " expressionlist custom\/blocked\/expressions\n"; - if ($filtersettings{'ENABLE_LOG'} eq 'on') - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile $ident custom.log\n"; - } else { - print FILE " logfile $ident urlfilter.log\n"; - } - } - print FILE "}\n\n"; - - print FILE "acl {\n"; - if (!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) { - print FILE " unfiltered {\n"; - print FILE " pass all\n"; - if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on') - { - print FILE " rewrite rew-rule-1\n"; - } - print FILE " }\n\n"; - } - if (!($filtersettings{'BANNED_CLIENTS'} eq '')) { - print FILE " banned {\n"; - print FILE " pass "; - if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on')) - { - print FILE "custom-allowed "; - } - print FILE "none\n"; - print FILE " }\n\n"; - } - - if (-s $uqfile) - { - open(UQ, $uqfile); - @uqlist = ; - close(UQ); - - $idx=0; - foreach (@uqlist) - { - chomp; - @uq = split(/\,/); - if ($uq[4] eq 'on') - { - $idx++; - $qredirect = $redirect; - $qredirect =~ s/\%t/\%q\%20-\%20\%i/; - print FILE " quota-$idx {\n"; - print FILE " pass "; - if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on')) - { - print FILE "custom-allowed "; - } - print FILE "none\n"; - unless ($redirect eq $qredirect) { print FILE " redirect $qredirect\n"; } - print FILE " }\n\n"; - } - } - } - - if (@tclist > 0) - { - $idx=0; - foreach (@tclist) - { - chomp; - @tc = split(/\,/); - @ec = split(/\|/,$tc[13]); - if ($tc[15] eq 'on') - { - $idx++; - print FILE " network-$idx $tc[0] constraint-$idx {\n"; - print FILE " pass "; - - if ($filtersettings{'BLOCK_ALL'} eq 'on') - { - if ($tc[14] eq 'block') - { - if ((@ec == 1) && ($ec[0] eq 'any')) { - if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on')) - { - print FILE "custom-allowed "; - } - print FILE "none"; - } else { - print FILE $defaultrule; - } - } else { - foreach (@ec) - { - print FILE "$_ "; - } - print FILE $defaultrule unless ((@ec == 1) && ($ec[0] eq 'any')); - } - } else { - if ($tc[14] eq 'block') - { - $tcrule = $defaultrule; - if ($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') { - $tcrule =~ s/custom-allowed //; - print FILE "custom-allowed " unless ((@ec == 1) && ($ec[0] eq 'any') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'off')); - } - if ((@ec == 1) && ($ec[0] eq 'any')) { - print FILE "none"; - } else { - foreach (@ec) - { - print FILE "!$_ " unless (index($defaultrule,"!".$_." ") ge 0); - } - } - print FILE $tcrule unless ((@ec == 1) && ($ec[0] eq 'any')); - } else { - $tcrule = $defaultrule; - foreach (@ec) - { - $tcrule =~ s/!$_ //; - print FILE "$_ " if ($_ eq 'any'); - } - print FILE $tcrule unless ((@ec == 1) && ($ec[0] eq 'any')); - } - } - - print FILE "\n"; - - print FILE " }\n\n"; - } - } - } - - print FILE " default {\n"; - print FILE " pass $defaultrule\n"; - if (($filtersettings{'ENABLE_LOG'} eq 'on') && ($filtersettings{'BLOCK_ALL'} eq 'on')) - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile".$ident." default.log\n"; - } else { - print FILE " logfile".$ident." urlfilter.log\n"; - } - } - if ((($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) || ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')) - { - print FILE " rewrite rew-rule-0\n"; - } - print FILE " redirect $redirect\n"; - print FILE " }\n"; - print FILE "}\n"; - - close FILE; -} - -# ------------------------------------------------------------------- -#!/usr/bin/perl -# -# SmoothWall CGIs -# -# This code is distributed under the terms of the GPL -# -# (c) written from scratch -# -# $Id: urlfilter.cgi,v 1.7 2006/05/08 00:00:00 marco Exp $ -# - -use strict; - -# enable only the following on debugging purpose -#use warnings; -#use CGI::Carp 'fatalsToBrowser'; - -use File::Copy; -use IO::Socket; - -require '/var/ipfire/general-functions.pl'; -require "${General::swroot}/lang.pl"; -require "${General::swroot}/header.pl"; - -my %netsettings=(); -my %mainsettings=(); -my %proxysettings=(); -my %filtersettings=(); -my %tcsettings=(); -my %uqsettings=(); -my %besettings=(); -my %updatesettings=(); -my %checked=(); -my %selected=(); -my $id=0; -my $line=''; -my $i=0; -my $n=0; -my $time=''; -my $filesize; -my $category=''; -my $section=''; -my $blacklist=''; -my $blistbackup=''; - -my $changed = 'no'; -my $tcfile = "${General::swroot}/urlfilter/timeconst"; -my $uqfile = "${General::swroot}/urlfilter/userquota"; -my $dbdir = "${General::swroot}/urlfilter/blacklists"; -my $editdir = "${General::swroot}/urlfilter/editor"; -my $repository = "/home/httpd/html/repository"; -my $hintcolour = '#FFFFCC'; - -my $sourceurlfile = "${General::swroot}/urlfilter/autoupdate/autoupdate.urls"; -my $updconffile = "${General::swroot}/urlfilter/autoupdate/autoupdate.conf"; -my $updflagfile = "${General::swroot}/urlfilter/blacklists/.autoupdate.last"; -my $upd_cron_dly = "${General::swroot}/urlfilter/autoupdate/cron.daily"; -my $upd_cron_wly = "${General::swroot}/urlfilter/autoupdate/cron.weekly"; -my $upd_cron_mly = "${General::swroot}/urlfilter/autoupdate/cron.monthly"; - -my $errormessage=''; -my $updatemessage=''; -my $restoremessage=''; -my $buttontext=''; -my $source_name=''; -my $source_url=''; -my $blacklistage=0; - -my @repositorylist=(); -my @repositoryfiles=(); -my @categories=(); -my @selectedcategories=(); -my @filtergroups=(); -my @tclist=(); -my @uqlist=(); -my @source_urllist=(); -my @temp=(); - -my $lastslashpos=0; - -my $toggle=''; -my $gif=''; -my $led=''; -my $ldesc=''; -my $gdesc=''; - -if (! -d $dbdir) { mkdir("$dbdir"); } -if (! -e $tcfile) { system("touch $tcfile"); } -if (! -e $uqfile) { system("touch $uqfile"); } -if (! -e $sourceurlfile) { system("touch $sourceurlfile"); } - -&General::readhash("${General::swroot}/ethernet/settings", \%netsettings); -&General::readhash("${General::swroot}/main/settings", \%mainsettings); -&General::readhash("${General::swroot}/proxy/settings", \%proxysettings); - -&readblockcategories; - -open(FILE, $tcfile); -@tclist = ; -close(FILE); -open(FILE, $uqfile); -@uqlist = ; -close(FILE); -open(FILE, $sourceurlfile); -@source_urllist = ; -close(FILE); - -$filtersettings{'ENABLE_CUSTOM_BLACKLIST'} = 'off'; -$filtersettings{'ENABLE_CUSTOM_WHITELIST'} = 'off'; -$filtersettings{'ENABLE_CUSTOM_EXPRESSIONS'} = 'off'; -$filtersettings{'BLOCK_EXECUTABLES'} = 'off'; -$filtersettings{'BLOCK_AUDIO-VIDEO'} = 'off'; -$filtersettings{'BLOCK_ARCHIVES'} = 'off'; -$filtersettings{'ENABLE_REWRITE'} = 'off'; -$filtersettings{'UNFILTERED_CLIENTS'} = ''; -$filtersettings{'BANNED_CLIENTS'} = ''; -$filtersettings{'SHOW_CATEGORY'} = 'off'; -$filtersettings{'SHOW_URL'} = 'off'; -$filtersettings{'SHOW_IP'} = 'off'; -$filtersettings{'ENABLE_DNSERROR'} = 'off'; -$filtersettings{'ENABLE_JPEG'} = 'off'; -$filtersettings{'REDIRECT_PAGE'} = ''; -$filtersettings{'MSG_TEXT_1'} = ''; -$filtersettings{'MSG_TEXT_2'} = ''; -$filtersettings{'MSG_TEXT_3'} = ''; -$filtersettings{'ENABLE_EXPR_LISTS'} = 'off'; -$filtersettings{'BLOCK_IP_ADDR'} = 'off'; -$filtersettings{'BLOCK_ALL'} = 'off'; -$filtersettings{'ENABLE_EMPTY_ADS'} = 'off'; -$filtersettings{'ENABLE_GLOBAL_WHITELIST'} = 'off'; -$filtersettings{'ENABLE_SAFESEARCH'} = 'off'; -$filtersettings{'ENABLE_LOG'} = 'off'; -$filtersettings{'ENABLE_USERNAME_LOG'} = 'off'; -$filtersettings{'ENABLE_CATEGORY_LOG'} = 'off'; -$filtersettings{'CHILDREN'} = '5'; -$filtersettings{'ENABLE_AUTOUPDATE'} = 'off'; - -$filtersettings{'ACTION'} = ''; -$filtersettings{'VALID'} = ''; - -&Header::getcgihash(\%filtersettings); -&Header::getcgihash(\%tcsettings); -&Header::getcgihash(\%uqsettings); -&Header::getcgihash(\%besettings); - -if (($filtersettings{'ACTION'} eq $Lang::tr{'save'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save and restart'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload file'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter remove file'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload background'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload blacklist'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter backup'}) || - ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter restore'})) -{ - if (!($filtersettings{'CHILDREN'} =~ /^\d+$/) || ($filtersettings{'CHILDREN'} < 1)) - { - $errormessage = $Lang::tr{'urlfilter invalid num of children'}; - goto ERROR; - } - - if ((!($filtersettings{'REDIRECT_PAGE'} eq '')) && (!($filtersettings{'REDIRECT_PAGE'} =~ /^https?:\/\//))) - { - $filtersettings{'REDIRECT_PAGE'} = "http://".$filtersettings{'REDIRECT_PAGE'}; - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter remove file'}) - { - if (-e "$repository/$filtersettings{'ID'}") { unlink("$repository/$filtersettings{'ID'}"); } - $filtersettings{'ACTION'} = $Lang::tr{'urlfilter manage repository'}; - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload file'}) - { - &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPLOADFILE'}); - - $filtersettings{'ACTION'} = $Lang::tr{'urlfilter manage repository'}; - $_ = $filtersettings{'UPLOADFILE'}; - tr/\\/\//; - $_ = substr($_,rindex($_,"/")+1); - if ($_) { - if (copy($filtersettings{'UPLOADFILE'}, "$repository/$_") != 1) - { - $errormessage = $!; - goto ERROR; - } - } - - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload background'}) - { - &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'BACKGROUND'}); - - if (copy($filtersettings{'BACKGROUND'}, "/home/httpd/html/images/urlfilter/background.jpg") != 1) - { - $errormessage = $!; - goto ERROR; - } - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload blacklist'}) - { - &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPDATEFILE'}); - - if (!($filtersettings{'UPDATEFILE'} =~ /.tar.gz$/)) - { - $errormessage = $Lang::tr{'urlfilter wrong filetype'}; - goto ERROR; - } - - if (copy($filtersettings{'UPDATEFILE'}, "${General::swroot}/urlfilter/blacklists.tar.gz") != 1) - { - $errormessage = $!; - goto ERROR; - } - - if (!(-d "${General::swroot}/urlfilter/update")) { mkdir("${General::swroot}/urlfilter/update"); } - - my $exitcode = system("/bin/tar --no-same-owner -xzf ${General::swroot}/urlfilter/blacklists.tar.gz -C ${General::swroot}/urlfilter/update"); - - if ($exitcode > 0) - { - $errormessage = $Lang::tr{'urlfilter tar error'}; - } else { - - if (-d "${General::swroot}/urlfilter/update/category") - { - system("mv ${General::swroot}/urlfilter/update/category ${General::swroot}/urlfilter/update/blacklists"); - } - - if (!(-d "${General::swroot}/urlfilter/update/blacklists")) - { - $errormessage = $Lang::tr{'urlfilter invalid content'}; - } else { - system("cp -r ${General::swroot}/urlfilter/update/blacklists/* $dbdir"); - - &readblockcategories; - &readcustomlists; - - &writeconfigfile; - - $updatemessage = $Lang::tr{'urlfilter upload success'}; - system("${General::swroot}/urlfilter/bin/prebuild.pl &"); - system("logger -t installpackage[urlfilter] \"URL filter blacklist - Blacklist update from local source completed\""); - } - } - if (-d "${General::swroot}/urlfilter/update") { system("rm -rf ${General::swroot}/urlfilter/update"); } - if (-e "${General::swroot}/urlfilter/blacklists.tar.gz") { unlink("${General::swroot}/urlfilter/blacklists.tar.gz"); } - if ($errormessage) { goto ERROR; } - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter backup'}) - { - $blistbackup = ($filtersettings{'ENABLE_FULLBACKUP'} eq 'on') ? "blacklists" : "blacklists/custom"; - if (system("/bin/tar -C ${General::swroot}/urlfilter -czf ${General::swroot}/urlfilter/backup.tar.gz settings timeconst userquota autoupdate $blistbackup")) - { - $errormessage = $Lang::tr{'urlfilter backup error'}; - goto ERROR; - } - else - { - print "Content-type: application/gzip\n"; - print "Content-length: "; - print (-s "${General::swroot}/urlfilter/backup.tar.gz"); - print "\n"; - print "Content-disposition: attachment; filename=urlfilter-backup.tar.gz\n\n"; - - open (FILE, "${General::swroot}/urlfilter/backup.tar.gz"); - while () { print; } - close (FILE); - - if (-e "${General::swroot}/urlfilter/backup.tar.gz") { unlink("${General::swroot}/urlfilter/backup.tar.gz"); } - exit; - } - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter restore'}) - { - &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPDATEFILE'}); - - if (!($filtersettings{'UPDATEFILE'} =~ /.tar.gz$/)) - { - $errormessage = $Lang::tr{'urlfilter wrong filetype'}; - goto ERROR; - } - - if (!(-d "${General::swroot}/urlfilter/restore")) { mkdir("${General::swroot}/urlfilter/restore"); } - - if (copy($filtersettings{'UPDATEFILE'}, "${General::swroot}/urlfilter/backup.tar.gz") != 1) - { - $errormessage = $!; - } - - my $exitcode = system("/bin/tar --no-same-owner --preserve-permissions -xzf ${General::swroot}/urlfilter/backup.tar.gz -C ${General::swroot}/urlfilter/restore"); - if ($exitcode > 0) - { - $errormessage = $Lang::tr{'urlfilter tar error'}; - } else { - if (!(-e "${General::swroot}/urlfilter/restore/settings")) - { - $errormessage = $Lang::tr{'urlfilter invalid restore file'}; - } else { - system("cp -rp ${General::swroot}/urlfilter/restore/* ${General::swroot}/urlfilter/"); - &readblockcategories; - &readcustomlists; - &writeconfigfile; - - $restoremessage = $Lang::tr{'urlfilter restore success'}; - } - } - - if (-e "${General::swroot}/urlfilter/backup.tar.gz") { unlink("${General::swroot}/urlfilter/backup.tar.gz"); } - if (-d "${General::swroot}/urlfilter/restore") { system("rm -rf ${General::swroot}/urlfilter/restore"); } - if ($errormessage) { goto ERROR; } - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'save'}) - { - $filtersettings{'VALID'} = 'yes'; - &savesettings; - } - - if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save and restart'}) - { - if (!(-e "${General::swroot}/proxy/enable")) - { - $errormessage = $Lang::tr{'urlfilter web proxy service required'}; - goto ERROR; - } - if (!($proxysettings{'ENABLE_FILTER'} eq 'on')) - { - $errormessage = $Lang::tr{'urlfilter not enabled'}; - goto ERROR; - } - - $filtersettings{'VALID'} = 'yes'; - &savesettings; - - system("chown -R nobody.nobody $dbdir"); - - if (-e "$dbdir/custom/allowed/domains.db") { unlink("$dbdir/custom/allowed/domains.db"); } - if (-e "$dbdir/custom/allowed/urls.db") { unlink("$dbdir/custom/allowed/urls.db"); } - if (-e "$dbdir/custom/blocked/domains.db") { unlink("$dbdir/custom/blocked/domains.db"); } - if (-e "$dbdir/custom/blocked/urls.db") { unlink("$dbdir/custom/blocked/urls.db"); } - - foreach (<$dbdir/*>) - { - if (-d $_){ system("chmod 644 $_/*"); } - if (-d $_){ system("chmod 666 $_/*.db"); } - } - if (-d "$dbdir/custom/allowed") - { - system("chmod 755 $dbdir/custom/allowed"); - system("chmod 644 $dbdir/custom/allowed/*"); - } - if (-d "$dbdir/custom/blocked") - { - system("chmod 755 $dbdir/custom/blocked"); - system("chmod 644 $dbdir/custom/blocked/*"); - } - - system('/usr/local/bin/restartsquid'); - } - -ERROR: - - if ($errormessage) { $filtersettings{'VALID'} = 'no'; } - -} - -if ($tcsettings{'ACTION'} eq $Lang::tr{'urlfilter set time constraints'}) { $tcsettings{'TCMODE'} = 'on'} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'add'})) -{ - $tcsettings{'TCMODE'}='on'; - - if (!$tcsettings{'DST'}) - { - $errormessage=$Lang::tr{'urlfilter dst error'}; - } - - if (!$tcsettings{'SRC'}) - { - $errormessage=$Lang::tr{'urlfilter src error'}; - } - - if (!($tcsettings{'TO_HOUR'}.$tcsettings{'TO_MINUTE'} gt $tcsettings{'FROM_HOUR'}.$tcsettings{'FROM_MINUTE'})) - { - $errormessage=$Lang::tr{'urlfilter timespace error'}; - } - - if (!(($tcsettings{'MON'} eq 'on') || ($tcsettings{'TUE'} eq 'on') || ($tcsettings{'WED'} eq 'on') || ($tcsettings{'THU'} eq 'on') || ($tcsettings{'FRI'} eq 'on') || ($tcsettings{'SAT'} eq 'on') || ($tcsettings{'SUN'} eq 'on'))) - { - $errormessage=$Lang::tr{'urlfilter weekday error'}; - } - - if (!$errormessage) - { - if ($tcsettings{'DST'} =~ /^any/) { $tcsettings{'DST'} = 'any'; } - if ($tcsettings{'ENABLERULE'} eq 'on') { $tcsettings{'ACTIVE'} = $tcsettings{'ENABLERULE'}; } else { $tcsettings{'ACTIVE'} = 'off'} - - $tcsettings{'ENABLERULE'} = 'on'; - if($tcsettings{'EDITING'} eq 'no') { - open(FILE,">>$tcfile"); - flock FILE, 2; - print FILE "$tcsettings{'DEFINITION'},$tcsettings{'MON'},$tcsettings{'TUE'},$tcsettings{'WED'},$tcsettings{'THU'},$tcsettings{'FRI'},$tcsettings{'SAT'},$tcsettings{'SUN'},$tcsettings{'FROM_HOUR'},$tcsettings{'FROM_MINUTE'},$tcsettings{'TO_HOUR'},$tcsettings{'TO_MINUTE'},$tcsettings{'SRC'},$tcsettings{'DST'},$tcsettings{'ACCESS'},$tcsettings{'ACTIVE'},$tcsettings{'COMMENT'}\n"; - } else { - open(FILE, ">$tcfile"); - flock FILE, 2; - $id = 0; - foreach $line (@tclist) - { - $id++; - if ($tcsettings{'EDITING'} eq $id) { - print FILE "$tcsettings{'DEFINITION'},$tcsettings{'MON'},$tcsettings{'TUE'},$tcsettings{'WED'},$tcsettings{'THU'},$tcsettings{'FRI'},$tcsettings{'SAT'},$tcsettings{'SUN'},$tcsettings{'FROM_HOUR'},$tcsettings{'FROM_MINUTE'},$tcsettings{'TO_HOUR'},$tcsettings{'TO_MINUTE'},$tcsettings{'SRC'},$tcsettings{'DST'},$tcsettings{'ACCESS'},$tcsettings{'ACTIVE'},$tcsettings{'COMMENT'}\n"; - } else { print FILE "$line"; } - } - } - close(FILE); - undef %tcsettings; - $tcsettings{'CHANGED'}='yes'; - $tcsettings{'TCMODE'}='on'; - $changed = 'yes'; - } else { - if ($tcsettings{'EDITING'} ne 'no') - { - $tcsettings{'ACTION'} = $Lang::tr{'edit'}; - $tcsettings{'ID'} = $tcsettings{'EDITING'}; - } - } -} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'remove'})) -{ - $id = 0; - open(FILE, ">$tcfile"); - flock FILE, 2; - foreach $line (@tclist) - { - $id++; - unless ($tcsettings{'ID'} eq $id) { print FILE "$line"; } - } - close(FILE); - $tcsettings{'CHANGED'}='yes'; - $tcsettings{'TCMODE'}='on'; -} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'urlfilter restart'})) -{ - if (!($proxysettings{'ENABLE_FILTER'} eq 'on')) - { - $errormessage = $Lang::tr{'urlfilter not enabled'}; - } - if (!(-e "${General::swroot}/proxy/enable")) - { - $errormessage = $Lang::tr{'urlfilter web proxy service required'}; - } - - if (!$errormessage) { system('/usr/local/bin/restartsquid'); } - $tcsettings{'TCMODE'}='on'; -} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'toggle enable disable'})) -{ - open(FILE, ">$tcfile"); - flock FILE, 2; - $id = 0; - foreach $line (@tclist) - { - $id++; - unless ($tcsettings{'ID'} eq $id) { print FILE "$line"; } - else - { - chomp($line); - @temp = split(/\,/,$line); - if ($temp[15] eq 'on') { $temp[15] = 'off'; } else { $temp[15] = 'on' } - print FILE "$temp[0],$temp[1],$temp[2],$temp[3],$temp[4],$temp[5],$temp[6],$temp[7],$temp[8],$temp[9],$temp[10],$temp[11],$temp[12],$temp[13],$temp[14],$temp[15],$temp[16]\n"; - } - } - close(FILE); - $tcsettings{'CHANGED'}='yes'; - $tcsettings{'TCMODE'}='on'; -} - -if (!$errormessage) { - $tcsettings{'ENABLERULE'}='on'; - $tcsettings{'TO_HOUR'}='24'; -} - -if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'edit'}) && (!$errormessage)) -{ - $id = 0; - foreach $line (@tclist) - { - $id++; - if ($tcsettings{'ID'} eq $id) - { - chomp($line); - @temp = split(/\,/,$line); - $tcsettings{'DEFINITION'} = $temp[0]; - $tcsettings{'MON'} = $temp[1]; - $tcsettings{'TUE'} = $temp[2]; - $tcsettings{'WED'} = $temp[3]; - $tcsettings{'THU'} = $temp[4]; - $tcsettings{'FRI'} = $temp[5]; - $tcsettings{'SAT'} = $temp[6]; - $tcsettings{'SUN'} = $temp[7]; - $tcsettings{'FROM_HOUR'} = $temp[8]; - $tcsettings{'FROM_MINUTE'} = $temp[9]; - $tcsettings{'TO_HOUR'} = $temp[10]; - $tcsettings{'TO_MINUTE'} = $temp[11]; - $tcsettings{'SRC'} = $temp[12]; - $tcsettings{'DST'} = $temp[13]; - $tcsettings{'ACCESS'} = $temp[14]; - $tcsettings{'ENABLERULE'} = $temp[15]; - $tcsettings{'COMMENT'} = $temp[16]; - } - } - $tcsettings{'TCMODE'}='on'; -} - -if ($uqsettings{'ACTION'} eq $Lang::tr{'urlfilter set user quota'}) { $uqsettings{'UQMODE'} = 'on'} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'add'})) -{ - $uqsettings{'UQMODE'}='on'; - - if ((!($uqsettings{'TIME_QUOTA'} =~ /^\d+/)) || ($uqsettings{'TIME_QUOTA'} < '1')) - { - $errormessage=$Lang::tr{'urlfilter quota time error'}; - } - - @temp = split(/\n/,$uqsettings{'QUOTA_USERS'}); - undef $uqsettings{'QUOTA_USERS'}; - foreach (@temp) - { - s/^\s+//g; s/\s+$//g; - if ($_) { $uqsettings{'QUOTA_USERS'} .= $_."\n"; } - } - - if ($uqsettings{'QUOTA_USERS'} eq '') - { - $errormessage=$Lang::tr{'urlfilter quota user error'}; - } - - $_ = $uqsettings{'QUOTA_USERS'}; - chomp; s/\n/|/g; - my $quota_users = $_; - - if ($uqsettings{'QUOTA_USERS'} =~ /\\/) - { - $errormessage=$Lang::tr{'urlfilter invalid user error'}; - } - - if (!$errormessage) { - if ($uqsettings{'ENABLEQUOTA'} eq 'on') { $uqsettings{'ACTIVE'} = $uqsettings{'ENABLEQUOTA'}; } else { $uqsettings{'ACTIVE'} = 'off'} - - $uqsettings{'ENABLERULE'} = 'on'; - if($uqsettings{'EDITING'} eq 'no') { - open(FILE,">>$uqfile"); - flock FILE, 2; - print FILE "$uqsettings{'TIME_QUOTA'},$uqsettings{'SPORADIC'},$uqsettings{'RENEWAL'},$quota_users,$uqsettings{'ACTIVE'}\n"; - } else { - open(FILE, ">$uqfile"); - flock FILE, 2; - $id = 0; - foreach $line (@uqlist) - { - $id++; - if ($uqsettings{'EDITING'} eq $id) { - print FILE "$uqsettings{'TIME_QUOTA'},$uqsettings{'SPORADIC'},$uqsettings{'RENEWAL'},$quota_users,$uqsettings{'ACTIVE'}\n"; - } else { print FILE "$line"; } - } - } - close(FILE); - undef %uqsettings; - $uqsettings{'CHANGED'}='yes'; - $uqsettings{'MODE'}='USERQUOTA'; - $uqsettings{'UQMODE'}='on'; - $changed = 'yes'; - } else { - if ($uqsettings{'EDITING'} ne 'no') - { - $uqsettings{'ACTION'} = $Lang::tr{'edit'}; - $uqsettings{'ID'} = $uqsettings{'EDITING'}; - } - } -} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'remove'})) -{ - $id = 0; - open(FILE, ">$uqfile"); - flock FILE, 2; - foreach $line (@uqlist) - { - $id++; - unless ($uqsettings{'ID'} eq $id) { print FILE "$line"; } - } - close(FILE); - $uqsettings{'CHANGED'}='yes'; - $uqsettings{'UQMODE'}='on'; -} - -if (!$errormessage) { - $uqsettings{'ENABLEQUOTA'}='on'; -} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'edit'}) && (!$errormessage)) -{ - $id = 0; - foreach $line (@uqlist) - { - $id++; - if ($uqsettings{'ID'} eq $id) - { - chomp($line); - @temp = split(/\,/,$line); - $uqsettings{'TIME_QUOTA'} = $temp[0]; - $uqsettings{'SPORADIC'} = $temp[1]; - $uqsettings{'RENEWAL'} = $temp[2]; - $uqsettings{'QUOTA_USERS'} = $temp[3]; - $uqsettings{'ENABLEQUOTA'} = $temp[4]; - } - } - $uqsettings{'UQMODE'}='on'; -} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'toggle enable disable'})) -{ - open(FILE, ">$uqfile"); - flock FILE, 2; - $id = 0; - foreach $line (@uqlist) - { - $id++; - unless ($uqsettings{'ID'} eq $id) { print FILE "$line"; } - else - { - chomp($line); - @temp = split(/\,/,$line); - if ($temp[4] eq 'on') { $temp[4] = 'off'; } else { $temp[4] = 'on' } - print FILE "$temp[0],$temp[1],$temp[2],$temp[3],$temp[4]\n"; - } - } - close(FILE); - $uqsettings{'CHANGED'}='yes'; - $uqsettings{'UQMODE'}='on'; -} - -if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'urlfilter restart'})) -{ - if (!($proxysettings{'ENABLE_FILTER'} eq 'on')) - { - $errormessage = $Lang::tr{'urlfilter not enabled'}; - } - if (!(-e "${General::swroot}/proxy/enable")) - { - $errormessage = $Lang::tr{'urlfilter web proxy service required'}; - } - - if (!$errormessage) { system('/usr/local/bin/restartsquid'); } - $uqsettings{'UQMODE'}='on'; -} - -if ($besettings{'ACTION'} eq $Lang::tr{'urlfilter blacklist editor'}) { $besettings{'BEMODE'} = 'on'; } - -if ($besettings{'MODE'} eq 'BLACKLIST_EDITOR') -{ - @temp = split(/\n/,$besettings{'BE_DOMAINS'}); - undef $besettings{'BE_DOMAINS'}; - foreach (@temp) - { - s/^\s+//g; s/\s+$//g; - if ($_) { $besettings{'BE_DOMAINS'} .= $_."\n"; } - } - chomp($besettings{'BE_DOMAINS'}); - @temp = split(/\n/,$besettings{'BE_URLS'}); - undef $besettings{'BE_URLS'}; - foreach (@temp) - { - s/^\s+//g; s/\s+$//g; - if ($_) { $besettings{'BE_URLS'} .= $_."\n"; } - } - chomp($besettings{'BE_URLS'}); - @temp = split(/\n/,$besettings{'BE_EXPRESSIONS'}); - undef $besettings{'BE_EXPRESSIONS'}; - foreach (@temp) - { - s/^\s+//g; s/\s+$//g; - if ($_) { $besettings{'BE_EXPRESSIONS'} .= $_."\n"; } - } - chomp($besettings{'BE_EXPRESSIONS'}); -} - -if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter load blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR')) -{ - $besettings{'BEMODE'} = 'on'; - - $besettings{'BE_NAME'} = $besettings{'BE_BLACKLIST'}; - - delete $besettings{'BE_DOMAINS'}; - delete $besettings{'BE_URLS'}; - delete $besettings{'BE_EXPRESSIONS'}; - - if (-e "$dbdir/$besettings{'BE_NAME'}/domains") - { - open(FILE, "$dbdir/$besettings{'BE_NAME'}/domains"); - while () { unless ($_ eq '\n') { $besettings{'BE_DOMAINS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_DOMAINS'}); - } - if (-e "$dbdir/$besettings{'BE_NAME'}/urls") - { - open(FILE, "$dbdir/$besettings{'BE_NAME'}/urls"); - while () { unless ($_ eq '\n') { $besettings{'BE_URLS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_URLS'}); - } - if (-e "$dbdir/$besettings{'BE_NAME'}/expressions") - { - open(FILE, "$dbdir/$besettings{'BE_NAME'}/expressions"); - while () { unless ($_ eq '\n') { $besettings{'BE_EXPRESSIONS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_EXPRESSIONS'}); - } -} - -if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter import blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR')) -{ - $besettings{'BEMODE'} = 'on'; - - &Header::getcgihash(\%besettings, {'wantfile' => 1, 'filevar' => 'IMPORTFILE'}); - - if (!($besettings{'IMPORTFILE'} =~ /.tar.gz$/)) - { - $errormessage = $Lang::tr{'urlfilter wrong filetype'}; - } else { - if (!-d "$editdir") { mkdir("$editdir"); } - - if (copy($besettings{'IMPORTFILE'}, "$editdir/blacklist.tar.gz") != 1) - { - $errormessage = $!; - } else { - - my $exitcode = system("/bin/tar --no-same-owner --preserve-permissions -xzf $editdir/blacklist.tar.gz -C $editdir"); - if ($exitcode > 0) - { - $errormessage = $Lang::tr{'urlfilter tar error'}; - } else { - $i = 0; - foreach (<$editdir/blacklists/*>) - { - if (-d) - { - $i++; - $besettings{'BE_NAME'} = substr($_, rindex($_,"/")+1); - } - } - - if (!($i == 1)) - { - $errormessage = $Lang::tr{'urlfilter invalid import file'}; - } else { - delete $besettings{'BE_DOMAINS'}; - delete $besettings{'BE_URLS'}; - delete $besettings{'BE_EXPRESSIONS'}; - - if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/domains") - { - open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/domains"); - while () { unless ($_ eq '\n') { $besettings{'BE_DOMAINS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_DOMAINS'}); - } - if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/urls") - { - open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/urls"); - while () { unless ($_ eq '\n') { $besettings{'BE_URLS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_URLS'}); - } - if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/expressions") - { - open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/expressions"); - while () { unless ($_ eq '\n') { $besettings{'BE_EXPRESSIONS'} .= $_ } }; - close FILE; - chomp($besettings{'BE_EXPRESSIONS'}); - } - } - } - - if (-d $editdir) { system("rm -rf $editdir"); } - - } - } -} - -if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter export blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR')) -{ - $besettings{'BEMODE'} = 'on'; - - if ($besettings{'BE_NAME'} eq '') - { - $errormessage = $Lang::tr{'urlfilter category name error'}; - } elsif ($besettings{'BE_DOMAINS'} || $besettings{'BE_URLS'} || $besettings{'BE_EXPRESSIONS'}) { - - $_ = $besettings{'BE_NAME'}; tr/A-Z/a-z/; $besettings{'BE_NAME'} = $_; - - if (!(-d "$editdir")) { mkdir("$editdir"); } - if (!(-d "$editdir/blacklists")) { mkdir("$editdir/blacklists"); } - if (!(-d "$editdir/blacklists/$besettings{'BE_NAME'}")) { mkdir("$editdir/blacklists/$besettings{'BE_NAME'}"); } - - open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/domains"); - flock FILE, 2; - print FILE "$besettings{'BE_DOMAINS'}\n"; - close FILE; - open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/urls"); - flock FILE, 2; - print FILE "$besettings{'BE_URLS'}\n"; - close FILE; - open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/expressions"); - flock FILE, 2; - print FILE "$besettings{'BE_EXPRESSIONS'}\n"; - close FILE; - - if (system("/bin/tar -C $editdir -czf $editdir/$besettings{'BE_NAME'}.tar.gz blacklists")) - { - $errormessage = $Lang::tr{'urlfilter export error'}; - } - else - { - print "Content-type: application/gzip\n"; - print "Content-length: "; - print (-s "$editdir/$besettings{'BE_NAME'}.tar.gz"); - print "\n"; - print "Content-disposition: attachment; filename=$besettings{'BE_NAME'}.tar.gz\n\n"; - - open (FILE, "$editdir/$besettings{'BE_NAME'}.tar.gz"); - while () { print; } - close (FILE); - - if (-d $editdir) { system("rm -rf $editdir"); } - exit; - } - } else { - $errormessage = $Lang::tr{'urlfilter category data error'}; - } -} - -if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter install blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR')) -{ - $besettings{'BEMODE'} = 'on'; - - if ($besettings{'BE_NAME'} eq '') - { - $errormessage = $Lang::tr{'urlfilter category name error'}; - } elsif ($besettings{'BE_DOMAINS'} || $besettings{'BE_URLS'} || $besettings{'BE_EXPRESSIONS'}) { - - $_ = $besettings{'BE_NAME'}; tr/A-Z/a-z/; $besettings{'BE_NAME'} = $_; - - if (!-d "$editdir") { mkdir("$editdir"); } - - if (!-d "$dbdir/$besettings{'BE_NAME'}") { mkdir("$dbdir/$besettings{'BE_NAME'}"); } - - if (-e "$dbdir/$besettings{'BE_NAME'}/domains") { unlink("$dbdir/$besettings{'BE_NAME'}/domains"); } - if ($besettings{'BE_DOMAINS'}) - { - open(FILE, ">$dbdir/$besettings{'BE_NAME'}/domains"); - flock FILE, 2; - print FILE "$besettings{'BE_DOMAINS'}\n"; - close FILE; - } - if (-e "$dbdir/$besettings{'BE_NAME'}/urls") { unlink("$dbdir/$besettings{'BE_NAME'}/urls"); } - if ($besettings{'BE_URLS'}) - { - open(FILE, ">$dbdir/$besettings{'BE_NAME'}/urls"); - flock FILE, 2; - print FILE "$besettings{'BE_URLS'}\n"; - close FILE; - } - if (-e "$dbdir/$besettings{'BE_NAME'}/expressions") { unlink("$dbdir/$besettings{'BE_NAME'}/expressions"); } - if ($besettings{'BE_EXPRESSIONS'}) - { - open(FILE, ">$dbdir/$besettings{'BE_NAME'}/expressions"); - flock FILE, 2; - print FILE "$besettings{'BE_EXPRESSIONS'}\n"; - close FILE; - } - - open(FILE, ">$editdir/install.conf"); - flock FILE, 2; - print FILE "logdir /var/log/squidGuard\n"; - print FILE "dbhome $dbdir/$besettings{'BE_NAME'}\n\n"; - print FILE "dest $besettings{'BE_NAME'} {\n"; - if ($besettings{'BE_DOMAINS'}) { print FILE " domainlist domains\n"; } - if ($besettings{'BE_URLS'}) { print FILE " urllist urls\n"; } - if ($besettings{'BE_EXPRESSIONS'}) { print FILE " expressions expressions\n"; } - print FILE "}\n\n"; - print FILE "acl {\n"; - print FILE " default {\n"; - print FILE " pass none\n"; - print FILE " }\n"; - print FILE "}\n"; - close FILE; - - system("rm -f $dbdir/$besettings{'BE_NAME'}/*.db"); - system("/usr/sbin/squidGuard -c $editdir/install.conf -C all"); - system("chmod a+w $dbdir/$besettings{'BE_NAME'}/*.db"); - - &readblockcategories; - &readcustomlists; - - &writeconfigfile; - - system('/usr/local/bin/restartsquid') unless ($besettings{'NORESTART'} eq 'on'); - - if (-d $editdir) { system("rm -rf $editdir"); } - } else { - $errormessage = $Lang::tr{'urlfilter category data error'}; - } -} - -if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save schedule'}) -{ - if (($filtersettings{'UPDATE_SOURCE'} eq 'custom') && ($filtersettings{'CUSTOM_UPDATE_URL'} eq '')) - { - $errormessage = $Lang::tr{'urlfilter custom url required'}; - } else { - open (FILE, ">$updconffile"); - print FILE "ENABLE_AUTOUPDATE=$filtersettings{'ENABLE_AUTOUPDATE'}\n"; - print FILE "UPDATE_SCHEDULE=$filtersettings{'UPDATE_SCHEDULE'}\n"; - print FILE "UPDATE_SOURCE=$filtersettings{'UPDATE_SOURCE'}\n"; - print FILE "CUSTOM_UPDATE_URL=$filtersettings{'CUSTOM_UPDATE_URL'}\n"; - close FILE; - - if (-e $upd_cron_dly) { unlink($upd_cron_dly); } - if (-e $upd_cron_wly) { unlink($upd_cron_wly); } - if (-e $upd_cron_mly) { unlink($upd_cron_mly); } - - if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'daily')) - { - symlink("../bin/autoupdate.pl",$upd_cron_dly) - } else { - symlink("/bin/false",$upd_cron_dly) - } - - if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'weekly')) - { - symlink("../bin/autoupdate.pl",$upd_cron_wly) - } else { - symlink("/bin/false",$upd_cron_wly) - } - - if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'monthly')) - { - symlink("../bin/autoupdate.pl",$upd_cron_mly) - } else { - symlink("/bin/false",$upd_cron_mly) - } - } -} - -if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter update now'}) -{ - if ($filtersettings{'UPDATE_SOURCE'} eq 'custom') - { - if ($filtersettings{'CUSTOM_UPDATE_URL'} eq '') - { - $errormessage = $Lang::tr{'urlfilter custom url required'}; - } else { - system("${General::swroot}/urlfilter/bin/autoupdate.pl $filtersettings{'CUSTOM_UPDATE_URL'} &"); - } - } else { - system("${General::swroot}/urlfilter/bin/autoupdate.pl $filtersettings{'UPDATE_SOURCE'} &"); - } -} - - -if (-e "${General::swroot}/urlfilter/settings") { &General::readhash("${General::swroot}/urlfilter/settings", \%filtersettings); } - -&readcustomlists; - -$checked{'ENABLE_CUSTOM_BLACKLIST'}{'off'} = ''; -$checked{'ENABLE_CUSTOM_BLACKLIST'}{'on'} = ''; -$checked{'ENABLE_CUSTOM_BLACKLIST'}{$filtersettings{'ENABLE_CUSTOM_BLACKLIST'}} = "checked='checked'"; -$checked{'ENABLE_CUSTOM_WHITELIST'}{'off'} = ''; -$checked{'ENABLE_CUSTOM_WHITELIST'}{'on'} = ''; -$checked{'ENABLE_CUSTOM_WHITELIST'}{$filtersettings{'ENABLE_CUSTOM_WHITELIST'}} = "checked='checked'"; -$checked{'ENABLE_CUSTOM_EXPRESSIONS'}{'off'} = ''; -$checked{'ENABLE_CUSTOM_EXPRESSIONS'}{'on'} = ''; -$checked{'ENABLE_CUSTOM_EXPRESSIONS'}{$filtersettings{'ENABLE_CUSTOM_EXPRESSIONS'}} = "checked='checked'"; -$checked{'BLOCK_EXECUTABLES'}{'off'} = ''; -$checked{'BLOCK_EXECUTABLES'}{'on'} = ''; -$checked{'BLOCK_EXECUTABLES'}{$filtersettings{'BLOCK_EXECUTABLES'}} = "checked='checked'"; -$checked{'BLOCK_AUDIO-VIDEO'}{'off'} = ''; -$checked{'BLOCK_AUDIO-VIDEO'}{'on'} = ''; -$checked{'BLOCK_AUDIO-VIDEO'}{$filtersettings{'BLOCK_AUDIO-VIDEO'}} = "checked='checked'"; -$checked{'BLOCK_ARCHIVES'}{'off'} = ''; -$checked{'BLOCK_ARCHIVES'}{'on'} = ''; -$checked{'BLOCK_ARCHIVES'}{$filtersettings{'BLOCK_ARCHIVES'}} = "checked='checked'"; -$checked{'ENABLE_REWRITE'}{'off'} = ''; -$checked{'ENABLE_REWRITE'}{'on'} = ''; -$checked{'ENABLE_REWRITE'}{$filtersettings{'ENABLE_REWRITE'}} = "checked='checked'"; -$checked{'SHOW_CATEGORY'}{'off'} = ''; -$checked{'SHOW_CATEGORY'}{'on'} = ''; -$checked{'SHOW_CATEGORY'}{$filtersettings{'SHOW_CATEGORY'}} = "checked='checked'"; -$checked{'SHOW_URL'}{'off'} = ''; -$checked{'SHOW_URL'}{'on'} = ''; -$checked{'SHOW_URL'}{$filtersettings{'SHOW_URL'}} = "checked='checked'"; -$checked{'SHOW_IP'}{'off'} = ''; -$checked{'SHOW_IP'}{'on'} = ''; -$checked{'SHOW_IP'}{$filtersettings{'SHOW_IP'}} = "checked='checked'"; -$checked{'ENABLE_DNSERROR'}{'off'} = ''; -$checked{'ENABLE_DNSERROR'}{'on'} = ''; -$checked{'ENABLE_DNSERROR'}{$filtersettings{'ENABLE_DNSERROR'}} = "checked='checked'"; -$checked{'ENABLE_JPEG'}{'off'} = ''; -$checked{'ENABLE_JPEG'}{'on'} = ''; -$checked{'ENABLE_JPEG'}{$filtersettings{'ENABLE_JPEG'}} = "checked='checked'"; -$checked{'ENABLE_EXPR_LISTS'}{'off'} = ''; -$checked{'ENABLE_EXPR_LISTS'}{'on'} = ''; -$checked{'ENABLE_EXPR_LISTS'}{$filtersettings{'ENABLE_EXPR_LISTS'}} = "checked='checked'"; -$checked{'BLOCK_IP_ADDR'}{'off'} = ''; -$checked{'BLOCK_IP_ADDR'}{'on'} = ''; -$checked{'BLOCK_IP_ADDR'}{$filtersettings{'BLOCK_IP_ADDR'}} = "checked='checked'"; -$checked{'BLOCK_ALL'}{'off'} = ''; -$checked{'BLOCK_ALL'}{'on'} = ''; -$checked{'BLOCK_ALL'}{$filtersettings{'BLOCK_ALL'}} = "checked='checked'"; -$checked{'ENABLE_EMPTY_ADS'}{'off'} = ''; -$checked{'ENABLE_EMPTY_ADS'}{'on'} = ''; -$checked{'ENABLE_EMPTY_ADS'}{$filtersettings{'ENABLE_EMPTY_ADS'}} = "checked='checked'"; -$checked{'ENABLE_GLOBAL_WHITELIST'}{'off'} = ''; -$checked{'ENABLE_GLOBAL_WHITELIST'}{'on'} = ''; -$checked{'ENABLE_GLOBAL_WHITELIST'}{$filtersettings{'ENABLE_GLOBAL_WHITELIST'}} = "checked='checked'"; -$checked{'ENABLE_SAFESEARCH'}{'off'} = ''; -$checked{'ENABLE_SAFESEARCH'}{'on'} = ''; -$checked{'ENABLE_SAFESEARCH'}{$filtersettings{'ENABLE_SAFESEARCH'}} = "checked='checked'"; -$checked{'ENABLE_LOG'}{'off'} = ''; -$checked{'ENABLE_LOG'}{'on'} = ''; -$checked{'ENABLE_LOG'}{$filtersettings{'ENABLE_LOG'}} = "checked='checked'"; -$checked{'ENABLE_USERNAME_LOG'}{'off'} = ''; -$checked{'ENABLE_USERNAME_LOG'}{'on'} = ''; -$checked{'ENABLE_USERNAME_LOG'}{$filtersettings{'ENABLE_USERNAME_LOG'}} = "checked='checked'"; -$checked{'ENABLE_CATEGORY_LOG'}{'off'} = ''; -$checked{'ENABLE_CATEGORY_LOG'}{'on'} = ''; -$checked{'ENABLE_CATEGORY_LOG'}{$filtersettings{'ENABLE_CATEGORY_LOG'}} = "checked='checked'"; - -foreach $category (@filtergroups) { - $checked{$category}{'off'} = ''; - $checked{$category}{'on'} = ''; - $checked{$category}{$filtersettings{$category}} = "checked='checked'"; -} - -$selected{'DEFINITION'}{$tcsettings{'DEFINITION'}} = "selected='selected'"; -$selected{'FROM_HOUR'}{$tcsettings{'FROM_HOUR'}} = "selected='selected'"; -$selected{'FROM_MINUTE'}{$tcsettings{'FROM_MINUTE'}} = "selected='selected'"; -$selected{'TO_HOUR'}{$tcsettings{'TO_HOUR'}} = "selected='selected'"; -$selected{'TO_MINUTE'}{$tcsettings{'TO_MINUTE'}} = "selected='selected'"; - -@selectedcategories = split(/\|/,$tcsettings{'DST'}); -foreach (@selectedcategories) -{ - $selected{'DST'}{$_} = "selected='selected'"; -} - -$selected{'ACCESS'}{$tcsettings{'ACCESS'}} = "selected='selected'"; - -$checked{'ENABLERULE'}{'off'} = ''; -$checked{'ENABLERULE'}{'on'} = ''; -$checked{'ENABLERULE'}{$tcsettings{'ENABLERULE'}} = "checked='checked'"; -$checked{'MON'}{'off'} = ''; -$checked{'MON'}{'on'} = ''; -$checked{'MON'}{$tcsettings{'MON'}} = "checked='checked'"; -$checked{'TUE'}{'off'} = ''; -$checked{'TUE'}{'on'} = ''; -$checked{'TUE'}{$tcsettings{'TUE'}} = "checked='checked'"; -$checked{'WED'}{'off'} = ''; -$checked{'WED'}{'on'} = ''; -$checked{'WED'}{$tcsettings{'WED'}} = "checked='checked'"; -$checked{'THU'}{'off'} = ''; -$checked{'THU'}{'on'} = ''; -$checked{'THU'}{$tcsettings{'THU'}} = "checked='checked'"; -$checked{'FRI'}{'off'} = ''; -$checked{'FRI'}{'on'} = ''; -$checked{'FRI'}{$tcsettings{'FRI'}} = "checked='checked'"; -$checked{'SAT'}{'off'} = ''; -$checked{'SAT'}{'on'} = ''; -$checked{'SAT'}{$tcsettings{'SAT'}} = "checked='checked'"; -$checked{'SUN'}{'off'} = ''; -$checked{'SUN'}{'on'} = ''; -$checked{'SUN'}{$tcsettings{'SUN'}} = "checked='checked'"; - -$selected{'SPORADIC'}{$uqsettings{'SPORADIC'}} = "selected='selected'"; -$selected{'RENEWAL'} {$uqsettings{'RENEWAL'}} = "selected='selected'"; - -$checked{'ENABLEQUOTA'}{'off'} = ''; -$checked{'ENABLEQUOTA'}{'on'} = ''; -$checked{'ENABLEQUOTA'}{$uqsettings{'ENABLEQUOTA'}} = "checked='checked'"; - -$selected{'BE_BLACKLIST'}{$besettings{'BE_BLACKLIST'}} = "selected='selected'"; - - -&Header::showhttpheaders(); - -&Header::openpage($Lang::tr{'urlfilter configuration'}, 1, ''); - -&Header::openbigbox('100%', 'left', '', $errormessage); - -if ($errormessage) { - &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); - print "$errormessage \n"; - &Header::closebox(); -} elsif (($tcsettings{'CHANGED'} eq 'yes') || ($uqsettings{'CHANGED'} eq 'yes') ) { - &writeconfigfile; - print "
\n"; - &Header::openbox('100%', 'left', "$Lang::tr{'urlfilter restart notification'}:"); - print "$Lang::tr{'urlfilter restart message'}\n"; - if ($uqsettings{'MODE'} eq 'USERQUOTA') { print "

$Lang::tr{'urlfilter quota restart message'}\n"; } - print "\n"; - print "

"; - if ($tcsettings{'MODE'} eq 'TIMECONSTRAINT') { print ""; } - if ($uqsettings{'MODE'} eq 'USERQUOTA') { print ""; } - &Header::closebox(); - print "

\n"; -} - -if ($restoremessage) { - &Header::openbox('100%', 'left', "$Lang::tr{'urlfilter restore results'}:"); - print "$restoremessage\n"; - print " \n"; - &Header::closebox(); -} - -if ((!$tcsettings{'TCMODE'}) && (!$uqsettings{'UQMODE'}) && (!$besettings{'BEMODE'})) { - -if (!($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter manage repository'})) { - -#========================================================== -# -# Section: Main Configuration -# -#========================================================== - -print "
\n"; - -&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter filter settings'}:"); -print < - - $Lang::tr{'urlfilter block categories'} - -END -; - -if (@categories == 0) { -print < - $Lang::tr{'urlfilter no categories'} -   -   -   - - -END -; -} - -for ($n=0; $n<=@categories; $n = $n + $i) { - for ($i=0; $i<=3; $i++) { - if ($i eq 0) { print "\n"; } - if (($n+$i) < @categories) { - print "@categories[$n+$i]:<\/td>\n"; - print "\n"; - } - if ($i eq 3) { print "<\/tr>\n"; } - } -} - -print < -
- - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter custom blacklist'}   
$Lang::tr{'urlfilter blocked domains'} *$Lang::tr{'urlfilter blocked urls'} *
- - - - - - - -
$Lang::tr{'urlfilter enable custom blacklist'}:  
-
- - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter custom whitelist'}   
$Lang::tr{'urlfilter allowed domains'} *$Lang::tr{'urlfilter allowed urls'} *
- - - - - - - -
$Lang::tr{'urlfilter enable custom whitelist'}:  
-
- - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter custom expression list'}
$Lang::tr{'urlfilter blocked expressions'} *
$Lang::tr{'urlfilter enable custom expression list'}:  
-
- - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter file ext block'}
$Lang::tr{'urlfilter block executables'}:$Lang::tr{'urlfilter block audio-video'}:
$Lang::tr{'urlfilter block archives'}:  
-
- - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter local file redirection'}
$Lang::tr{'urlfilter enable rewrite rules'}:  
   
-
- - - - - - - - - - - - -
$Lang::tr{'urlfilter network access control'}  
$Lang::tr{'urlfilter unfiltered clients'}: *$Lang::tr{'urlfilter banned clients'}: *
-
- - - - - - - - - - -
$Lang::tr{'urlfilter timebased access control'}
  
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter block settings'}
$Lang::tr{'urlfilter show category'}:$Lang::tr{'urlfilter redirectpage'}: *
$Lang::tr{'urlfilter show url'}:$Lang::tr{'urlfilter msg text 1'}: *
$Lang::tr{'urlfilter show ip'}:$Lang::tr{'urlfilter msg text 2'}: *
$Lang::tr{'urlfilter show dnserror'}:$Lang::tr{'urlfilter msg text 3'}: *
$Lang::tr{'urlfilter enable jpeg'}:  
- - - - - - - - - - -
$Lang::tr{'urlfilter background image'}

$Lang::tr{'urlfilter background text'}:
 
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter advanced settings'}
$Lang::tr{'urlfilter enable expression lists'}:$Lang::tr{'urlfilter enable log'}:
$Lang::tr{'urlfilter safesearch'}:$Lang::tr{'urlfilter username log'}:
$Lang::tr{'urlfilter empty ads'}:$Lang::tr{'urlfilter category log'}:
$Lang::tr{'urlfilter block ip'}:$Lang::tr{'urlfilter children'}:
$Lang::tr{'urlfilter block all'}:$Lang::tr{'urlfilter whitelist always allowed'}:
-
- - - - - -
- *  - $Lang::tr{'this field may be blank'} - -URL filter -
- - - - - - - -
  
-END -; - -&Header::closebox(); - -print "\n"; - -print "
\n"; - -&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter maintenance'}:"); - -print < - -$Lang::tr{'urlfilter blacklist update'} - - -$Lang::tr{'urlfilter upload information'}

$Lang::tr{'urlfilter upload text'}: - - -   - - - -


- - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter automatic blacklist update'} -END -; -if (-e "$updflagfile") -{ -$blacklistage = int(-M "$updflagfile"); -print "  [ $Lang::tr{'urlfilter blacklist age 1'} $blacklistage $Lang::tr{'urlfilter blacklist age 2'} ]"; -} - -$updatesettings{'UPDATE_SCHEDULE'} = 'monthly'; -$updatesettings{'CUSTOM_UPDATE_URL'} = ''; - -if (-e "$updconffile") { &General::readhash("$updconffile", \%updatesettings); } - -$checked{'ENABLE_AUTOUPDATE'}{'off'} = ''; -$checked{'ENABLE_AUTOUPDATE'}{'on'} = ''; -$checked{'ENABLE_AUTOUPDATE'}{$updatesettings{'ENABLE_AUTOUPDATE'}} = "checked='checked'"; - -$selected{'UPDATE_SCHEDULE'}{$updatesettings{'UPDATE_SCHEDULE'}} = "selected='selected'"; - -$selected{'UPDATE_SOURCE'}{$updatesettings{'UPDATE_SOURCE'}} = "selected='selected'"; - -print < -
$Lang::tr{'urlfilter enable automatic blacklist update'}:
$Lang::tr{'urlfilter automatic update schedule'}: - -
$Lang::tr{'urlfilter select source'}: - -
$Lang::tr{'urlfilter custom url'}:
- - - - -
   
- -
- - - - - - - - - - - -
$Lang::tr{'urlfilter blacklist editor'}
$Lang::tr{'urlfilter blacklist editor info'}
- -
- - - - - - - - - - - - - - -
$Lang::tr{'urlfilter backup settings'}
$Lang::tr{'urlfilter enable full backup'}:  
- -
- - - - - - - - - - - -
$Lang::tr{'urlfilter restore settings'}
$Lang::tr{'urlfilter restore text'}:
 
- -END -; - -&Header::closebox(); - -} else { - -#========================================================== -# -# Section: Manage Repository -# -#========================================================== - -print "
\n"; - -&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter manage local file repository'}:"); -print < - - $Lang::tr{'urlfilter repository information'}

- - - $Lang::tr{'urlfilter upload file text'}: - - -   - - -
$Lang::tr{'urlfilter upload file information 1'}: $Lang::tr{'urlfilter upload file information 2'} - - -
- - - - -
- -END -; - -&Header::closebox(); - -&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter current files'}: [$repository]"); - -@repositorylist = <$repository/*>; - -undef @repositoryfiles; -foreach (@repositorylist) -{ - if (!-d) { push(@repositoryfiles,substr($_,rindex($_,"/")+1)); } -} - -if (@repositoryfiles) -{ - print < - - $Lang::tr{'urlfilter filename'} - $Lang::tr{'urlfilter filesize'} - - -END -; - $id = 0; - foreach $line (@repositoryfiles) - { - $id++; - if ($id % 2) { - print "\n"; } - else { - print "\n"; } - $filesize = (-s "$repository/$line"); - 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; - -print <   $line - $filesize    - - -
- - - -
- - - -END -; - } - -print < - - - -
- - - - - - -
  $Lang::tr{'legend'}:    $Lang::tr{$Lang::tr{'remove'}
-END -; -} else { - - print "$Lang::tr{'urlfilter empty repository'}\n"; -} - -&Header::closebox(); - -} - -} elsif ($tcsettings{'TCMODE'}) { - -#========================================================== -# -# Section: Set Time Constraints -# -#========================================================== - -print "
\n"; - -$buttontext = $Lang::tr{'urlfilter add rule'}; -if ($tcsettings{'ACTION'} eq $Lang::tr{'edit'}) { -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter edit time constraint rule'}.':'); -$buttontext = $Lang::tr{'urlfilter update rule'}; -} else { -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter add new time constraint rule'}.':'); -} -print < - - $Lang::tr{'urlfilter constraint definition'} -    - $Lang::tr{'urlfilter monday'} - $Lang::tr{'urlfilter tuesday'} - $Lang::tr{'urlfilter wednesday'} - $Lang::tr{'urlfilter thursday'} - $Lang::tr{'urlfilter friday'} - $Lang::tr{'urlfilter saturday'} - $Lang::tr{'urlfilter sunday'} -    - $Lang::tr{'urlfilter from'} -   - $Lang::tr{'urlfilter to'} -   - - - - - -   - - - - - - - -   - - -END -; -for ($i=0;$i<=45;$i+=15) { -$_ = sprintf("%02s",$i); -print "\n"; -} -print < - - - - - -END -; -for ($i=0;$i<=45;$i+=15) { -$_ = sprintf("%02s",$i); -print "\n"; -} -print < - -   - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter source'}  $Lang::tr{'urlfilter dst'} **  $Lang::tr{'urlfilter access'} 
  - -   - -  
$Lang::tr{'remark'} *    
    
- - - - - -
$Lang::tr{'urlfilter enabled'}
- -

- - - - - - - - - - -
 
-

- - - - - - - - - -
* $Lang::tr{'this field may be blank'}
** $Lang::tr{'urlfilter select multi'}
-END -; - -if ($tcsettings{'ACTION'} eq $Lang::tr{'edit'}) { - print "\n"; -} else { - print "\n"; -} - -&Header::closebox(); -print "

\n"; - -&Header::openbox('100%', 'left', $Lang::tr{'current rules'}); -print < - - $Lang::tr{'urlfilter constraint definition'} - $Lang::tr{'urlfilter time space'} - $Lang::tr{'urlfilter src'} - $Lang::tr{'urlfilter dst'} -   - -END -; - -if ($tcsettings{'ACTION'} ne '' or $changed ne 'no') -{ - open(FILE, $tcfile); - @tclist = ; - close(FILE); -} - -$id = 0; -foreach $line (@tclist) -{ - $id++; - chomp($line); - @temp = split(/\,/,$line); - if($tcsettings{'ACTION'} eq $Lang::tr{'edit'} && $tcsettings{'ID'} eq $id) { - print "\n"; } - elsif ($id % 2) { - print "\n"; } - else { - print "\n"; } - if ($temp[0] eq 'within') { $temp[0]=$Lang::tr{'urlfilter constraint within'}; } else { $temp[0]=$Lang::tr{'urlfilter constraint outside'}; } - if ($temp[13] eq 'any') { $temp[13]=$Lang::tr{'urlfilter category all'}; } - if ($temp[15] eq 'on') { $gif='on.gif'; $toggle='off'; $gdesc=$Lang::tr{'click to disable'};} - else { $gif='off.gif'; $toggle='on'; $gdesc=$Lang::tr{'click to enable'}; } - if ($temp[14] eq 'block') { $led='led-red.gif'; $ldesc=$Lang::tr{'urlfilter block access'};} - else { $led='led-green.gif'; $ldesc=$Lang::tr{'urlfilter allow access'}; } - - undef $time; - if ($temp[1] eq 'on') { $time.=$Lang::tr{'urlfilter mon'}; } else { $time.='='; } - if ($temp[2] eq 'on') { $time.=$Lang::tr{'urlfilter tue'}; } else { $time.='='; } - if ($temp[3] eq 'on') { $time.=$Lang::tr{'urlfilter wed'}; } else { $time.='='; } - if ($temp[4] eq 'on') { $time.=$Lang::tr{'urlfilter thu'}; } else { $time.='='; } - if ($temp[5] eq 'on') { $time.=$Lang::tr{'urlfilter fri'}; } else { $time.='='; } - if ($temp[6] eq 'on') { $time.=$Lang::tr{'urlfilter sat'}; } else { $time.='='; } - if ($temp[7] eq 'on') { $time.=$Lang::tr{'urlfilter sun'}; } else { $time.='='; } - $time=$time.'   '.$temp[8].':'.$temp[9].' to '.$temp[10].':'.$temp[11]; - -print <$temp[0] - $time - $temp[12] - $temp[13] - $ldesc - - -
- - - - - -
- - - -
- - - - -
- - - -
- - - - -
- - - -END -; - if($tcsettings{'ACTION'} eq $Lang::tr{'edit'} && $tcsettings{'ID'} eq $id) { - print "\n"; } - elsif ($id % 2) { - print "\n"; } - else { - print "\n"; } -print <$temp[16] - - - - -END -; -} - -print "\n"; - -# If the time constraint file contains entries, print entries and action icons -if (! -z "$tcfile") { -print < - -   $Lang::tr{'legend'}: -     $Lang::tr{ - $Lang::tr{'urlfilter allow'} -     $Lang::tr{ - $Lang::tr{'urlfilter block'} -   $Lang::tr{ - $Lang::tr{'click to disable'} -     $Lang::tr{ - $Lang::tr{'click to enable'} -     $Lang::tr{ - $Lang::tr{'edit'} -     $Lang::tr{ - $Lang::tr{'remove'} - - -END -; -} - -&Header::closebox(); - -} elsif ($uqsettings{'UQMODE'}) { - -#========================================================== -# -# Section: Set User Quota -# -#========================================================== - -print "
\n"; - -$buttontext = $Lang::tr{'urlfilter add rule'}; -if ($uqsettings{'ACTION'} eq $Lang::tr{'edit'}) { -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter edit user quota rule'}.':'); -$buttontext = $Lang::tr{'urlfilter update rule'}; -} else { -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter add new user quota rule'}.':'); -} -print < - - - - - $Lang::tr{'urlfilter user time quota'}: - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter assigned quota users'}:
- - - - $Lang::tr{'urlfilter activity detection'}: - - - - $Lang::tr{'urlfilter renewal period'}: - - - -   - - - $Lang::tr{'urlfilter enabled'} - - - - -

- - - - - - - - - - -
 
- -

-END -; - -if ($uqsettings{'ACTION'} eq $Lang::tr{'edit'}) { - print "\n"; -} else { - print "\n"; -} - -&Header::closebox(); -print "

\n"; - -&Header::openbox('100%', 'left', $Lang::tr{'current rules'}); -print < - - $Lang::tr{'urlfilter time quota'} - $Lang::tr{'urlfilter activity detection'} - $Lang::tr{'urlfilter renewal'} - $Lang::tr{'urlfilter assigned users'} -   - -END -; - -if ($uqsettings{'ACTION'} ne '' or $changed ne 'no') -{ - open(FILE, $uqfile); - @uqlist = ; - close(FILE); -} - -$id = 0; -foreach $line (@uqlist) -{ - $id++; - chomp($line); - @temp = split(/\,/,$line); - if($uqsettings{'ACTION'} eq $Lang::tr{'edit'} && $uqsettings{'ID'} eq $id) { - print "\n"; } - elsif ($id % 2) { - print "\n"; } - else { - print "\n"; } - if ($temp[4] eq 'on') { $gif='on.gif'; $toggle='off'; $gdesc=$Lang::tr{'click to disable'};} - else { $gif='off.gif'; $toggle='on'; $gdesc=$Lang::tr{'click to enable'}; } - - $temp[5] = $temp[1]; - if ($temp[1] eq '0') { $temp[5] = $Lang::tr{'urlfilter disabled'} } else { $temp[5] = ($temp[5]/60).' '.$Lang::tr{'urlfilter minutes'} } - $_ = $temp[3]; s/\|/, /g; $temp[6] = $_; - -print <$temp[0] $Lang::tr{'urlfilter minutes'} - $temp[5] - $Lang::tr{'urlfilter '.$temp[2]} - $temp[6] - - -
- - - - - -
- - - -
- - - - -
- - - -
- - - - -
- - - -END -; -} - -print "\n"; - -# If the user quota file contains entries, print entries and action icons -if (! -z "$uqfile") { -print < - -   $Lang::tr{'legend'}: -   $Lang::tr{ - $Lang::tr{'click to disable'} -     $Lang::tr{ - $Lang::tr{'click to enable'} -     $Lang::tr{ - $Lang::tr{'edit'} -     $Lang::tr{ - $Lang::tr{'remove'} - - -END -; -} - -&Header::closebox(); - -} else { - -#========================================================== -# -# Section: Blacklist editor -# -#========================================================== - -print "
\n"; - -&Header::openbox('100%', 'left', $Lang::tr{'urlfilter urlfilter blacklist editor'}.':'); - -print < - - - - - $Lang::tr{'urlfilter blacklist name'} - - - $Lang::tr{'urlfilter blacklist category name'}: - - - -
- - - - - - - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter edit domains urls expressions'}
$Lang::tr{'urlfilter domains'}$Lang::tr{'urlfilter urls'}
$Lang::tr{'urlfilter expressions'}
-
- - - - - - - - - - - - - -
$Lang::tr{'urlfilter load blacklist'}
$Lang::tr{'urlfilter select blacklist'}: -   
-
- - - - - - - - - - - -
$Lang::tr{'urlfilter import blacklist'}
$Lang::tr{'urlfilter import text'}:
 
-
- - - - - - - -
$Lang::tr{'urlfilter export blacklist'}
-
- - - - - - - - - - - - - - - - -
$Lang::tr{'urlfilter install blacklist'}
$Lang::tr{'urlfilter dont restart urlfilter'}:  

$Lang::tr{'urlfilter install information'}
-
- - - - - - -
 
- -END -; - -&Header::closebox(); -print "\n"; - -} - -&Header::closebigbox(); - -&Header::closepage(); - -# ------------------------------------------------------------------- - -sub savesettings -{ - &writeconfigfile; - - delete $filtersettings{'CUSTOM_BLACK_DOMAINS'}; - delete $filtersettings{'CUSTOM_BLACK_URLS'}; - delete $filtersettings{'CUSTOM_WHITE_DOMAINS'}; - delete $filtersettings{'CUSTOM_WHITE_URLS'}; - delete $filtersettings{'CUSTOM_EXPRESSIONS'}; - delete $filtersettings{'BACKGROUND'}; - delete $filtersettings{'UPDATEFILE'}; - - &General::writehash("${General::swroot}/urlfilter/settings", \%filtersettings); -} - -# ------------------------------------------------------------------- - -sub readblockcategories -{ - undef(@categories); - foreach $blacklist (<$dbdir/*>) { - if (-d $blacklist) { - $lastslashpos = rindex($blacklist,"/"); - if ($lastslashpos > -1) { - $section = substr($blacklist,$lastslashpos+1); - } else { - $section = $blacklist; - } - if (!($section eq 'custom')) { push(@categories,$section) }; - } - } - - @filtergroups = @categories; - foreach (@filtergroups) { - tr/a-z/A-Z/; - $_ = "FILTER_".$_; - } -} - -# ------------------------------------------------------------------- - -sub readcustomlists -{ - if (-e "$dbdir/custom/blocked/domains") { - open(FILE,"$dbdir/custom/blocked/domains"); - delete $filtersettings{'CUSTOM_BLACK_DOMAINS'}; - while () { $filtersettings{'CUSTOM_BLACK_DOMAINS'} .= $_ }; - close(FILE); - } - - if (-e "$dbdir/custom/blocked/urls") { - open(FILE,"$dbdir/custom/blocked/urls"); - delete $filtersettings{'CUSTOM_BLACK_URLS'}; - while () { $filtersettings{'CUSTOM_BLACK_URLS'} .= $_ }; - close(FILE); - } - - if (-e "$dbdir/custom/blocked/expressions") { - open(FILE,"$dbdir/custom/blocked/expressions"); - delete $filtersettings{'CUSTOM_EXPRESSIONS'}; - while () { $filtersettings{'CUSTOM_EXPRESSIONS'} .= $_ }; - close(FILE); - } - - if (-e "$dbdir/custom/allowed/domains") { - open(FILE,"$dbdir/custom/allowed/domains"); - delete $filtersettings{'CUSTOM_WHITE_DOMAINS'}; - while () { $filtersettings{'CUSTOM_WHITE_DOMAINS'} .= $_ }; - close(FILE); - } - if (-e "$dbdir/custom/allowed/urls") { - open(FILE,"$dbdir/custom/allowed/urls"); - delete $filtersettings{'CUSTOM_WHITE_URLS'}; - while () { $filtersettings{'CUSTOM_WHITE_URLS'} .= $_ }; - close(FILE); - } -} - -# ------------------------------------------------------------------- - -sub aggregatedconstraints -{ - my $aggregated; - my @old; - my @new; - my @tmp1; - my @tmp2; - my $x; - - if (-e $tcfile) - { - open(TC, $tcfile); - @old = ; - close(TC); - - while (@old > 0) - { - $aggregated = 0; - $x = shift(@old); - chomp($x); - @tmp1 = split(/\,/,$x); - $tmp1[16] = ''; - foreach (@new) - { - @tmp2 = split(/\,/); - if ($tmp2[15] eq 'on') - { - if (($tmp1[0] eq $tmp2[0]) && ($tmp1[12] eq $tmp2[12]) && ($tmp1[13] eq $tmp2[13]) && ($tmp1[14] eq $tmp2[14])) - { - $aggregated = 1; - $tmp2[16] .= " weekly "; - if ($tmp1[1] eq 'on') { $tmp2[16] .= "m"; } - if ($tmp1[2] eq 'on') { $tmp2[16] .= "t"; } - if ($tmp1[3] eq 'on') { $tmp2[16] .= "w"; } - if ($tmp1[4] eq 'on') { $tmp2[16] .= "h"; } - if ($tmp1[5] eq 'on') { $tmp2[16] .= "f"; } - if ($tmp1[6] eq 'on') { $tmp2[16] .= "a"; } - if ($tmp1[7] eq 'on') { $tmp2[16] .= "s"; } - $tmp2[16] .= " $tmp1[8]:$tmp1[9]-$tmp1[10]:$tmp1[11]\n"; - $_ = join(",",@tmp2); - } - - } - } - if (!$aggregated) - { - $tmp1[16] .= " weekly "; - if ($tmp1[1] eq 'on') { $tmp1[16] .= "m"; } - if ($tmp1[2] eq 'on') { $tmp1[16] .= "t"; } - if ($tmp1[3] eq 'on') { $tmp1[16] .= "w"; } - if ($tmp1[4] eq 'on') { $tmp1[16] .= "h"; } - if ($tmp1[5] eq 'on') { $tmp1[16] .= "f"; } - if ($tmp1[6] eq 'on') { $tmp1[16] .= "a"; } - if ($tmp1[7] eq 'on') { $tmp1[16] .= "s"; } - $tmp1[16] .= " $tmp1[8]:$tmp1[9]-$tmp1[10]:$tmp1[11]\n"; - $x = join(",",@tmp1); - push(@new,$x); - } - } - } - - return @new; - -} - -# ------------------------------------------------------------------- - -sub writeconfigfile -{ - my $executables = "\\.\(ade|adp|asx|bas|bat|chm|com|cmd|cpl|crt|dll|eml|exe|hiv|hlp|hta|inc|inf|ins|isp|jse|jtd|lnk|msc|msh|msi|msp|mst|nws|ocx|oft|ops|pcd|pif|plx|reg|scr|sct|sha|shb|shm|shs|sys|tlb|tsp|url|vbe|vbs|vxd|wsc|wsf|wsh\)\$"; - my $audiovideo = "\\.\(aiff|asf|avi|dif|divx|mov|movie|mp3|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wmf|wmv\)\$"; - my $archives = "\\.\(bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$"; - - my $ident = " anonymous"; - - my $defaultrule=''; - my $tcrule=''; - my $redirect=''; - my $qredirect=''; - - my $idx; - - my @ec=(); - my @tc=(); - my @uq=(); - - if (!(-d "$dbdir/custom")) { mkdir("$dbdir/custom") } - if (!(-d "$dbdir/custom/blocked")) { mkdir("$dbdir/custom/blocked") } - if (!(-d "$dbdir/custom/allowed")) { mkdir("$dbdir/custom/allowed") } - - open(FILE, ">/$dbdir/custom/blocked/domains"); - print FILE $filtersettings{'CUSTOM_BLACK_DOMAINS'}; - close(FILE); - open(FILE, ">/$dbdir/custom/blocked/urls"); - print FILE $filtersettings{'CUSTOM_BLACK_URLS'}; - close(FILE); - open(FILE, ">/$dbdir/custom/blocked/expressions"); - print FILE $filtersettings{'CUSTOM_EXPRESSIONS'}; - close(FILE); - open(FILE, ">/$dbdir/custom/blocked/files"); - if ($filtersettings{'BLOCK_EXECUTABLES'} eq 'on') { print FILE "$executables\n"; } - if ($filtersettings{'BLOCK_AUDIO-VIDEO'} eq 'on') { print FILE "$audiovideo\n"; } - if ($filtersettings{'BLOCK_ARCHIVES'} eq 'on') { print FILE "$archives\n"; } - close(FILE); - open(FILE, ">/$dbdir/custom/allowed/domains"); - print FILE $filtersettings{'CUSTOM_WHITE_DOMAINS'}; - close(FILE); - open(FILE, ">/$dbdir/custom/allowed/urls"); - print FILE $filtersettings{'CUSTOM_WHITE_URLS'}; - close(FILE); - - if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { $ident = ""; } - - if ($filtersettings{'REDIRECT_PAGE'} eq '') - { - if (($filtersettings{'SHOW_CATEGORY'} eq 'on') || ($filtersettings{'SHOW_URL'} eq 'on') || ($filtersettings{'SHOW_IP'} eq 'on')) { - if ($filtersettings{'SHOW_CATEGORY'} eq 'on') { $redirect .= "&category=%t"; } - if ($filtersettings{'SHOW_URL'} eq 'on') { $redirect .= "&url=%u"; } - if ($filtersettings{'SHOW_IP'} eq 'on') { $redirect .= "&ip=%a"; } - $redirect =~ s/^&/?/; - $redirect = "http:\/\/$netsettings{'GREEN_ADDRESS'}:81\/redirect.cgi".$redirect; - } else { - $redirect="http:\/\/$netsettings{'GREEN_ADDRESS'}:81\/redirect.cgi"; - } - } else { $redirect=$filtersettings{'REDIRECT_PAGE'}; } - - if ($filtersettings{'ENABLE_DNSERROR'} eq 'on') { $redirect = "302:http://0.0.0.0"; } - - undef $defaultrule; - - if ($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') - { - $defaultrule .= "custom-allowed "; - } - if ($filtersettings{'BLOCK_ALL'} eq 'on') - { - $defaultrule .= "none"; - } - else - { - if ($filtersettings{'BLOCK_IP_ADDR'} eq 'on') - { - $defaultrule .= "!in-addr "; - } - for ($i=0; $i<=@filtergroups; $i++) { - if ($filtersettings{@filtergroups[$i]} eq 'on') - { - $defaultrule .= "!@categories[$i] "; - } - } - if ($filtersettings{'ENABLE_CUSTOM_BLACKLIST'} eq 'on') - { - $defaultrule .= "!custom-blocked "; - } - if ($filtersettings{'ENABLE_CUSTOM_EXPRESSIONS'} eq 'on') - { - $defaultrule .= "!custom-expressions "; - } - if (($filtersettings{'BLOCK_EXECUTABLES'} eq 'on') || - ($filtersettings{'BLOCK_AUDIO-VIDEO'} eq 'on') || - ($filtersettings{'BLOCK_ARCHIVES'} eq 'on')) - { - $defaultrule .= "!files "; - } - $defaultrule .= "any"; - } - - open(FILE, ">${General::swroot}/urlfilter/squidGuard.conf") or die "Unable to write squidGuard.conf file"; - flock(FILE, 2); - - print FILE "logdir /var/log/squidGuard\n"; - print FILE "dbhome $dbdir\n\n"; - - undef @repositoryfiles; - if ($filtersettings{'ENABLE_REWRITE'} eq 'on') - { - @repositorylist = <$repository/*>; - foreach (@repositorylist) - { - if (!-d) { push(@repositoryfiles,substr($_,rindex($_,"/")+1)); } - } - } - - if ((($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) || ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')) - { - print FILE "rewrite rew-rule-0 {\n"; - - if (($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) - { - print FILE " # rewrite localfiles\n"; - foreach (@repositoryfiles) - { - print FILE " s@.*/$_\$\@http://$netsettings{'GREEN_ADDRESS'}:81/repository/$_\@i\n"; - } - } - - if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on') - { - print FILE " # rewrite safesearch\n"; - print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)(\\bsafe=\\w+)(.*)\@\\1\\3safe=strict\\5\@i\n"; - print FILE " s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)\@\\1safe=strict\\\&\\3\@i\n"; - print FILE " s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W)(.*)(\\bvm=\\w+)(.*)\@\\1\\2vm=r\\4\@i\n"; - print FILE " s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W.*)\@\\1\\\&vm=r\@i\n"; - print FILE " s@(.*\\Walltheweb\\.com/customize\\?)(.*)(\\bcopt_offensive=\\w+)(.*)\@\\1\\2copt_offensive=on\\4\@i\n"; - } - - print FILE "}\n\n"; - - if ((!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) && ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')) { - print FILE "rewrite rew-rule-1 {\n"; - if (($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) - { - print FILE " # rewrite localfiles\n"; - foreach (@repositoryfiles) - { - print FILE " s@.*/$_\$\@http://$netsettings{'GREEN_ADDRESS'}:81/repository/$_\@i\n"; - } - } else { - print FILE " # rewrite nothing\n"; - } - print FILE "}\n\n"; - } - } - - if (-e $uqfile) - { - open(UQ, $uqfile); - @uqlist = ; - close(UQ); - - if (@uqlist > 0) - { - $idx=0; - foreach (@uqlist) - { - chomp; - @uq = split(/\,/); - if ($uq[4] eq 'on') - { - $idx++; - $uq[0] = $uq[0] * 60; - if ($uq[1] eq '0') { - if ($uq[2] eq 'hourly') { $uq[1] = 3600 } - if ($uq[2] eq 'daily') { $uq[1] = 86400 } - if ($uq[2] eq 'weekly') { $uq[1] = 604800 } - } - $uq[3] =~ s/\|/ /g; - print FILE "src quota-$idx {\n"; - print FILE " user $uq[3]\n"; - print FILE " userquota $uq[0] $uq[1] $uq[2]\n"; - print FILE "}\n\n"; - } - } - - } - } - - @tclist = &aggregatedconstraints; - - if (@tclist > 0) - { - $idx=0; - foreach (@tclist) - { - chomp; - @tc = split(/\,/); - if ($tc[15] eq 'on') - { - $idx++; - print FILE "src network-$idx {\n"; - print FILE " ip $tc[12]\n"; - print FILE "}\n\n"; - } - } - - $idx=0; - foreach (@tclist) - { - chomp; - @tc = split(/\,/); - if ($tc[15] eq 'on') - { - $idx++; - print FILE "time constraint-$idx {\n"; - print FILE "$tc[16]\n"; - print FILE "}\n\n"; - } - } - } - - if (!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) { - print FILE "src unfiltered {\n"; - print FILE " ip $filtersettings{'UNFILTERED_CLIENTS'}\n"; - print FILE "}\n\n"; - } - if (!($filtersettings{'BANNED_CLIENTS'} eq '')) { - print FILE "src banned {\n"; - print FILE " ip $filtersettings{'BANNED_CLIENTS'}\n"; - print FILE "}\n\n"; - } - - foreach $category (@categories) { - print FILE "dest $category {\n"; - if (-e "$dbdir/$category/domains") { - print FILE " domainlist $category\/domains\n"; - } - if (-e "$dbdir/$category/urls") { - print FILE " urllist $category\/urls\n"; - } - if ((-e "$dbdir/$category/expressions") && ($filtersettings{'ENABLE_EXPR_LISTS'} eq 'on')) { - print FILE " expressionlist $category\/expressions\n"; - } - if (($category eq 'ads') && ($filtersettings{'ENABLE_EMPTY_ADS'} eq 'on')) - { - print FILE " redirect http:\/\/$netsettings{'GREEN_ADDRESS'}:81\/images/urlfilter/1x1.gif\n"; - } - if ($filtersettings{'ENABLE_LOG'} eq 'on') - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile $ident $category.log\n"; - } else { - print FILE " logfile $ident urlfilter.log\n"; - } - } - print FILE "}\n\n"; - } - - print FILE "dest files {\n"; - print FILE " expressionlist custom\/blocked\/files\n"; - if ($filtersettings{'ENABLE_LOG'} eq 'on') - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile $ident files.log\n"; - } else { - print FILE " logfile $ident urlfilter.log\n"; - } - } - print FILE "}\n\n"; - - print FILE "dest custom-allowed {\n"; - print FILE " domainlist custom\/allowed\/domains\n"; - print FILE " urllist custom\/allowed\/urls\n"; - print FILE "}\n\n"; - - print FILE "dest custom-blocked {\n"; - print FILE " domainlist custom\/blocked\/domains\n"; - print FILE " urllist custom\/blocked\/urls\n"; - if ($filtersettings{'ENABLE_LOG'} eq 'on') - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile $ident custom.log\n"; - } else { - print FILE " logfile $ident urlfilter.log\n"; - } - } - print FILE "}\n\n"; - - print FILE "dest custom-expressions {\n"; - print FILE " expressionlist custom\/blocked\/expressions\n"; - if ($filtersettings{'ENABLE_LOG'} eq 'on') - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile $ident custom.log\n"; - } else { - print FILE " logfile $ident urlfilter.log\n"; - } - } - print FILE "}\n\n"; - - print FILE "acl {\n"; - if (!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) { - print FILE " unfiltered {\n"; - print FILE " pass all\n"; - if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on') - { - print FILE " rewrite rew-rule-1\n"; - } - print FILE " }\n\n"; - } - if (!($filtersettings{'BANNED_CLIENTS'} eq '')) { - print FILE " banned {\n"; - print FILE " pass "; - if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on')) - { - print FILE "custom-allowed "; - } - print FILE "none\n"; - print FILE " }\n\n"; - } - - if (-s $uqfile) - { - open(UQ, $uqfile); - @uqlist = ; - close(UQ); - - $idx=0; - foreach (@uqlist) - { - chomp; - @uq = split(/\,/); - if ($uq[4] eq 'on') - { - $idx++; - $qredirect = $redirect; - $qredirect =~ s/\%t/\%q\%20-\%20\%i/; - print FILE " quota-$idx {\n"; - print FILE " pass "; - if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on')) - { - print FILE "custom-allowed "; - } - print FILE "none\n"; - unless ($redirect eq $qredirect) { print FILE " redirect $qredirect\n"; } - print FILE " }\n\n"; - } - } - } - - if (@tclist > 0) - { - $idx=0; - foreach (@tclist) - { - chomp; - @tc = split(/\,/); - @ec = split(/\|/,$tc[13]); - if ($tc[15] eq 'on') - { - $idx++; - print FILE " network-$idx $tc[0] constraint-$idx {\n"; - print FILE " pass "; - - if ($filtersettings{'BLOCK_ALL'} eq 'on') - { - if ($tc[14] eq 'block') - { - if ((@ec == 1) && ($ec[0] eq 'any')) { - if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on')) - { - print FILE "custom-allowed "; - } - print FILE "none"; - } else { - print FILE $defaultrule; - } - } else { - foreach (@ec) - { - print FILE "$_ "; - } - print FILE $defaultrule unless ((@ec == 1) && ($ec[0] eq 'any')); - } - } else { - if ($tc[14] eq 'block') - { - $tcrule = $defaultrule; - if ($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') { - $tcrule =~ s/custom-allowed //; - print FILE "custom-allowed " unless ((@ec == 1) && ($ec[0] eq 'any') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'off')); - } - if ((@ec == 1) && ($ec[0] eq 'any')) { - print FILE "none"; - } else { - foreach (@ec) - { - print FILE "!$_ " unless (index($defaultrule,"!".$_." ") ge 0); - } - } - print FILE $tcrule unless ((@ec == 1) && ($ec[0] eq 'any')); - } else { - $tcrule = $defaultrule; - foreach (@ec) - { - $tcrule =~ s/!$_ //; - print FILE "$_ " if ($_ eq 'any'); - } - print FILE $tcrule unless ((@ec == 1) && ($ec[0] eq 'any')); - } - } - - print FILE "\n"; - - print FILE " }\n\n"; - } - } - } - - print FILE " default {\n"; - print FILE " pass $defaultrule\n"; - if (($filtersettings{'ENABLE_LOG'} eq 'on') && ($filtersettings{'BLOCK_ALL'} eq 'on')) - { - if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on') - { - print FILE " logfile".$ident." default.log\n"; - } else { - print FILE " logfile".$ident." urlfilter.log\n"; - } - } - if ((($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) || ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')) - { - print FILE " rewrite rew-rule-0\n"; - } - print FILE " redirect $redirect\n"; - print FILE " }\n"; - print FILE "}\n"; - - close FILE; -} - -# ------------------------------------------------------------------- -- 2.39.2