]>
git.ipfire.org Git - ipfire-2.x.git/blob - html/cgi-bin/urlfilter.cgi
6594022bf804d7e0da21bad3a44b587584aadb34
2 ###############################################################################
4 # IPFire.org - A linux based firewall #
5 # Copyright (C) 2007 Michael Tremer & Christian Schmidt #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
20 ###############################################################################
24 # enable only the following on debugging purpose
26 #use CGI::Carp 'fatalsToBrowser';
31 require '/var/ipfire/general-functions.pl' ;
32 require "${General::swroot}/lang.pl" ;
33 require "${General::swroot}/header.pl" ;
39 my %filtersettings =();
43 my %updatesettings =();
58 my $tcfile = "${General::swroot}/urlfilter/timeconst" ;
59 my $uqfile = "${General::swroot}/urlfilter/userquota" ;
60 my $dbdir = "${General::swroot}/urlfilter/blacklists" ;
61 my $editdir = "${General::swroot}/urlfilter/editor" ;
62 my $repository = "/home/httpd/html/repository" ;
63 my $hintcolour = '#FFFFCC' ;
65 my $sourceurlfile = "${General::swroot}/urlfilter/autoupdate/autoupdate.urls" ;
66 my $updconffile = "${General::swroot}/urlfilter/autoupdate/autoupdate.conf" ;
67 my $updflagfile = "${General::swroot}/urlfilter/blacklists/.autoupdate.last" ;
68 my $upd_cron_dly = "${General::swroot}/urlfilter/autoupdate/cron.daily" ;
69 my $upd_cron_wly = "${General::swroot}/urlfilter/autoupdate/cron.weekly" ;
70 my $upd_cron_mly = "${General::swroot}/urlfilter/autoupdate/cron.monthly" ;
74 my $restoremessage = '' ;
80 my @repositorylist =();
81 my @repositoryfiles =();
83 my @selectedcategories =();
87 my @source_urllist =();
99 if (! - d
$dbdir ) { mkdir ( " $dbdir " ); }
100 if (! - e
$tcfile ) { system ( "touch $tcfile " ); }
101 if (! - e
$uqfile ) { system ( "touch $uqfile " ); }
102 if (! - e
$sourceurlfile ) { system ( "touch $sourceurlfile " ); }
104 & General
:: readhash
( "${General::swroot}/ethernet/settings" , \
%netsettings );
105 & General
:: readhash
( "${General::swroot}/main/settings" , \
%mainsettings );
106 & General
:: readhash
( "${General::swroot}/proxy/settings" , \
%proxysettings );
108 & readblockcategories
;
116 open ( FILE
, $sourceurlfile );
117 @source_urllist = < FILE
>;
120 $filtersettings { 'ENABLE_CUSTOM_BLACKLIST' } = 'off' ;
121 $filtersettings { 'ENABLE_CUSTOM_WHITELIST' } = 'off' ;
122 $filtersettings { 'ENABLE_CUSTOM_EXPRESSIONS' } = 'off' ;
123 $filtersettings { 'BLOCK_EXECUTABLES' } = 'off' ;
124 $filtersettings { 'BLOCK_AUDIO-VIDEO' } = 'off' ;
125 $filtersettings { 'BLOCK_ARCHIVES' } = 'off' ;
126 $filtersettings { 'ENABLE_REWRITE' } = 'off' ;
127 $filtersettings { 'UNFILTERED_CLIENTS' } = '' ;
128 $filtersettings { 'BANNED_CLIENTS' } = '' ;
129 $filtersettings { 'SHOW_CATEGORY' } = 'off' ;
130 $filtersettings { 'SHOW_URL' } = 'off' ;
131 $filtersettings { 'SHOW_IP' } = 'off' ;
132 $filtersettings { 'ENABLE_DNSERROR' } = 'off' ;
133 $filtersettings { 'ENABLE_JPEG' } = 'off' ;
134 $filtersettings { 'REDIRECT_PAGE' } = '' ;
135 $filtersettings { 'MSG_TEXT_1' } = '' ;
136 $filtersettings { 'MSG_TEXT_2' } = '' ;
137 $filtersettings { 'MSG_TEXT_3' } = '' ;
138 $filtersettings { 'ENABLE_EXPR_LISTS' } = 'off' ;
139 $filtersettings { 'BLOCK_IP_ADDR' } = 'off' ;
140 $filtersettings { 'BLOCK_ALL' } = 'off' ;
141 $filtersettings { 'ENABLE_EMPTY_ADS' } = 'off' ;
142 $filtersettings { 'ENABLE_GLOBAL_WHITELIST' } = 'off' ;
143 $filtersettings { 'ENABLE_SAFESEARCH' } = 'off' ;
144 $filtersettings { 'ENABLE_LOG' } = 'off' ;
145 $filtersettings { 'ENABLE_USERNAME_LOG' } = 'off' ;
146 $filtersettings { 'ENABLE_CATEGORY_LOG' } = 'off' ;
147 $filtersettings { 'CHILDREN' } = '5' ;
148 $filtersettings { 'ENABLE_AUTOUPDATE' } = 'off' ;
150 $filtersettings { 'ACTION' } = '' ;
151 $filtersettings { 'VALID' } = '' ;
153 & Header
:: getcgihash
( \
%filtersettings );
154 & Header
:: getcgihash
( \
%tcsettings );
155 & Header
:: getcgihash
( \
%uqsettings );
156 & Header
:: getcgihash
( \
%besettings );
158 if (( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'save' }) ||
159 ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter save and restart' }) ||
160 ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter upload file' }) ||
161 ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter remove file' }) ||
162 ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter upload background' }) ||
163 ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter upload blacklist' }) ||
164 ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter backup' }) ||
165 ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter restore' }))
168 @clients = split ( /\n/ , $filtersettings { 'UNFILTERED_CLIENTS' });
171 s/^\s+//g ; s/\s+$//g ; s/\s+-\s+/-/g ; s/\s+/ /g ; s/\n//g ;
172 if ( /.*-.*-.*/ ) { $errormessage = $Lang :: tr
{ 'urlfilter invalid ip or mask error' }; }
174 foreach ( @temp ) { unless ((& General
:: validipormask
( $_ )) || (& General
:: validipandmask
( $_ ))) { $errormessage = $Lang :: tr
{ 'urlfilter invalid ip or mask error' }; } }
176 @clients = split ( /\n/ , $filtersettings { 'BANNED_CLIENTS' });
179 s/^\s+//g ; s/\s+$//g ; s/\s+-\s+/-/g ; s/\s+/ /g ; s/\n//g ;
180 if ( /.*-.*-.*/ ) { $errormessage = $Lang :: tr
{ 'urlfilter invalid ip or mask error' }; }
182 foreach ( @temp ) { unless ((& General
:: validipormask
( $_ )) || (& General
:: validipandmask
( $_ ))) { $errormessage = $Lang :: tr
{ 'urlfilter invalid ip or mask error' }; } }
184 if ( $errormessage ) { goto ERROR
; }
186 if (!( $filtersettings { 'CHILDREN' } =~ /^\d+$/ ) || ( $filtersettings { 'CHILDREN' } < 1 ))
188 $errormessage = $Lang :: tr
{ 'urlfilter invalid num of children' };
192 if ((!( $filtersettings { 'REDIRECT_PAGE' } eq '' )) && (!( $filtersettings { 'REDIRECT_PAGE' } =~ /^https?:\/ \
// )))
194 $filtersettings { 'REDIRECT_PAGE' } = "http://" . $filtersettings { 'REDIRECT_PAGE' };
197 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter remove file' })
199 if (- e
" $repository / $filtersettings {'ID'}" ) { unlink ( " $repository / $filtersettings {'ID'}" ); }
200 $filtersettings { 'ACTION' } = $Lang :: tr
{ 'urlfilter manage repository' };
203 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter upload file' })
205 & Header
:: getcgihash
( \
%filtersettings , { 'wantfile' => 1 , 'filevar' => 'UPLOADFILE' });
207 $filtersettings { 'ACTION' } = $Lang :: tr
{ 'urlfilter manage repository' };
208 $_ = $filtersettings { 'UPLOADFILE' };
210 $_ = substr ( $_ , rindex ( $_ , "/" )+ 1 );
212 if ( copy
( $filtersettings { 'UPLOADFILE' }, " $repository / $_ " ) != 1 )
221 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter upload background' })
223 & Header
:: getcgihash
( \
%filtersettings , { 'wantfile' => 1 , 'filevar' => 'BACKGROUND' });
225 if ( copy
( $filtersettings { 'BACKGROUND' }, "/home/httpd/html/images/urlfilter/background.jpg" ) != 1 )
232 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter upload blacklist' })
234 & Header
:: getcgihash
( \
%filtersettings , { 'wantfile' => 1 , 'filevar' => 'UPDATEFILE' });
236 if (!( $filtersettings { 'UPDATEFILE' } =~ /.tar.gz$/ ))
238 $errormessage = $Lang :: tr
{ 'urlfilter wrong filetype' };
242 if ( copy
( $filtersettings { 'UPDATEFILE' }, "${General::swroot}/urlfilter/blacklists.tar.gz" ) != 1 )
248 if (!(- d
"${General::swroot}/urlfilter/update" )) { mkdir ( "${General::swroot}/urlfilter/update" ); }
250 my $exitcode = system ( "/bin/tar --no-same-owner -xzf ${General::swroot}/urlfilter/blacklists.tar.gz -C ${General::swroot}/urlfilter/update" );
254 $errormessage = $Lang :: tr
{ 'urlfilter tar error' };
257 if (- d
"${General::swroot}/urlfilter/update/BL" )
259 system ( "mv ${General::swroot}/urlfilter/update/BL ${General::swroot}/urlfilter/update/blacklists" );
262 if (- d
"${General::swroot}/urlfilter/update/category" )
264 system ( "mv ${General::swroot}/urlfilter/update/category ${General::swroot}/urlfilter/update/blacklists" );
267 if (!(- d
"${General::swroot}/urlfilter/update/blacklists" ))
269 $errormessage = $Lang :: tr
{ 'urlfilter invalid content' };
271 system ( "cp -r ${General::swroot}/urlfilter/update/blacklists/* $dbdir " );
273 & readblockcategories
;
278 $updatemessage = $Lang :: tr
{ 'urlfilter upload success' };
279 system ( "${General::swroot}/urlfilter/bin/prebuild.pl &" );
280 system ( "logger -t installpackage[urlfilter] \" URL filter blacklist - Blacklist update from local source completed \" " );
283 if (- d
"${General::swroot}/urlfilter/update" ) { system ( "rm -rf ${General::swroot}/urlfilter/update" ); }
284 if (- e
"${General::swroot}/urlfilter/blacklists.tar.gz" ) { unlink ( "${General::swroot}/urlfilter/blacklists.tar.gz" ); }
285 if ( $errormessage ) { goto ERROR
; }
288 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter backup' })
290 $blistbackup = ( $filtersettings { 'ENABLE_FULLBACKUP' } eq 'on' ) ?
"blacklists" : "blacklists/custom" ;
291 if ( system ( "/bin/tar -C ${General::swroot}/urlfilter -czf ${General::swroot}/urlfilter/backup.tar.gz settings timeconst userquota autoupdate $blistbackup " ))
293 $errormessage = $Lang :: tr
{ 'urlfilter backup error' };
298 print "Content-type: application/gzip \n " ;
299 print "Content-length: " ;
300 print (- s
"${General::swroot}/urlfilter/backup.tar.gz" );
302 print "Content-disposition: attachment; filename=urlfilter-backup.tar.gz \n\n " ;
304 open ( FILE
, "${General::swroot}/urlfilter/backup.tar.gz" );
305 while (< FILE
>) { print ; }
308 if (- e
"${General::swroot}/urlfilter/backup.tar.gz" ) { unlink ( "${General::swroot}/urlfilter/backup.tar.gz" ); }
313 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter restore' })
315 & Header
:: getcgihash
( \
%filtersettings , { 'wantfile' => 1 , 'filevar' => 'UPDATEFILE' });
317 if (!( $filtersettings { 'UPDATEFILE' } =~ /.tar.gz$/ ))
319 $errormessage = $Lang :: tr
{ 'urlfilter wrong filetype' };
323 if (!(- d
"${General::swroot}/urlfilter/restore" )) { mkdir ( "${General::swroot}/urlfilter/restore" ); }
325 if ( copy
( $filtersettings { 'UPDATEFILE' }, "${General::swroot}/urlfilter/backup.tar.gz" ) != 1 )
330 my $exitcode = system ( "/bin/tar --no-same-owner --preserve-permissions -xzf ${General::swroot}/urlfilter/backup.tar.gz -C ${General::swroot}/urlfilter/restore" );
333 $errormessage = $Lang :: tr
{ 'urlfilter tar error' };
335 if (!(- e
"${General::swroot}/urlfilter/restore/settings" ))
337 $errormessage = $Lang :: tr
{ 'urlfilter invalid restore file' };
339 system ( "cp -rp ${General::swroot}/urlfilter/restore/* ${General::swroot}/urlfilter/" );
340 & readblockcategories
;
344 $restoremessage = $Lang :: tr
{ 'urlfilter restore success' };
348 if (- e
"${General::swroot}/urlfilter/backup.tar.gz" ) { unlink ( "${General::swroot}/urlfilter/backup.tar.gz" ); }
349 if (- d
"${General::swroot}/urlfilter/restore" ) { system ( "rm -rf ${General::swroot}/urlfilter/restore" ); }
350 if ( $errormessage ) { goto ERROR
; }
353 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'save' })
355 $filtersettings { 'VALID' } = 'yes' ;
359 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter save and restart' })
361 if ((!(- e
"${General::swroot}/proxy/enable" )) && (!(- e
"${General::swroot}/proxy/enable_blue" )))
363 $errormessage = $Lang :: tr
{ 'urlfilter web proxy service required' };
366 if (!( $proxysettings { 'ENABLE_FILTER' } eq 'on' ))
368 $errormessage = $Lang :: tr
{ 'urlfilter not enabled' };
372 $filtersettings { 'VALID' } = 'yes' ;
375 system ( "chown -R nobody.nobody $dbdir " );
377 if (- e
" $dbdir /custom/allowed/domains.db" ) { unlink ( " $dbdir /custom/allowed/domains.db" ); }
378 if (- e
" $dbdir /custom/allowed/urls.db" ) { unlink ( " $dbdir /custom/allowed/urls.db" ); }
379 if (- e
" $dbdir /custom/blocked/domains.db" ) { unlink ( " $dbdir /custom/blocked/domains.db" ); }
380 if (- e
" $dbdir /custom/blocked/urls.db" ) { unlink ( " $dbdir /custom/blocked/urls.db" ); }
382 & setpermissions
( $dbdir );
384 system ( '/usr/local/bin/squidctrl restart >/dev/null 2>&1' );
388 if ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter set time constraints' }) { $tcsettings { 'TCMODE' } = 'on' }
390 if (( $tcsettings { 'MODE' } eq 'TIMECONSTRAINT' ) && ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'add' }))
392 $tcsettings { 'TCMODE' }= 'on' ;
394 if (! $tcsettings { 'DST' })
396 $errormessage = $Lang :: tr
{ 'urlfilter dst error' };
399 if (! $tcsettings { 'SRC' })
401 $errormessage = $Lang :: tr
{ 'urlfilter src error' };
404 if (!( $tcsettings { 'TO_HOUR' }. $tcsettings { 'TO_MINUTE' } gt $tcsettings { 'FROM_HOUR' }. $tcsettings { 'FROM_MINUTE' }))
406 $errormessage = $Lang :: tr
{ 'urlfilter timespace error' };
409 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' )))
411 $errormessage = $Lang :: tr
{ 'urlfilter weekday error' };
416 # transform to pre1.8 client definitions
417 @clients = split ( /\n/ , $tcsettings { 'SRC' });
418 undef $tcsettings { 'SRC' };
421 s/^\s+//g ; s/\s+$//g ; s/\s+-\s+/-/g ; s/\s+/ /g ; s/\n//g ;
422 $tcsettings { 'SRC' } .= " $_ " ;
424 $tcsettings { 'SRC' } =~ s/\s+$// ;
426 if ( $tcsettings { 'DST' } =~ /^any/ ) { $tcsettings { 'DST' } = 'any' ; }
427 if ( $tcsettings { 'ENABLERULE' } eq 'on' ) { $tcsettings { 'ACTIVE' } = $tcsettings { 'ENABLERULE' }; } else { $tcsettings { 'ACTIVE' } = 'off' }
429 $tcsettings { 'ENABLERULE' } = 'on' ;
430 if ( $tcsettings { 'EDITING' } eq 'no' ) {
431 open ( FILE
, ">> $tcfile " );
433 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 " ;
435 open ( FILE
, "> $tcfile " );
438 foreach $line ( @tclist )
441 if ( $tcsettings { 'EDITING' } eq $id ) {
442 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 " ;
443 } else { print FILE
" $line " ; }
448 $tcsettings { 'CHANGED' }= 'yes' ;
449 $tcsettings { 'TCMODE' }= 'on' ;
452 if ( $tcsettings { 'EDITING' } ne 'no' )
454 $tcsettings { 'ACTION' } = $Lang :: tr
{ 'edit' };
455 $tcsettings { 'ID' } = $tcsettings { 'EDITING' };
460 if (( $tcsettings { 'MODE' } eq 'TIMECONSTRAINT' ) && ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter copy rule' }) && (! $errormessage ))
463 foreach $line ( @tclist )
466 if ( $tcsettings { 'ID' } eq $id )
469 @temp = split ( /\,/ , $line );
470 $tcsettings { 'DEFINITION' } = $temp [ 0 ];
471 $tcsettings { 'MON' } = $temp [ 1 ];
472 $tcsettings { 'TUE' } = $temp [ 2 ];
473 $tcsettings { 'WED' } = $temp [ 3 ];
474 $tcsettings { 'THU' } = $temp [ 4 ];
475 $tcsettings { 'FRI' } = $temp [ 5 ];
476 $tcsettings { 'SAT' } = $temp [ 6 ];
477 $tcsettings { 'SUN' } = $temp [ 7 ];
478 $tcsettings { 'FROM_HOUR' } = $temp [ 8 ];
479 $tcsettings { 'FROM_MINUTE' } = $temp [ 9 ];
480 $tcsettings { 'TO_HOUR' } = $temp [ 10 ];
481 $tcsettings { 'TO_MINUTE' } = $temp [ 11 ];
482 $tcsettings { 'SRC' } = $temp [ 12 ];
483 $tcsettings { 'DST' } = $temp [ 13 ];
484 $tcsettings { 'ACCESS' } = $temp [ 14 ];
485 $tcsettings { 'ENABLERULE' } = $temp [ 15 ];
486 $tcsettings { 'COMMENT' } = $temp [ 16 ];
489 $tcsettings { 'TCMODE' }= 'on' ;
492 if (( $tcsettings { 'MODE' } eq 'TIMECONSTRAINT' ) && ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'remove' }))
495 open ( FILE
, "> $tcfile " );
497 foreach $line ( @tclist )
500 unless ( $tcsettings { 'ID' } eq $id ) { print FILE
" $line " ; }
503 $tcsettings { 'CHANGED' }= 'yes' ;
504 $tcsettings { 'TCMODE' }= 'on' ;
507 if (( $tcsettings { 'MODE' } eq 'TIMECONSTRAINT' ) && ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter restart' }))
509 if (!( $proxysettings { 'ENABLE_FILTER' } eq 'on' ))
511 $errormessage = $Lang :: tr
{ 'urlfilter not enabled' };
513 if ((!(- e
"${General::swroot}/proxy/enable" )) && (!(- e
"${General::swroot}/proxy/enable_blue" )))
515 $errormessage = $Lang :: tr
{ 'urlfilter web proxy service required' };
518 if (! $errormessage ) { system ( '/usr/local/bin/squidctrl restart >/dev/null 2>&1' ); }
519 $tcsettings { 'TCMODE' }= 'on' ;
522 if (( $tcsettings { 'MODE' } eq 'TIMECONSTRAINT' ) && ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'toggle enable disable' }))
524 open ( FILE
, "> $tcfile " );
527 foreach $line ( @tclist )
530 unless ( $tcsettings { 'ID' } eq $id ) { print FILE
" $line " ; }
534 @temp = split ( /\,/ , $line );
535 if ( $temp [ 15 ] eq 'on' ) { $temp [ 15 ] = 'off' ; } else { $temp [ 15 ] = 'on' }
536 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 " ;
540 $tcsettings { 'CHANGED' }= 'yes' ;
541 $tcsettings { 'TCMODE' }= 'on' ;
544 if (( $tcsettings { 'MODE' } eq 'TIMECONSTRAINT' ) && ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' }) && (! $errormessage ))
547 foreach $line ( @tclist )
550 if ( $tcsettings { 'ID' } eq $id )
553 @temp = split ( /\,/ , $line );
554 $tcsettings { 'DEFINITION' } = $temp [ 0 ];
555 $tcsettings { 'MON' } = $temp [ 1 ];
556 $tcsettings { 'TUE' } = $temp [ 2 ];
557 $tcsettings { 'WED' } = $temp [ 3 ];
558 $tcsettings { 'THU' } = $temp [ 4 ];
559 $tcsettings { 'FRI' } = $temp [ 5 ];
560 $tcsettings { 'SAT' } = $temp [ 6 ];
561 $tcsettings { 'SUN' } = $temp [ 7 ];
562 $tcsettings { 'FROM_HOUR' } = $temp [ 8 ];
563 $tcsettings { 'FROM_MINUTE' } = $temp [ 9 ];
564 $tcsettings { 'TO_HOUR' } = $temp [ 10 ];
565 $tcsettings { 'TO_MINUTE' } = $temp [ 11 ];
566 $tcsettings { 'SRC' } = $temp [ 12 ];
567 $tcsettings { 'DST' } = $temp [ 13 ];
568 $tcsettings { 'ACCESS' } = $temp [ 14 ];
569 $tcsettings { 'ENABLERULE' } = $temp [ 15 ];
570 $tcsettings { 'COMMENT' } = $temp [ 16 ];
573 $tcsettings { 'TCMODE' }= 'on' ;
576 if ((! $errormessage ) && (!( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter copy rule' })) && (!( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' }))) {
577 $tcsettings { 'ENABLERULE' }= 'on' ;
578 $tcsettings { 'TO_HOUR' }= '24' ;
581 if ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter set user quota' }) { $uqsettings { 'UQMODE' } = 'on' }
583 if (( $uqsettings { 'MODE' } eq 'USERQUOTA' ) && ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'add' }))
585 $uqsettings { 'UQMODE' }= 'on' ;
587 if ((!( $uqsettings { 'TIME_QUOTA' } =~ /^\d+/ )) || ( $uqsettings { 'TIME_QUOTA' } < '1' ))
589 $errormessage = $Lang :: tr
{ 'urlfilter quota time error' };
592 @temp = split ( /\n/ , $uqsettings { 'QUOTA_USERS' });
593 undef $uqsettings { 'QUOTA_USERS' };
596 s/^\s+//g ; s/\s+$//g ;
597 if ( $_ ) { $uqsettings { 'QUOTA_USERS' } .= $_ . " \n " ; }
600 if ( $uqsettings { 'QUOTA_USERS' } eq '' )
602 $errormessage = $Lang :: tr
{ 'urlfilter quota user error' };
605 $_ = $uqsettings { 'QUOTA_USERS' };
607 my $quota_users = $_ ;
609 if ( $uqsettings { 'QUOTA_USERS' } =~ /\\/ )
611 $errormessage = $Lang :: tr
{ 'urlfilter invalid user error' };
614 if (! $errormessage ) {
615 if ( $uqsettings { 'ENABLEQUOTA' } eq 'on' ) { $uqsettings { 'ACTIVE' } = $uqsettings { 'ENABLEQUOTA' }; } else { $uqsettings { 'ACTIVE' } = 'off' }
617 $uqsettings { 'ENABLERULE' } = 'on' ;
618 if ( $uqsettings { 'EDITING' } eq 'no' ) {
619 open ( FILE
, ">> $uqfile " );
621 print FILE
" $uqsettings {'TIME_QUOTA'}, $uqsettings {'SPORADIC'}, $uqsettings {'RENEWAL'}, $quota_users , $uqsettings {'ACTIVE'} \n " ;
623 open ( FILE
, "> $uqfile " );
626 foreach $line ( @uqlist )
629 if ( $uqsettings { 'EDITING' } eq $id ) {
630 print FILE
" $uqsettings {'TIME_QUOTA'}, $uqsettings {'SPORADIC'}, $uqsettings {'RENEWAL'}, $quota_users , $uqsettings {'ACTIVE'} \n " ;
631 } else { print FILE
" $line " ; }
636 $uqsettings { 'CHANGED' }= 'yes' ;
637 $uqsettings { 'MODE' }= 'USERQUOTA' ;
638 $uqsettings { 'UQMODE' }= 'on' ;
641 if ( $uqsettings { 'EDITING' } ne 'no' )
643 $uqsettings { 'ACTION' } = $Lang :: tr
{ 'edit' };
644 $uqsettings { 'ID' } = $uqsettings { 'EDITING' };
649 if (( $uqsettings { 'MODE' } eq 'USERQUOTA' ) && ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'remove' }))
652 open ( FILE
, "> $uqfile " );
654 foreach $line ( @uqlist )
657 unless ( $uqsettings { 'ID' } eq $id ) { print FILE
" $line " ; }
660 $uqsettings { 'CHANGED' }= 'yes' ;
661 $uqsettings { 'UQMODE' }= 'on' ;
664 if (! $errormessage ) {
665 $uqsettings { 'ENABLEQUOTA' }= 'on' ;
668 if (( $uqsettings { 'MODE' } eq 'USERQUOTA' ) && ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' }) && (! $errormessage ))
671 foreach $line ( @uqlist )
674 if ( $uqsettings { 'ID' } eq $id )
677 @temp = split ( /\,/ , $line );
678 $uqsettings { 'TIME_QUOTA' } = $temp [ 0 ];
679 $uqsettings { 'SPORADIC' } = $temp [ 1 ];
680 $uqsettings { 'RENEWAL' } = $temp [ 2 ];
681 $uqsettings { 'QUOTA_USERS' } = $temp [ 3 ];
682 $uqsettings { 'ENABLEQUOTA' } = $temp [ 4 ];
685 $uqsettings { 'UQMODE' }= 'on' ;
688 if (( $uqsettings { 'MODE' } eq 'USERQUOTA' ) && ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'toggle enable disable' }))
690 open ( FILE
, "> $uqfile " );
693 foreach $line ( @uqlist )
696 unless ( $uqsettings { 'ID' } eq $id ) { print FILE
" $line " ; }
700 @temp = split ( /\,/ , $line );
701 if ( $temp [ 4 ] eq 'on' ) { $temp [ 4 ] = 'off' ; } else { $temp [ 4 ] = 'on' }
702 print FILE
" $temp [0], $temp [1], $temp [2], $temp [3], $temp [4] \n " ;
706 $uqsettings { 'CHANGED' }= 'yes' ;
707 $uqsettings { 'UQMODE' }= 'on' ;
710 if (( $uqsettings { 'MODE' } eq 'USERQUOTA' ) && ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter restart' }))
712 if (!( $proxysettings { 'ENABLE_FILTER' } eq 'on' ))
714 $errormessage = $Lang :: tr
{ 'urlfilter not enabled' };
716 if ((!(- e
"${General::swroot}/proxy/enable" )) && (!(- e
"${General::swroot}/proxy/enable_blue" )))
718 $errormessage = $Lang :: tr
{ 'urlfilter web proxy service required' };
721 if (! $errormessage ) { system ( '/usr/local/bin/squidctrl restart >/dev/null 2>&1' ); }
722 $uqsettings { 'UQMODE' }= 'on' ;
725 if ( $besettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter blacklist editor' }) { $besettings { 'BEMODE' } = 'on' ; }
727 if ( $besettings { 'MODE' } eq 'BLACKLIST_EDITOR' )
729 @temp = split ( /\n/ , $besettings { 'BE_DOMAINS' });
730 undef $besettings { 'BE_DOMAINS' };
733 s/^\s+//g ; s/\s+$//g ;
734 if ( $_ ) { $besettings { 'BE_DOMAINS' } .= $_ . " \n " ; }
736 chomp ( $besettings { 'BE_DOMAINS' });
737 @temp = split ( /\n/ , $besettings { 'BE_URLS' });
738 undef $besettings { 'BE_URLS' };
741 s/^\s+//g ; s/\s+$//g ;
742 if ( $_ ) { $besettings { 'BE_URLS' } .= $_ . " \n " ; }
744 chomp ( $besettings { 'BE_URLS' });
745 @temp = split ( /\n/ , $besettings { 'BE_EXPRESSIONS' });
746 undef $besettings { 'BE_EXPRESSIONS' };
749 s/^\s+//g ; s/\s+$//g ;
750 if ( $_ ) { $besettings { 'BE_EXPRESSIONS' } .= $_ . " \n " ; }
752 chomp ( $besettings { 'BE_EXPRESSIONS' });
755 if (( $besettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter load blacklist' }) && ( $besettings { 'MODE' } = 'BLACKLIST_EDITOR' ))
757 $besettings { 'BEMODE' } = 'on' ;
759 $besettings { 'BE_NAME' } = $besettings { 'BE_BLACKLIST' };
761 delete $besettings { 'BE_DOMAINS' };
762 delete $besettings { 'BE_URLS' };
763 delete $besettings { 'BE_EXPRESSIONS' };
765 if (- e
" $dbdir / $besettings {'BE_NAME'}/domains" )
767 open ( FILE
, " $dbdir / $besettings {'BE_NAME'}/domains" );
768 while (< FILE
>) { unless ( $_ eq ' \n ' ) { $besettings { 'BE_DOMAINS' } .= $_ } };
770 chomp ( $besettings { 'BE_DOMAINS' });
772 if (- e
" $dbdir / $besettings {'BE_NAME'}/urls" )
774 open ( FILE
, " $dbdir / $besettings {'BE_NAME'}/urls" );
775 while (< FILE
>) { unless ( $_ eq ' \n ' ) { $besettings { 'BE_URLS' } .= $_ } };
777 chomp ( $besettings { 'BE_URLS' });
779 if (- e
" $dbdir / $besettings {'BE_NAME'}/expressions" )
781 open ( FILE
, " $dbdir / $besettings {'BE_NAME'}/expressions" );
782 while (< FILE
>) { unless ( $_ eq ' \n ' ) { $besettings { 'BE_EXPRESSIONS' } .= $_ } };
784 chomp ( $besettings { 'BE_EXPRESSIONS' });
788 if (( $besettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter import blacklist' }) && ( $besettings { 'MODE' } = 'BLACKLIST_EDITOR' ))
790 $besettings { 'BEMODE' } = 'on' ;
792 & Header
:: getcgihash
( \
%besettings , { 'wantfile' => 1 , 'filevar' => 'IMPORTFILE' });
794 if (!( $besettings { 'IMPORTFILE' } =~ /.tar.gz$/ ))
796 $errormessage = $Lang :: tr
{ 'urlfilter wrong filetype' };
798 if (!- d
" $editdir " ) { mkdir ( " $editdir " ); }
800 if ( copy
( $besettings { 'IMPORTFILE' }, " $editdir /blacklist.tar.gz" ) != 1 )
805 my $exitcode = system ( "/bin/tar --no-same-owner --preserve-permissions -xzf $editdir /blacklist.tar.gz -C $editdir " );
808 $errormessage = $Lang :: tr
{ 'urlfilter tar error' };
811 foreach (< $editdir /blacklists/ *>)
816 $besettings { 'BE_NAME' } = substr ( $_ , rindex ( $_ , "/" )+ 1 );
822 $errormessage = $Lang :: tr
{ 'urlfilter invalid import file' };
824 delete $besettings { 'BE_DOMAINS' };
825 delete $besettings { 'BE_URLS' };
826 delete $besettings { 'BE_EXPRESSIONS' };
828 if (- e
" $editdir /blacklists/ $besettings {'BE_NAME'}/domains" )
830 open ( FILE
, " $editdir /blacklists/ $besettings {'BE_NAME'}/domains" );
831 while (< FILE
>) { unless ( $_ eq ' \n ' ) { $besettings { 'BE_DOMAINS' } .= $_ } };
833 chomp ( $besettings { 'BE_DOMAINS' });
835 if (- e
" $editdir /blacklists/ $besettings {'BE_NAME'}/urls" )
837 open ( FILE
, " $editdir /blacklists/ $besettings {'BE_NAME'}/urls" );
838 while (< FILE
>) { unless ( $_ eq ' \n ' ) { $besettings { 'BE_URLS' } .= $_ } };
840 chomp ( $besettings { 'BE_URLS' });
842 if (- e
" $editdir /blacklists/ $besettings {'BE_NAME'}/expressions" )
844 open ( FILE
, " $editdir /blacklists/ $besettings {'BE_NAME'}/expressions" );
845 while (< FILE
>) { unless ( $_ eq ' \n ' ) { $besettings { 'BE_EXPRESSIONS' } .= $_ } };
847 chomp ( $besettings { 'BE_EXPRESSIONS' });
852 if (- d
$editdir ) { system ( "rm -rf $editdir " ); }
858 if (( $besettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter export blacklist' }) && ( $besettings { 'MODE' } = 'BLACKLIST_EDITOR' ))
860 $besettings { 'BEMODE' } = 'on' ;
862 if ( $besettings { 'BE_NAME' } eq '' )
864 $errormessage = $Lang :: tr
{ 'urlfilter category name error' };
865 } elsif ( $besettings { 'BE_DOMAINS' } || $besettings { 'BE_URLS' } || $besettings { 'BE_EXPRESSIONS' }) {
867 $_ = $besettings { 'BE_NAME' }; tr/A-Z/a-z/ ; $besettings { 'BE_NAME' } = $_ ;
869 if (!(- d
" $editdir " )) { mkdir ( " $editdir " ); }
870 if (!(- d
" $editdir /blacklists" )) { mkdir ( " $editdir /blacklists" ); }
871 if (!(- d
" $editdir /blacklists/ $besettings {'BE_NAME'}" )) { mkdir ( " $editdir /blacklists/ $besettings {'BE_NAME'}" ); }
873 open ( FILE
, "> $editdir /blacklists/ $besettings {'BE_NAME'}/domains" );
875 print FILE
" $besettings {'BE_DOMAINS'} \n " ;
877 open ( FILE
, "> $editdir /blacklists/ $besettings {'BE_NAME'}/urls" );
879 print FILE
" $besettings {'BE_URLS'} \n " ;
881 open ( FILE
, "> $editdir /blacklists/ $besettings {'BE_NAME'}/expressions" );
883 print FILE
" $besettings {'BE_EXPRESSIONS'} \n " ;
886 if ( system ( "/bin/tar -C $editdir -czf $editdir / $besettings {'BE_NAME'}.tar.gz blacklists" ))
888 $errormessage = $Lang :: tr
{ 'urlfilter export error' };
892 print "Content-type: application/gzip \n " ;
893 print "Content-length: " ;
894 print (- s
" $editdir / $besettings {'BE_NAME'}.tar.gz" );
896 print "Content-disposition: attachment; filename= $besettings {'BE_NAME'}.tar.gz \n\n " ;
898 open ( FILE
, " $editdir / $besettings {'BE_NAME'}.tar.gz" );
899 while (< FILE
>) { print ; }
902 if (- d
$editdir ) { system ( "rm -rf $editdir " ); }
906 $errormessage = $Lang :: tr
{ 'urlfilter category data error' };
910 if (( $besettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter install blacklist' }) && ( $besettings { 'MODE' } = 'BLACKLIST_EDITOR' ))
912 $besettings { 'BEMODE' } = 'on' ;
914 if ( $besettings { 'BE_NAME' } eq '' )
916 $errormessage = $Lang :: tr
{ 'urlfilter category name error' };
917 } elsif ( $besettings { 'BE_DOMAINS' } || $besettings { 'BE_URLS' } || $besettings { 'BE_EXPRESSIONS' }) {
919 $_ = $besettings { 'BE_NAME' }; tr/A-Z/a-z/ ; $besettings { 'BE_NAME' } = $_ ;
921 if (!- d
" $editdir " ) { mkdir ( " $editdir " ); }
923 if (!- d
" $dbdir / $besettings {'BE_NAME'}" ) { mkdir ( " $dbdir / $besettings {'BE_NAME'}" ); }
925 if (- e
" $dbdir / $besettings {'BE_NAME'}/domains" ) { unlink ( " $dbdir / $besettings {'BE_NAME'}/domains" ); }
926 if ( $besettings { 'BE_DOMAINS' })
928 open ( FILE
, "> $dbdir / $besettings {'BE_NAME'}/domains" );
930 print FILE
" $besettings {'BE_DOMAINS'} \n " ;
933 if (- e
" $dbdir / $besettings {'BE_NAME'}/urls" ) { unlink ( " $dbdir / $besettings {'BE_NAME'}/urls" ); }
934 if ( $besettings { 'BE_URLS' })
936 open ( FILE
, "> $dbdir / $besettings {'BE_NAME'}/urls" );
938 print FILE
" $besettings {'BE_URLS'} \n " ;
941 if (- e
" $dbdir / $besettings {'BE_NAME'}/expressions" ) { unlink ( " $dbdir / $besettings {'BE_NAME'}/expressions" ); }
942 if ( $besettings { 'BE_EXPRESSIONS' })
944 open ( FILE
, "> $dbdir / $besettings {'BE_NAME'}/expressions" );
946 print FILE
" $besettings {'BE_EXPRESSIONS'} \n " ;
950 open ( FILE
, "> $editdir /install.conf" );
952 print FILE
"logdir /var/log/squidGuard \n " ;
953 print FILE
"dbhome $dbdir / $besettings {'BE_NAME'} \n\n " ;
954 print FILE
"dest $besettings {'BE_NAME'} { \n " ;
955 if ( $besettings { 'BE_DOMAINS' }) { print FILE
" domainlist domains \n " ; }
956 if ( $besettings { 'BE_URLS' }) { print FILE
" urllist urls \n " ; }
957 if ( $besettings { 'BE_EXPRESSIONS' }) { print FILE
" expressions expressions \n " ; }
959 print FILE
"acl { \n " ;
960 print FILE
" default { \n " ;
961 print FILE
" pass none \n " ;
966 system ( "rm -f $dbdir / $besettings {'BE_NAME'}/*.db" );
967 system ( "/usr/sbin/squidGuard -c $editdir /install.conf -C all" );
968 system ( "chmod a+w $dbdir / $besettings {'BE_NAME'}/*.db" );
970 & readblockcategories
;
975 system ( '/usr/local/bin/squidctrl restart >/dev/null 2>&1' ) unless ( $besettings { 'NORESTART' } eq 'on' );
977 if (- d
$editdir ) { system ( "rm -rf $editdir " ); }
979 $errormessage = $Lang :: tr
{ 'urlfilter category data error' };
983 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter save schedule' })
985 if (( $filtersettings { 'UPDATE_SOURCE' } eq 'custom' ) && ( $filtersettings { 'CUSTOM_UPDATE_URL' } eq '' ))
987 $errormessage = $Lang :: tr
{ 'urlfilter custom url required' };
989 open ( FILE
, "> $updconffile " );
990 print FILE
"ENABLE_AUTOUPDATE= $filtersettings {'ENABLE_AUTOUPDATE'} \n " ;
991 print FILE
"UPDATE_SCHEDULE= $filtersettings {'UPDATE_SCHEDULE'} \n " ;
992 print FILE
"UPDATE_SOURCE= $filtersettings {'UPDATE_SOURCE'} \n " ;
993 print FILE
"CUSTOM_UPDATE_URL= $filtersettings {'CUSTOM_UPDATE_URL'} \n " ;
996 if (- e
$upd_cron_dly ) { unlink ( $upd_cron_dly ); }
997 if (- e
$upd_cron_wly ) { unlink ( $upd_cron_wly ); }
998 if (- e
$upd_cron_mly ) { unlink ( $upd_cron_mly ); }
1000 if (( $filtersettings { 'ENABLE_AUTOUPDATE' } eq 'on' ) && ( $filtersettings { 'UPDATE_SCHEDULE' } eq 'daily' ))
1002 symlink ( "../bin/autoupdate.pl" , $upd_cron_dly )
1004 symlink ( "/bin/false" , $upd_cron_dly )
1007 if (( $filtersettings { 'ENABLE_AUTOUPDATE' } eq 'on' ) && ( $filtersettings { 'UPDATE_SCHEDULE' } eq 'weekly' ))
1009 symlink ( "../bin/autoupdate.pl" , $upd_cron_wly )
1011 symlink ( "/bin/false" , $upd_cron_wly )
1014 if (( $filtersettings { 'ENABLE_AUTOUPDATE' } eq 'on' ) && ( $filtersettings { 'UPDATE_SCHEDULE' } eq 'monthly' ))
1016 symlink ( "../bin/autoupdate.pl" , $upd_cron_mly )
1018 symlink ( "/bin/false" , $upd_cron_mly )
1023 if ( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter update now' })
1025 if ( $filtersettings { 'UPDATE_SOURCE' } eq 'custom' )
1027 if ( $filtersettings { 'CUSTOM_UPDATE_URL' } eq '' )
1029 $errormessage = $Lang :: tr
{ 'urlfilter custom url required' };
1031 system ( "${General::swroot}/urlfilter/bin/autoupdate.pl $filtersettings {'CUSTOM_UPDATE_URL'} &" );
1034 system ( "${General::swroot}/urlfilter/bin/autoupdate.pl $filtersettings {'UPDATE_SOURCE'} &" );
1039 if (- e
"${General::swroot}/urlfilter/settings" ) { & General
:: readhash
( "${General::swroot}/urlfilter/settings" , \
%filtersettings ); }
1045 if ( $errormessage ) { $filtersettings { 'VALID' } = 'no' ; }
1047 $checked { 'ENABLE_CUSTOM_BLACKLIST' }{ 'off' } = '' ;
1048 $checked { 'ENABLE_CUSTOM_BLACKLIST' }{ 'on' } = '' ;
1049 $checked { 'ENABLE_CUSTOM_BLACKLIST' }{ $filtersettings { 'ENABLE_CUSTOM_BLACKLIST' }} = "checked='checked'" ;
1050 $checked { 'ENABLE_CUSTOM_WHITELIST' }{ 'off' } = '' ;
1051 $checked { 'ENABLE_CUSTOM_WHITELIST' }{ 'on' } = '' ;
1052 $checked { 'ENABLE_CUSTOM_WHITELIST' }{ $filtersettings { 'ENABLE_CUSTOM_WHITELIST' }} = "checked='checked'" ;
1053 $checked { 'ENABLE_CUSTOM_EXPRESSIONS' }{ 'off' } = '' ;
1054 $checked { 'ENABLE_CUSTOM_EXPRESSIONS' }{ 'on' } = '' ;
1055 $checked { 'ENABLE_CUSTOM_EXPRESSIONS' }{ $filtersettings { 'ENABLE_CUSTOM_EXPRESSIONS' }} = "checked='checked'" ;
1056 $checked { 'BLOCK_EXECUTABLES' }{ 'off' } = '' ;
1057 $checked { 'BLOCK_EXECUTABLES' }{ 'on' } = '' ;
1058 $checked { 'BLOCK_EXECUTABLES' }{ $filtersettings { 'BLOCK_EXECUTABLES' }} = "checked='checked'" ;
1059 $checked { 'BLOCK_AUDIO-VIDEO' }{ 'off' } = '' ;
1060 $checked { 'BLOCK_AUDIO-VIDEO' }{ 'on' } = '' ;
1061 $checked { 'BLOCK_AUDIO-VIDEO' }{ $filtersettings { 'BLOCK_AUDIO-VIDEO' }} = "checked='checked'" ;
1062 $checked { 'BLOCK_ARCHIVES' }{ 'off' } = '' ;
1063 $checked { 'BLOCK_ARCHIVES' }{ 'on' } = '' ;
1064 $checked { 'BLOCK_ARCHIVES' }{ $filtersettings { 'BLOCK_ARCHIVES' }} = "checked='checked'" ;
1065 $checked { 'ENABLE_REWRITE' }{ 'off' } = '' ;
1066 $checked { 'ENABLE_REWRITE' }{ 'on' } = '' ;
1067 $checked { 'ENABLE_REWRITE' }{ $filtersettings { 'ENABLE_REWRITE' }} = "checked='checked'" ;
1068 $checked { 'SHOW_CATEGORY' }{ 'off' } = '' ;
1069 $checked { 'SHOW_CATEGORY' }{ 'on' } = '' ;
1070 $checked { 'SHOW_CATEGORY' }{ $filtersettings { 'SHOW_CATEGORY' }} = "checked='checked'" ;
1071 $checked { 'SHOW_URL' }{ 'off' } = '' ;
1072 $checked { 'SHOW_URL' }{ 'on' } = '' ;
1073 $checked { 'SHOW_URL' }{ $filtersettings { 'SHOW_URL' }} = "checked='checked'" ;
1074 $checked { 'SHOW_IP' }{ 'off' } = '' ;
1075 $checked { 'SHOW_IP' }{ 'on' } = '' ;
1076 $checked { 'SHOW_IP' }{ $filtersettings { 'SHOW_IP' }} = "checked='checked'" ;
1077 $checked { 'ENABLE_DNSERROR' }{ 'off' } = '' ;
1078 $checked { 'ENABLE_DNSERROR' }{ 'on' } = '' ;
1079 $checked { 'ENABLE_DNSERROR' }{ $filtersettings { 'ENABLE_DNSERROR' }} = "checked='checked'" ;
1080 $checked { 'ENABLE_JPEG' }{ 'off' } = '' ;
1081 $checked { 'ENABLE_JPEG' }{ 'on' } = '' ;
1082 $checked { 'ENABLE_JPEG' }{ $filtersettings { 'ENABLE_JPEG' }} = "checked='checked'" ;
1083 $checked { 'ENABLE_EXPR_LISTS' }{ 'off' } = '' ;
1084 $checked { 'ENABLE_EXPR_LISTS' }{ 'on' } = '' ;
1085 $checked { 'ENABLE_EXPR_LISTS' }{ $filtersettings { 'ENABLE_EXPR_LISTS' }} = "checked='checked'" ;
1086 $checked { 'BLOCK_IP_ADDR' }{ 'off' } = '' ;
1087 $checked { 'BLOCK_IP_ADDR' }{ 'on' } = '' ;
1088 $checked { 'BLOCK_IP_ADDR' }{ $filtersettings { 'BLOCK_IP_ADDR' }} = "checked='checked'" ;
1089 $checked { 'BLOCK_ALL' }{ 'off' } = '' ;
1090 $checked { 'BLOCK_ALL' }{ 'on' } = '' ;
1091 $checked { 'BLOCK_ALL' }{ $filtersettings { 'BLOCK_ALL' }} = "checked='checked'" ;
1092 $checked { 'ENABLE_EMPTY_ADS' }{ 'off' } = '' ;
1093 $checked { 'ENABLE_EMPTY_ADS' }{ 'on' } = '' ;
1094 $checked { 'ENABLE_EMPTY_ADS' }{ $filtersettings { 'ENABLE_EMPTY_ADS' }} = "checked='checked'" ;
1095 $checked { 'ENABLE_GLOBAL_WHITELIST' }{ 'off' } = '' ;
1096 $checked { 'ENABLE_GLOBAL_WHITELIST' }{ 'on' } = '' ;
1097 $checked { 'ENABLE_GLOBAL_WHITELIST' }{ $filtersettings { 'ENABLE_GLOBAL_WHITELIST' }} = "checked='checked'" ;
1098 $checked { 'ENABLE_SAFESEARCH' }{ 'off' } = '' ;
1099 $checked { 'ENABLE_SAFESEARCH' }{ 'on' } = '' ;
1100 $checked { 'ENABLE_SAFESEARCH' }{ $filtersettings { 'ENABLE_SAFESEARCH' }} = "checked='checked'" ;
1101 $checked { 'ENABLE_LOG' }{ 'off' } = '' ;
1102 $checked { 'ENABLE_LOG' }{ 'on' } = '' ;
1103 $checked { 'ENABLE_LOG' }{ $filtersettings { 'ENABLE_LOG' }} = "checked='checked'" ;
1104 $checked { 'ENABLE_USERNAME_LOG' }{ 'off' } = '' ;
1105 $checked { 'ENABLE_USERNAME_LOG' }{ 'on' } = '' ;
1106 $checked { 'ENABLE_USERNAME_LOG' }{ $filtersettings { 'ENABLE_USERNAME_LOG' }} = "checked='checked'" ;
1107 $checked { 'ENABLE_CATEGORY_LOG' }{ 'off' } = '' ;
1108 $checked { 'ENABLE_CATEGORY_LOG' }{ 'on' } = '' ;
1109 $checked { 'ENABLE_CATEGORY_LOG' }{ $filtersettings { 'ENABLE_CATEGORY_LOG' }} = "checked='checked'" ;
1111 foreach $category ( @filtergroups ) {
1112 $checked { $category }{ 'off' } = '' ;
1113 $checked { $category }{ 'on' } = '' ;
1114 $checked { $category }{ $filtersettings { $category }} = "checked='checked'" ;
1117 $selected { 'DEFINITION' }{ $tcsettings { 'DEFINITION' }} = "selected='selected'" ;
1118 $selected { 'FROM_HOUR' }{ $tcsettings { 'FROM_HOUR' }} = "selected='selected'" ;
1119 $selected { 'FROM_MINUTE' }{ $tcsettings { 'FROM_MINUTE' }} = "selected='selected'" ;
1120 $selected { 'TO_HOUR' }{ $tcsettings { 'TO_HOUR' }} = "selected='selected'" ;
1121 $selected { 'TO_MINUTE' }{ $tcsettings { 'TO_MINUTE' }} = "selected='selected'" ;
1123 @selectedcategories = split ( /\|/ , $tcsettings { 'DST' });
1124 foreach ( @selectedcategories )
1126 $selected { 'DST' }{ $_ } = "selected='selected'" ;
1129 $selected { 'ACCESS' }{ $tcsettings { 'ACCESS' }} = "selected='selected'" ;
1131 $checked { 'ENABLERULE' }{ 'off' } = '' ;
1132 $checked { 'ENABLERULE' }{ 'on' } = '' ;
1133 $checked { 'ENABLERULE' }{ $tcsettings { 'ENABLERULE' }} = "checked='checked'" ;
1134 $checked { 'MON' }{ 'off' } = '' ;
1135 $checked { 'MON' }{ 'on' } = '' ;
1136 $checked { 'MON' }{ $tcsettings { 'MON' }} = "checked='checked'" ;
1137 $checked { 'TUE' }{ 'off' } = '' ;
1138 $checked { 'TUE' }{ 'on' } = '' ;
1139 $checked { 'TUE' }{ $tcsettings { 'TUE' }} = "checked='checked'" ;
1140 $checked { 'WED' }{ 'off' } = '' ;
1141 $checked { 'WED' }{ 'on' } = '' ;
1142 $checked { 'WED' }{ $tcsettings { 'WED' }} = "checked='checked'" ;
1143 $checked { 'THU' }{ 'off' } = '' ;
1144 $checked { 'THU' }{ 'on' } = '' ;
1145 $checked { 'THU' }{ $tcsettings { 'THU' }} = "checked='checked'" ;
1146 $checked { 'FRI' }{ 'off' } = '' ;
1147 $checked { 'FRI' }{ 'on' } = '' ;
1148 $checked { 'FRI' }{ $tcsettings { 'FRI' }} = "checked='checked'" ;
1149 $checked { 'SAT' }{ 'off' } = '' ;
1150 $checked { 'SAT' }{ 'on' } = '' ;
1151 $checked { 'SAT' }{ $tcsettings { 'SAT' }} = "checked='checked'" ;
1152 $checked { 'SUN' }{ 'off' } = '' ;
1153 $checked { 'SUN' }{ 'on' } = '' ;
1154 $checked { 'SUN' }{ $tcsettings { 'SUN' }} = "checked='checked'" ;
1156 $selected { 'SPORADIC' }{ $uqsettings { 'SPORADIC' }} = "selected='selected'" ;
1157 $selected { 'RENEWAL' } { $uqsettings { 'RENEWAL' }} = "selected='selected'" ;
1159 $checked { 'ENABLEQUOTA' }{ 'off' } = '' ;
1160 $checked { 'ENABLEQUOTA' }{ 'on' } = '' ;
1161 $checked { 'ENABLEQUOTA' }{ $uqsettings { 'ENABLEQUOTA' }} = "checked='checked'" ;
1163 $selected { 'BE_BLACKLIST' }{ $besettings { 'BE_BLACKLIST' }} = "selected='selected'" ;
1166 & Header
:: showhttpheaders
();
1168 & Header
:: openpage
( $Lang :: tr
{ 'urlfilter configuration' }, 1 , '' );
1170 & Header
:: openbigbox
( '100%' , 'left' , '' , $errormessage );
1172 if ( $errormessage ) {
1173 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'error messages' });
1174 print "<font class='base'> $errormessage </font> \n " ;
1175 & Header
:: closebox
();
1176 } elsif (( $tcsettings { 'CHANGED' } eq 'yes' ) || ( $uqsettings { 'CHANGED' } eq 'yes' ) ) {
1178 print "<form method='post' action=' $ENV {'SCRIPT_NAME'}'> \n " ;
1179 & Header
:: openbox
( '100%' , 'left' , " $Lang ::tr{'urlfilter restart notification'}:" );
1180 print "<class name='base'> $Lang ::tr{'urlfilter restart message'} \n " ;
1181 if ( $uqsettings { 'MODE' } eq 'USERQUOTA' ) { print "<p><class name='base'> $Lang ::tr{'urlfilter quota restart message'} \n " ; }
1183 print "<p><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter restart'}' />" ;
1184 if ( $tcsettings { 'MODE' } eq 'TIMECONSTRAINT' ) { print "<input type='hidden' name='MODE' value='TIMECONSTRAINT' />" ; }
1185 if ( $uqsettings { 'MODE' } eq 'USERQUOTA' ) { print "<input type='hidden' name='MODE' value='USERQUOTA' />" ; }
1186 & Header
:: closebox
();
1190 if ( $restoremessage ) {
1191 & Header
:: openbox
( '100%' , 'left' , " $Lang ::tr{'urlfilter restore results'}:" );
1192 print "<class name='base'> $restoremessage \n " ;
1193 print " </class> \n " ;
1194 & Header
:: closebox
();
1197 if ((! $tcsettings { 'TCMODE' }) && (! $uqsettings { 'UQMODE' }) && (! $besettings { 'BEMODE' })) {
1199 if (!( $filtersettings { 'ACTION' } eq $Lang :: tr
{ 'urlfilter manage repository' })) {
1201 #==========================================================
1203 # Section: Main Configuration
1205 #==========================================================
1207 print "<form method='post' action=' $ENV {'SCRIPT_NAME'}' enctype='multipart/form-data'> \n " ;
1209 & Header
:: openbox
( '100%' , 'left' , " $Lang ::tr{'urlfilter filter settings'}:" );
1211 <table width='100%'>
1213 <td colspan='4'><b> $Lang ::tr{'urlfilter block categories'}</b></td>
1218 if ( @categories == 0 ) {
1221 <td><i> $Lang ::tr{'urlfilter no categories'}</i></td>
1231 for ( $n = 0 ; $n <= @categories ; $n = $n + $i ) {
1232 for ( $i = 0 ; $i <= 3 ; $i ++) {
1233 if ( $i eq 0 ) { print "<tr> \n " ; }
1234 if (( $n + $i ) < @categories ) {
1235 print "<td width='15%'> @categories [ $n + $i ]:<\/td> \n " ;
1236 print "<td width='10%'><input type='checkbox' name= @filtergroups [ $n + $i ] $checked { @filtergroups [ $n + $i ]}{'on'} /></td> \n " ;
1238 if ( $i eq 3 ) { print "<\/tr> \n " ; }
1245 <table width='100%'>
1247 <td><b> $Lang ::tr{'urlfilter custom blacklist'}</b></td>
1253 <td colspan='2'> $Lang ::tr{'urlfilter blocked domains'} <img src='/blob.gif' alt='*' /></td>
1254 <td colspan='2'> $Lang ::tr{'urlfilter blocked urls'} <img src='/blob.gif' alt='*' /></td>
1257 <td colspan='2' width='50%'><textarea name='CUSTOM_BLACK_DOMAINS' cols='32' rows='6' wrap='off'>
1261 print $filtersettings { 'CUSTOM_BLACK_DOMAINS' };
1265 <td colspan='2' width='50%'><textarea name='CUSTOM_BLACK_URLS' cols='32' rows='6' wrap='off'>
1269 print $filtersettings { 'CUSTOM_BLACK_URLS' };
1275 <table width='100%'>
1277 <td class='base' width='25%'> $Lang ::tr{'urlfilter enable custom blacklist'}:</td>
1278 <td><input type='checkbox' name='ENABLE_CUSTOM_BLACKLIST' $checked {'ENABLE_CUSTOM_BLACKLIST'}{'on'} /></td>
1284 <table width='100%'>
1286 <td><b> $Lang ::tr{'urlfilter custom whitelist'}</b></td>
1292 <td colspan='2'> $Lang ::tr{'urlfilter allowed domains'} <img src='/blob.gif' alt='*' /></td>
1293 <td colspan='2'> $Lang ::tr{'urlfilter allowed urls'} <img src='/blob.gif' alt='*' /></td>
1296 <td colspan='2' width='50%'><textarea name='CUSTOM_WHITE_DOMAINS' cols='32' rows='6' wrap='off'>
1300 print $filtersettings { 'CUSTOM_WHITE_DOMAINS' };
1304 <td colspan='2' width='50%'><textarea name='CUSTOM_WHITE_URLS' cols='32' rows='6' wrap='off'>
1308 print $filtersettings { 'CUSTOM_WHITE_URLS' };
1314 <table width='100%'>
1316 <td class='base' width='25%'> $Lang ::tr{'urlfilter enable custom whitelist'}:</td>
1317 <td><input type='checkbox' name='ENABLE_CUSTOM_WHITELIST' $checked {'ENABLE_CUSTOM_WHITELIST'}{'on'} /></td>
1323 <table width='100%'>
1325 <td colspan='4'><b> $Lang ::tr{'urlfilter custom expression list'}</b></td>
1328 <td colspan='4'> $Lang ::tr{'urlfilter blocked expressions'} <img src='/blob.gif' alt='*' /></td>
1331 <td colspan='4'><textarea name='CUSTOM_EXPRESSIONS' cols='70' rows='3' wrap='off'>
1335 print $filtersettings { 'CUSTOM_EXPRESSIONS' };
1341 <td class='base' width='25%'> $Lang ::tr{'urlfilter enable custom expression list'}:</td>
1342 <td><input type='checkbox' name='ENABLE_CUSTOM_EXPRESSIONS' $checked {'ENABLE_CUSTOM_EXPRESSIONS'}{'on'} /></td>
1348 <table width='100%'>
1350 <td colspan='4'><b> $Lang ::tr{'urlfilter file ext block'}</b></td>
1353 <td width='25%' class='base'> $Lang ::tr{'urlfilter block executables'}:</td>
1354 <td width='12%'><input type='checkbox' name='BLOCK_EXECUTABLES' $checked {'BLOCK_EXECUTABLES'}{'on'} /></td>
1355 <td width='25%' class='base'> $Lang ::tr{'urlfilter block audio-video'}:</td>
1356 <td><input type='checkbox' name='BLOCK_AUDIO-VIDEO' $checked {'BLOCK_AUDIO-VIDEO'}{'on'} /></td>
1359 <td class='base'> $Lang ::tr{'urlfilter block archives'}:</td>
1360 <td><input type='checkbox' name='BLOCK_ARCHIVES' $checked {'BLOCK_ARCHIVES'}{'on'} /></td>
1366 <table width='100%'>
1368 <td colspan='4'><b> $Lang ::tr{'urlfilter local file redirection'}</b></td>
1371 <td width='25%' class='base'> $Lang ::tr{'urlfilter enable rewrite rules'}:</td>
1372 <td width='12%'><input type='checkbox' name='ENABLE_REWRITE' $checked {'ENABLE_REWRITE'}{'on'} /></td>
1377 <td><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter manage repository'}'></td>
1384 <table width='100%'>
1386 <td colspan='2'><b> $Lang ::tr{'urlfilter network access control'}</b></td>
1391 <td colspan='2'> $Lang ::tr{'urlfilter unfiltered clients'} <img src='/blob.gif' alt='*' /></td>
1392 <td colspan='2'> $Lang ::tr{'urlfilter banned clients'} <img src='/blob.gif' alt='*' /></td>
1395 <td colspan='2' width='50%'><textarea name='UNFILTERED_CLIENTS' cols='32' rows='6' wrap='off'>
1399 # transform from pre1.8 client definitions
1400 $filtersettings { 'UNFILTERED_CLIENTS' } =~ s/^\s+//g ;
1401 $filtersettings { 'UNFILTERED_CLIENTS' } =~ s/\s+$//g ;
1402 $filtersettings { 'UNFILTERED_CLIENTS' } =~ s/\s+-\s+/-/g ;
1403 $filtersettings { 'UNFILTERED_CLIENTS' } =~ s/\s+/ /g ;
1405 @clients = split ( / / , $filtersettings { 'UNFILTERED_CLIENTS' });
1406 undef $filtersettings { 'UNFILTERED_CLIENTS' };
1407 foreach ( @clients ) { $filtersettings { 'UNFILTERED_CLIENTS' } .= " $_ \n " ; }
1409 print $filtersettings { 'UNFILTERED_CLIENTS' };
1413 <td colspan='2' width='50%'><textarea name='BANNED_CLIENTS' cols='32' rows='6' wrap='off'>
1417 # transform from pre1.8 client definitions
1418 $filtersettings { 'BANNED_CLIENTS' } =~ s/^\s+//g ;
1419 $filtersettings { 'BANNED_CLIENTS' } =~ s/\s+$//g ;
1420 $filtersettings { 'BANNED_CLIENTS' } =~ s/\s+-\s+/-/g ;
1421 $filtersettings { 'BANNED_CLIENTS' } =~ s/\s+/ /g ;
1423 @clients = split ( / / , $filtersettings { 'BANNED_CLIENTS' });
1424 undef $filtersettings { 'BANNED_CLIENTS' };
1425 foreach ( @clients ) { $filtersettings { 'BANNED_CLIENTS' } .= " $_ \n " ; }
1427 print $filtersettings { 'BANNED_CLIENTS' };
1434 <table width='100%'>
1436 <td colspan='4'><b> $Lang ::tr{'urlfilter timebased access control'}</b></td>
1439 <td width='25%'><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter set time constraints'}'></td>
1440 <td width='25%'><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter set user quota'}'></td>
1446 <table width='100%'>
1448 <td colspan='4'><b> $Lang ::tr{'urlfilter block settings'}</b></td>
1451 <td width='25%' class='base'> $Lang ::tr{'urlfilter show category'}:</td>
1452 <td width='12%'><input type='checkbox' name='SHOW_CATEGORY' $checked {'SHOW_CATEGORY'}{'on'} /></td>
1453 <td width='25%' class='base'> $Lang ::tr{'urlfilter redirectpage'}: <img src='/blob.gif' alt='*' /></td>
1454 <td><input type='text' name='REDIRECT_PAGE' value=' $filtersettings {'REDIRECT_PAGE'}' size='40' /></td>
1457 <td class='base'> $Lang ::tr{'urlfilter show url'}:</td>
1458 <td><input type='checkbox' name='SHOW_URL' $checked {'SHOW_URL'}{'on'} /></td>
1459 <td class='base'> $Lang ::tr{'urlfilter msg text 1'}: <img src='/blob.gif' alt='*' /></td>
1460 <td><input type='text' name='MSG_TEXT_1' value=' $filtersettings {'MSG_TEXT_1'}' size='40' /></td>
1463 <td class='base'> $Lang ::tr{'urlfilter show ip'}:</td>
1464 <td><input type='checkbox' name='SHOW_IP' $checked {'SHOW_IP'}{'on'} /></td>
1465 <td class='base'> $Lang ::tr{'urlfilter msg text 2'}: <img src='/blob.gif' alt='*' /></td>
1466 <td><input type='text' name='MSG_TEXT_2' value=' $filtersettings {'MSG_TEXT_2'}' size='40' /></td>
1469 <td class='base'> $Lang ::tr{'urlfilter show dnserror'}:</td>
1470 <td><input type='checkbox' name='ENABLE_DNSERROR' $checked {'ENABLE_DNSERROR'}{'on'} /></td>
1471 <td class='base'> $Lang ::tr{'urlfilter msg text 3'}: <img src='/blob.gif' alt='*' /></td>
1472 <td><input type='text' name='MSG_TEXT_3' value=' $filtersettings {'MSG_TEXT_3'}' size='40' /></td>
1475 <td class='base'> $Lang ::tr{'urlfilter enable jpeg'}:</td>
1476 <td><input type='checkbox' name='ENABLE_JPEG' $checked {'ENABLE_JPEG'}{'on'} /></td>
1481 <table width='100%'>
1483 <td class='base'><b> $Lang ::tr{'urlfilter background image'}</b></td>
1486 <td><br> $Lang ::tr{'urlfilter background text'}:</td>
1489 <td><input type='file' name='BACKGROUND' size='40' /> <input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter upload background'}' /></td>
1493 <table width='100%'>
1495 <td colspan='4'><b> $Lang ::tr{'urlfilter advanced settings'}</b></td>
1498 <td width='25%' class='base'> $Lang ::tr{'urlfilter enable expression lists'}:</td>
1499 <td width='12%'><input type='checkbox' name='ENABLE_EXPR_LISTS' $checked {'ENABLE_EXPR_LISTS'}{'on'} /></td>
1500 <td width='25%' class='base'> $Lang ::tr{'urlfilter enable log'}:</td>
1501 <td><input type='checkbox' name='ENABLE_LOG' $checked {'ENABLE_LOG'}{'on'} /></td>
1504 <td class='base'> $Lang ::tr{'urlfilter safesearch'}:</td>
1505 <td><input type='checkbox' name='ENABLE_SAFESEARCH' $checked {'ENABLE_SAFESEARCH'}{'on'} /></td>
1506 <td class='base'> $Lang ::tr{'urlfilter username log'}:</td>
1507 <td><input type='checkbox' name='ENABLE_USERNAME_LOG' $checked {'ENABLE_USERNAME_LOG'}{'on'} /></td>
1510 <td class='base'> $Lang ::tr{'urlfilter empty ads'}:</td>
1511 <td><input type='checkbox' name='ENABLE_EMPTY_ADS' $checked {'ENABLE_EMPTY_ADS'}{'on'} /></td>
1512 <td class='base'> $Lang ::tr{'urlfilter category log'}:</td>
1513 <td><input type='checkbox' name='ENABLE_CATEGORY_LOG' $checked {'ENABLE_CATEGORY_LOG'}{'on'} /></td>
1516 <td class='base'> $Lang ::tr{'urlfilter block ip'}:</td>
1517 <td><input type='checkbox' name='BLOCK_IP_ADDR' $checked {'BLOCK_IP_ADDR'}{'on'} /></td>
1518 <td class='base'> $Lang ::tr{'urlfilter children'}:</td>
1519 <td><input type='text' name='CHILDREN' value=' $filtersettings {'CHILDREN'}' size='5' /></td>
1522 <td class='base'> $Lang ::tr{'urlfilter block all'}:</td>
1523 <td><input type='checkbox' name='BLOCK_ALL' $checked {'BLOCK_ALL'}{'on'} /></td>
1524 <td class='base'> $Lang ::tr{'urlfilter whitelist always allowed'}:</td>
1525 <td><input type='checkbox' name='ENABLE_GLOBAL_WHITELIST' $checked {'ENABLE_GLOBAL_WHITELIST'}{'on'} /></td>
1529 <table width='100%'>
1532 <img src='/blob.gif' align='top' alt='*' />
1533 <font class='base'> $Lang ::tr{'this field may be blank'}</font>
1535 <td align='right'>
1539 <table width='100%'>
1542 <td align='center'><input type='submit' name='ACTION' value=' $Lang ::tr{'save'}' /></td>
1543 <td align='center'><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter save and restart'}' /></td>
1550 & Header
:: closebox
();
1554 print "<form method='post' action=' $ENV {'SCRIPT_NAME'}' enctype='multipart/form-data'> \n " ;
1556 & Header
:: openbox
( '100%' , 'left' , " $Lang ::tr{'urlfilter maintenance'}:" );
1559 <table width='100%'>
1561 <td class='base'><b> $Lang ::tr{'urlfilter blacklist update'}</b></td>
1564 <td> $Lang ::tr{'urlfilter upload information'}<p> $Lang ::tr{'urlfilter upload text'}:</td>
1567 <td><input type='file' name='UPDATEFILE' size='40' /> <input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter upload blacklist'}' /></td>
1573 <table width='100%'>
1575 <td colspan='2' class='base'><b> $Lang ::tr{'urlfilter automatic blacklist update'}</b>
1578 if (- e
" $updflagfile " )
1580 $blacklistage = int (- M
" $updflagfile " );
1581 print " <b>[</b> <small><i> $Lang ::tr{'urlfilter blacklist age 1'} <b> $blacklistage </b> $Lang ::tr{'urlfilter blacklist age 2'}</i></small> <b>]</b>" ;
1584 $updatesettings { 'UPDATE_SCHEDULE' } = 'monthly' ;
1585 $updatesettings { 'CUSTOM_UPDATE_URL' } = '' ;
1587 if (- e
" $updconffile " ) { & General
:: readhash
( " $updconffile " , \
%updatesettings ); }
1589 $checked { 'ENABLE_AUTOUPDATE' }{ 'off' } = '' ;
1590 $checked { 'ENABLE_AUTOUPDATE' }{ 'on' } = '' ;
1591 $checked { 'ENABLE_AUTOUPDATE' }{ $updatesettings { 'ENABLE_AUTOUPDATE' }} = "checked='checked'" ;
1593 $selected { 'UPDATE_SCHEDULE' }{ $updatesettings { 'UPDATE_SCHEDULE' }} = "selected='selected'" ;
1595 $selected { 'UPDATE_SOURCE' }{ $updatesettings { 'UPDATE_SOURCE' }} = "selected='selected'" ;
1601 <td width='25%' class='base'> $Lang ::tr{'urlfilter enable automatic blacklist update'}:</td>
1602 <td width='75%' class='base'><input type='checkbox' name='ENABLE_AUTOUPDATE' $checked {'ENABLE_AUTOUPDATE'}{'on'} /></td>
1605 <td class='base'> $Lang ::tr{'urlfilter automatic update schedule'}:</td>
1607 <select name='UPDATE_SCHEDULE'>
1608 <option value='daily' $selected {'UPDATE_SCHEDULE'}{'daily'}> $Lang ::tr{'urlfilter daily'}</option>
1609 <option value='weekly' $selected {'UPDATE_SCHEDULE'}{'weekly'}> $Lang ::tr{'urlfilter weekly'}</option>
1610 <option value='monthly' $selected {'UPDATE_SCHEDULE'}{'monthly'}> $Lang ::tr{'urlfilter monthly'}</option>
1615 <td class='base'> $Lang ::tr{'urlfilter select source'}:</td>
1616 <td class='base' colspan='2'>
1617 <select name='UPDATE_SOURCE'>
1621 foreach ( @source_urllist ) {
1623 $source_name = substr ( $_ , 0 , rindex ( $_ , "," ));
1624 $source_url = substr ( $_ , index ( $_ , "," )+ 1 );
1625 print " \t <option value=' $source_url ' $selected {'UPDATE_SOURCE'}{ $source_url }> $source_name </option> \n " ;
1629 <option value='custom' $selected {'UPDATE_SOURCE'}{'custom'}> $Lang ::tr{'urlfilter custom url'}</option>
1634 <td> $Lang ::tr{'urlfilter custom url'}:</td>
1635 <td><input type='text' name='CUSTOM_UPDATE_URL' value=' $updatesettings {'CUSTOM_UPDATE_URL'}' size='72' /></td>
1638 <table width='100%'>
1640 <td width='25%'><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter save schedule'}'> <input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter update now'}'></td>
1646 <table width='100%'>
1648 <td class='base'><b> $Lang ::tr{'urlfilter blacklist editor'}</b></td>
1651 <td> $Lang ::tr{'urlfilter blacklist editor info'}</td>
1654 <td><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter blacklist editor'}' /></td>
1660 <table width='100%'>
1662 <td colspan='4' class='base'><b> $Lang ::tr{'urlfilter backup settings'}</b></td>
1665 <td width='25%' class='base'> $Lang ::tr{'urlfilter enable full backup'}:</td>
1666 <td width='12%' class='base'><input type='checkbox' name='ENABLE_FULLBACKUP' $checked {'ENABLE_FULLBACKUP'}{'on'} /></td>
1671 <td colspan='4' class='base'><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter backup'}' /></td>
1677 <table width='100%'>
1679 <td class='base'><b> $Lang ::tr{'urlfilter restore settings'}</b></td>
1682 <td> $Lang ::tr{'urlfilter restore text'}:</td>
1685 <td><input type='file' name='UPDATEFILE' size='40' /> <input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter restore'}' /></td>
1692 & Header
:: closebox
();
1696 #==========================================================
1698 # Section: Manage Repository
1700 #==========================================================
1702 print "<form method='post' action=' $ENV {'SCRIPT_NAME'}' enctype='multipart/form-data'> \n " ;
1704 & Header
:: openbox
( '100%' , 'left' , " $Lang ::tr{'urlfilter manage local file repository'}:" );
1706 <table width='100%'>
1708 <td> $Lang ::tr{'urlfilter repository information'}<br><br></td>
1711 <td> $Lang ::tr{'urlfilter upload file text'}:</td>
1714 <td><input type='file' name='UPLOADFILE' size='50' /> <input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter upload file'}' /></td>
1717 <td><br><b> $Lang ::tr{'urlfilter upload file information 1'}:</b> $Lang ::tr{'urlfilter upload file information 2'}</td>
1721 <table width='100%'>
1723 <td><input type='button' name='return2main' value=' $Lang ::tr{'urlfilter back to main page'}' onClick='self.location.href=" $ENV {'SCRIPT_NAME'}"'></td>
1730 & Header
:: closebox
();
1732 & Header
:: openbox
( '100%' , 'left' , " $Lang ::tr{'urlfilter current files'}: </b>[ $repository ]" );
1734 @repositorylist = < $repository /*>;
1736 undef @repositoryfiles ;
1737 foreach ( @repositorylist )
1739 if (!- d
) { push ( @repositoryfiles , substr ( $_ , rindex ( $_ , "/" )+ 1 )); }
1742 if ( @repositoryfiles )
1745 <table width='100%'>
1747 <td align='center'><b> $Lang ::tr{'urlfilter filename'}</b></td>
1748 <td width='15%' align='center'><b> $Lang ::tr{'urlfilter filesize'}</b></td>
1749 <td width='10%'></td>
1754 foreach $line ( @repositoryfiles )
1758 print "<tr bgcolor=' $Header ::table1colour'> \n " ; }
1760 print "<tr bgcolor=' $Header ::table2colour'> \n " ; }
1761 $filesize = (- s
" $repository / $line " );
1762 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/ ;
1765 <td> $line </td>
1766 <td align='right'> $filesize </td>
1769 <form method='post' name='frma $id ' action=' $ENV {'SCRIPT_NAME'}'>
1770 <input type='image' name=' $Lang ::tr{'remove'}' src='/images/delete.gif' title=' $Lang ::tr{'remove'}' alt=' $Lang ::tr{'remove'}' />
1771 <input type='hidden' name='ID' value=' $line ' />
1772 <input type='hidden' name='ACTION' value=' $Lang ::tr{'urlfilter remove file'}' />
1789 <td class='boldbase'> <b> $Lang ::tr{'legend'}:</b></td>
1790 <td> <img src='/images/delete.gif' alt=' $Lang ::tr{'remove'}' /></td>
1791 <td class='base'> $Lang ::tr{'remove'}</td>
1798 print "<i> $Lang ::tr{'urlfilter empty repository'}</i> \n " ;
1801 & Header
:: closebox
();
1805 } elsif ( $tcsettings { 'TCMODE' }) {
1807 #==========================================================
1809 # Section: Set Time Constraints
1811 #==========================================================
1813 print "<form method='post' action=' $ENV {'SCRIPT_NAME'}'> \n " ;
1815 $buttontext = $Lang :: tr
{ 'urlfilter add rule' };
1816 if ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' }) {
1817 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'urlfilter edit time constraint rule' }. ':' );
1818 $buttontext = $Lang :: tr
{ 'urlfilter update rule' };
1820 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'urlfilter add new time constraint rule' }. ':' );
1824 <table width='100%'>
1826 <td width='2%'> $Lang ::tr{'urlfilter constraint definition'}</td>
1827 <td width='1%'> </td>
1828 <td width='2%' align='center'> $Lang ::tr{'urlfilter monday'}</td>
1829 <td width='2%' align='center'> $Lang ::tr{'urlfilter tuesday'}</td>
1830 <td width='2%' align='center'> $Lang ::tr{'urlfilter wednesday'}</td>
1831 <td width='2%' align='center'> $Lang ::tr{'urlfilter thursday'}</td>
1832 <td width='2%' align='center'> $Lang ::tr{'urlfilter friday'}</td>
1833 <td width='2%' align='center'> $Lang ::tr{'urlfilter saturday'}</td>
1834 <td width='2%' align='center'> $Lang ::tr{'urlfilter sunday'}</td>
1835 <td width='1%'> </td>
1836 <td width='7%' colspan=3> $Lang ::tr{'urlfilter from'}</td>
1837 <td width='1%'> </td>
1838 <td width='7%' colspan=3> $Lang ::tr{'urlfilter to'}</td>
1843 <select name='DEFINITION'>
1844 <option value='within' $selected {'DEFINITION'}{'within'}> $Lang ::tr{'urlfilter constraint within'}</option>
1845 <option value='outside' $selected {'DEFINITION'}{'outside'}> $Lang ::tr{'urlfilter constraint outside'}</option>
1849 <td class='base'><input type='checkbox' name='MON' $checked {'MON'}{'on'} /></td>
1850 <td class='base'><input type='checkbox' name='TUE' $checked {'TUE'}{'on'} /></td>
1851 <td class='base'><input type='checkbox' name='WED' $checked {'WED'}{'on'} /></td>
1852 <td class='base'><input type='checkbox' name='THU' $checked {'THU'}{'on'} /></td>
1853 <td class='base'><input type='checkbox' name='FRI' $checked {'FRI'}{'on'} /></td>
1854 <td class='base'><input type='checkbox' name='SAT' $checked {'SAT'}{'on'} /></td>
1855 <td class='base'><input type='checkbox' name='SUN' $checked {'SUN'}{'on'} /></td>
1858 <select name='FROM_HOUR'>
1861 for ( $i = 0 ; $i <= 24 ; $i ++) {
1862 $_ = sprintf ( " %02s " , $i );
1863 print "<option $selected {'FROM_HOUR'}{ $_ }> $_ </option> \n " ;
1870 <select name='FROM_MINUTE'>
1873 for ( $i = 0 ; $i <= 45 ; $i += 15 ) {
1874 $_ = sprintf ( " %02s " , $i );
1875 print "<option $selected {'FROM_MINUTE'}{ $_ }> $_ </option> \n " ;
1882 <select name='TO_HOUR'>
1885 for ( $i = 0 ; $i <= 24 ; $i ++) {
1886 $_ = sprintf ( " %02s " , $i );
1887 print "<option $selected {'TO_HOUR'}{ $_ }> $_ </option> \n " ;
1894 <select name='TO_MINUTE'>
1897 for ( $i = 0 ; $i <= 45 ; $i += 15 ) {
1898 $_ = sprintf ( " %02s " , $i );
1899 print "<option $selected {'TO_MINUTE'}{ $_ }> $_ </option> \n " ;
1910 <table width='100%'>
1912 <td width='5%'> $Lang ::tr{'urlfilter source'}</td>
1913 <td width='1%'> </td>
1914 <td width='5%'> $Lang ::tr{'urlfilter dst'} <img src='/blob.gif' alt='*'><img src='/blob.gif' alt='*'></td>
1915 <td width='1%'> </td>
1916 <td width='5%'> $Lang ::tr{'urlfilter access'}</td>
1920 <td rowspan='2'><textarea name='SRC' cols='28' rows='5' wrap='off'>
1924 # transform from pre1.8 client definitions
1925 $tcsettings { 'SRC' } =~ s/^\s+//g ;
1926 $tcsettings { 'SRC' } =~ s/\s+$//g ;
1927 $tcsettings { 'SRC' } =~ s/\s+-\s+/-/g ;
1928 $tcsettings { 'SRC' } =~ s/\s+/ /g ;
1930 @clients = split ( / / , $tcsettings { 'SRC' });
1931 undef $tcsettings { 'SRC' };
1932 foreach ( @clients ) { $tcsettings { 'SRC' } .= " $_ \n " ; }
1934 print $tcsettings { 'SRC' };
1940 <td class='base' rowspan='2' valign='top'>
1941 <select name='DST' size='6' multiple>
1942 <option value='any' $selected {'DST'}{'any'} = "selected='selected'"> $Lang ::tr{'urlfilter category all'}</option>
1943 <option value='in-addr' $selected {'DST'}{'in-addr'} = "selected='selected'">in-addr</option>
1947 & readblockcategories
;
1948 foreach ( @categories )
1950 print "<option value=' $_ ' $selected {'DST'}{ $_ }> $_ </option> \n " ;
1954 <option value='files' $selected {'DST'}{'files'} = "selected='selected'">files</option>
1955 <option value='custom-blocked' $selected {'DST'}{'custom-blocked'} = "selected='selected'">custom-blocked</option>
1956 <option value='custom-expressions' $selected {'DST'}{'custom-expressions'} = "selected='selected'">custom-expressions</option>
1960 <td class='base' valign='top'>
1961 <select name='ACCESS'>
1962 <option value='block' $selected {'ACCESS'}{'block'}> $Lang ::tr{'urlfilter mode block'}</option>
1963 <option value='allow' $selected {'ACCESS'}{'allow'}> $Lang ::tr{'urlfilter mode allow'}</option>
1975 <td> $Lang ::tr{'remark'} <img src='/blob.gif' alt='*'></td>
1983 <td><input type='text' name='COMMENT' value=' $tcsettings {'COMMENT'}' size='32' /></td>
1992 <table width='100%'>
1994 <td class='base'> $Lang ::tr{'urlfilter enabled'}<input type='checkbox' name='ENABLERULE' $checked{'ENABLERULE'}{'on'} /></td>
2002 <td><input type='hidden' name='ACTION' value=' $Lang ::tr{'add'}' /></td>
2003 <td><input type='hidden' name='MODE' value='TIMECONSTRAINT' /></td>
2004 <td><input type='submit' name='SUBMIT' value=' $buttontext ' /></td>
2005 <td><input type='reset' name='ACTION' value=' $Lang ::tr{'urlfilter reset'}' /></td>
2007 <td><input type='button' name='return2main' value=' $Lang ::tr{'urlfilter back to main page'}' onClick='self.location.href=" $ENV {'SCRIPT_NAME'}"'></td>
2011 <table width='100%'>
2013 <td width='1%' align='right'> <img src='/blob.gif' align='top' alt='*' /> </td>
2014 <td><font class='base'> $Lang ::tr{'this field may be blank'}</font></td>
2017 <td width='1%' align='right'><img src='/blob.gif' align='top' alt='*' /><img src='/blob.gif' align='top' alt='*' /> </td>
2018 <td><font class='base'> $Lang ::tr{'urlfilter select multi'}</font></td>
2024 if ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' }) {
2025 print "<input type='hidden' name='EDITING' value=' $tcsettings {'ID'}' /> \n " ;
2027 print "<input type='hidden' name='EDITING' value='no' /> \n " ;
2030 & Header
:: closebox
();
2033 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'current rules' });
2035 <table width='100%'>
2037 <td width='5%' class='boldbase' align='center'><b> $Lang ::tr{'urlfilter constraint definition'}</b></td>
2038 <td width='10%' class='boldbase' align='center'><b> $Lang ::tr{'urlfilter time space'}</b></td>
2039 <td width='15%' class='boldbase' align='center'><b> $Lang ::tr{'urlfilter src'}</b></td>
2040 <td width='5%' class='boldbase' align='center'><b> $Lang ::tr{'urlfilter dst'}</b></td>
2041 <td width='10%' class='boldbase' colspan='5' align='center'> </td>
2046 if ( $tcsettings { 'ACTION' } ne '' or $changed ne 'no' )
2048 open ( FILE
, $tcfile );
2054 foreach $line ( @tclist )
2058 @temp = split ( /\,/ , $line );
2059 if ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' } && $tcsettings { 'ID' } eq $id ) {
2060 print "<tr bgcolor=' $Header ::colouryellow'> \n " ; }
2062 print "<tr bgcolor=' $Header ::table1colour'> \n " ; }
2064 print "<tr bgcolor=' $Header ::table2colour'> \n " ; }
2065 if ( $temp [ 0 ] eq 'within' ) { $temp [ 0 ]= $Lang :: tr
{ 'urlfilter constraint within' }; } else { $temp [ 0 ]= $Lang :: tr
{ 'urlfilter constraint outside' }; }
2066 if ( $temp [ 13 ] eq 'any' ) { $temp [ 13 ]= $Lang :: tr
{ 'urlfilter category all' }; }
2067 if ( $temp [ 15 ] eq 'on' ) { $gif = 'on.gif' ; $toggle = 'off' ; $gdesc = $Lang :: tr
{ 'click to disable' };}
2068 else { $gif = 'off.gif' ; $toggle = 'on' ; $gdesc = $Lang :: tr
{ 'click to enable' }; }
2069 if ( $temp [ 14 ] eq 'block' ) { $led = 'led-red.gif' ; $ldesc = $Lang :: tr
{ 'urlfilter block access' };}
2070 else { $led = 'led-green.gif' ; $ldesc = $Lang :: tr
{ 'urlfilter allow access' }; }
2073 if ( $temp [ 1 ] eq 'on' ) { $time .= $Lang :: tr
{ 'urlfilter mon' }; } else { $time .= '=' ; }
2074 if ( $temp [ 2 ] eq 'on' ) { $time .= $Lang :: tr
{ 'urlfilter tue' }; } else { $time .= '=' ; }
2075 if ( $temp [ 3 ] eq 'on' ) { $time .= $Lang :: tr
{ 'urlfilter wed' }; } else { $time .= '=' ; }
2076 if ( $temp [ 4 ] eq 'on' ) { $time .= $Lang :: tr
{ 'urlfilter thu' }; } else { $time .= '=' ; }
2077 if ( $temp [ 5 ] eq 'on' ) { $time .= $Lang :: tr
{ 'urlfilter fri' }; } else { $time .= '=' ; }
2078 if ( $temp [ 6 ] eq 'on' ) { $time .= $Lang :: tr
{ 'urlfilter sat' }; } else { $time .= '=' ; }
2079 if ( $temp [ 7 ] eq 'on' ) { $time .= $Lang :: tr
{ 'urlfilter sun' }; } else { $time .= '=' ; }
2080 $time = $time . ' ' . $temp [ 8 ]. ':' . $temp [ 9 ]. ' to ' . $temp [ 10 ]. ':' . $temp [ 11 ];
2083 <td align='center'> $temp [0]</td>
2084 <td align='center' nowrap> $time </td>
2085 <td align='center'> $temp [12]</td>
2086 <td align='center'> $temp [13]</td>
2087 <td align='center'><image src='/images/urlfilter/ $led ' alt=' $ldesc '></td>
2090 <form method='post' name='frma $id ' action=' $ENV {'SCRIPT_NAME'}'>
2091 <input type='image' name=' $Lang ::tr{'toggle enable disable'}' src='/images/ $gif ' title=' $gdesc ' alt=' $gdesc ' />
2092 <input type='hidden' name='MODE' value='TIMECONSTRAINT' />
2093 <input type='hidden' name='ID' value=' $id ' />
2094 <input type='hidden' name='ACTIVE' value=' $toggle ' />
2095 <input type='hidden' name='ACTION' value=' $Lang ::tr{'toggle enable disable'}' />
2100 <form method='post' name='frmb $id ' action=' $ENV {'SCRIPT_NAME'}'>
2101 <input type='image' name=' $Lang ::tr{'edit'}' src='/images/edit.gif' title=' $Lang ::tr{'edit'}' alt=' $Lang ::tr{'edit'}' />
2102 <input type='hidden' name='MODE' value='TIMECONSTRAINT' />
2103 <input type='hidden' name='ID' value=' $id ' />
2104 <input type='hidden' name='ACTION' value=' $Lang ::tr{'edit'}' />
2109 <form method='post' name='frmc $id ' action=' $ENV {'SCRIPT_NAME'}'>
2110 <input type='image' name=' $Lang ::tr{'urlfilter copy rule'}' src='/images/urlfilter/copy.gif' title=' $Lang ::tr{'urlfilter copy rule'}' alt=' $Lang ::tr{'urlfilter copy rule'}' />
2111 <input type='hidden' name='MODE' value='TIMECONSTRAINT' />
2112 <input type='hidden' name='ID' value=' $id ' />
2113 <input type='hidden' name='ACTION' value=' $Lang ::tr{'urlfilter copy rule'}' />
2118 <form method='post' name='frmd $id ' action=' $ENV {'SCRIPT_NAME'}'>
2119 <input type='image' name=' $Lang ::tr{'remove'}' src='/images/delete.gif' title=' $Lang ::tr{'remove'}' alt=' $Lang ::tr{'remove'}' />
2120 <input type='hidden' name='MODE' value='TIMECONSTRAINT' />
2121 <input type='hidden' name='ID' value=' $id ' />
2122 <input type='hidden' name='ACTION' value=' $Lang ::tr{'remove'}' />
2129 if ( $tcsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' } && $tcsettings { 'ID' } eq $id ) {
2130 print "<tr bgcolor=' $Header ::colouryellow'> \n " ; }
2132 print "<tr bgcolor=' $Header ::table1colour'> \n " ; }
2134 print "<tr bgcolor=' $Header ::table2colour'> \n " ; }
2136 <td align='center' colspan='4'> $temp [16]
2138 <td align='center' colspan='5'>
2147 # If the time constraint file contains entries, print entries and action icons
2148 if (! - z
" $tcfile " ) {
2153 <td class='boldbase'> <b> $Lang ::tr{'legend'}:</b></td>
2154 <td> <img src='/images/urlfilter/led-green.gif' alt=' $Lang ::tr{'urlfilter allow access'}' /></td>
2155 <td class='base'> $Lang ::tr{'urlfilter allow'}</td>
2156 <td> <img src='/images/urlfilter/led-red.gif' alt=' $Lang ::tr{'urlfilter block access'}' /></td>
2157 <td class='base'> $Lang ::tr{'urlfilter block'}</td>
2158 <td> <img src='/images/on.gif' alt=' $Lang ::tr{'click to disable'}' /></td>
2159 <td class='base'> $Lang ::tr{'click to disable'}</td>
2160 <td> <img src='/images/off.gif' alt=' $Lang ::tr{'click to enable'}' /></td>
2161 <td class='base'> $Lang ::tr{'click to enable'}</td>
2162 <td> <img src='/images/edit.gif' alt=' $Lang ::tr{'edit'}' /></td>
2163 <td class='base'> $Lang ::tr{'edit'}</td>
2164 <td> <img src='/images/urlfilter/copy.gif' alt=' $Lang ::tr{'urlfilter copy rule'}' /></td>
2165 <td class='base'> $Lang ::tr{'urlfilter copy rule'}</td>
2166 <td> <img src='/images/delete.gif' alt=' $Lang ::tr{'remove'}' /></td>
2167 <td class='base'> $Lang ::tr{'remove'}</td>
2174 & Header
:: closebox
();
2176 } elsif ( $uqsettings { 'UQMODE' }) {
2178 #==========================================================
2180 # Section: Set User Quota
2182 #==========================================================
2184 print "<form method='post' action=' $ENV {'SCRIPT_NAME'}'> \n " ;
2186 $buttontext = $Lang :: tr
{ 'urlfilter add rule' };
2187 if ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' }) {
2188 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'urlfilter edit user quota rule' }. ':' );
2189 $buttontext = $Lang :: tr
{ 'urlfilter update rule' };
2191 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'urlfilter add new user quota rule' }. ':' );
2195 <table width='100%'>
2197 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
2200 <td class='base'> $Lang ::tr{'urlfilter user time quota'}:</td>
2201 <td><input type='text' name='TIME_QUOTA' value=' $uqsettings {'TIME_QUOTA'}' size='5' /></td>
2202 <td colspan='2' rowspan= '5' valign='top' class='base'>
2203 <table cellpadding='0' cellspacing='0'>
2205 <!-- intentionally left empty -->
2208 <td> $Lang ::tr{'urlfilter assigned quota users'}:</td>
2211 <!-- intentionally left empty -->
2214 <!-- intentionally left empty -->
2217 <td><textarea name='QUOTA_USERS' cols='32' rows='6' wrap='off'>
2221 $uqsettings { 'QUOTA_USERS' } =~ s/\|/\n/g ;
2222 print $uqsettings { 'QUOTA_USERS' };
2231 <td class='base'> $Lang ::tr{'urlfilter activity detection'}:</td>
2232 <td class='base'><select name='SPORADIC'>
2233 <option value='0' $selected {'SPORADIC'}{'0'}> $Lang ::tr{'urlfilter disabled'}</option>
2234 <option value='300' $selected {'SPORADIC'}{'300'}>5 $Lang ::tr{'urlfilter minutes'}</option>
2235 <option value='900' $selected {'SPORADIC'}{'900'}>15 $Lang ::tr{'urlfilter minutes'}</option>
2239 <td class='base'> $Lang ::tr{'urlfilter renewal period'}:</td>
2240 <td class='base'><select name='RENEWAL'>
2241 <option value='hourly' $selected {'RENEWAL'}{'hourly'}> $Lang ::tr{'urlfilter hourly'}</option>
2242 <option value='daily' $selected {'RENEWAL'}{'daily'}> $Lang ::tr{'urlfilter daily'}</option>
2243 <option value='weekly' $selected {'RENEWAL'}{'weekly'}> $Lang ::tr{'urlfilter weekly'}</option>
2247 <td colspan='2'> </td>
2250 <td class='base'> $Lang ::tr{'urlfilter enabled'}</td>
2251 <td class='base'><input type='checkbox' name='ENABLEQUOTA' $checked {'ENABLEQUOTA'}{'on'} /></td>
2259 <td><input type='hidden' name='ACTION' value=' $Lang ::tr{'add'}' /></td>
2260 <td><input type='hidden' name='MODE' value='USERQUOTA' /></td>
2261 <td><input type='submit' name='SUBMIT' value=' $buttontext ' /></td>
2262 <td><input type='reset' name='ACTION' value=' $Lang ::tr{'urlfilter reset'}' /></td>
2264 <td><input type='button' name='return2main' value=' $Lang ::tr{'urlfilter back to main page'}' onClick='self.location.href=" $ENV {'SCRIPT_NAME'}"'></td>
2272 if ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' }) {
2273 print "<input type='hidden' name='EDITING' value=' $uqsettings {'ID'}' /> \n " ;
2275 print "<input type='hidden' name='EDITING' value='no' /> \n " ;
2278 & Header
:: closebox
();
2281 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'current rules' });
2283 <table width='100%'>
2285 <td width='15%' class='boldbase' align='center'><b><nobr> $Lang ::tr{'urlfilter time quota'}</nobr></b></td>
2286 <td width='15%' class='boldbase' align='center'><b><nobr> $Lang ::tr{'urlfilter activity detection'}</nobr></b></td>
2287 <td width='10%' class='boldbase' align='center'><b> $Lang ::tr{'urlfilter renewal'}</b></td>
2288 <td class='boldbase' align='center'><b> $Lang ::tr{'urlfilter assigned users'}</b></td>
2289 <td width='20%' class='boldbase' colspan='4' align='center'> </td>
2294 if ( $uqsettings { 'ACTION' } ne '' or $changed ne 'no' )
2296 open ( FILE
, $uqfile );
2302 foreach $line ( @uqlist )
2306 @temp = split ( /\,/ , $line );
2307 if ( $uqsettings { 'ACTION' } eq $Lang :: tr
{ 'edit' } && $uqsettings { 'ID' } eq $id ) {
2308 print "<tr bgcolor=' $Header ::colouryellow'> \n " ; }
2310 print "<tr bgcolor=' $Header ::table1colour'> \n " ; }
2312 print "<tr bgcolor=' $Header ::table2colour'> \n " ; }
2313 if ( $temp [ 4 ] eq 'on' ) { $gif = 'on.gif' ; $toggle = 'off' ; $gdesc = $Lang :: tr
{ 'click to disable' };}
2314 else { $gif = 'off.gif' ; $toggle = 'on' ; $gdesc = $Lang :: tr
{ 'click to enable' }; }
2316 $temp [ 5 ] = $temp [ 1 ];
2317 if ( $temp [ 1 ] eq '0' ) { $temp [ 5 ] = $Lang :: tr
{ 'urlfilter disabled' } } else { $temp [ 5 ] = ( $temp [ 5 ]/ 60 ). ' ' . $Lang :: tr
{ 'urlfilter minutes' } }
2318 $_ = $temp [ 3 ]; s/\|/, /g ; $temp [ 6 ] = $_ ;
2321 <td align='center'> $temp [0] $Lang ::tr{'urlfilter minutes'}</td>
2322 <td align='center'> $temp [5]</td>
2323 <td align='center'> $Lang ::tr{'urlfilter '. $temp [2]}</td>
2324 <td align='center'> $temp [6]</td>
2327 <form method='post' name='frma $id ' action=' $ENV {'SCRIPT_NAME'}'>
2328 <input type='image' name=' $Lang ::tr{'toggle enable disable'}' src='/images/ $gif ' title=' $gdesc ' alt=' $gdesc ' />
2329 <input type='hidden' name='MODE' value='USERQUOTA' />
2330 <input type='hidden' name='ID' value=' $id ' />
2331 <input type='hidden' name='ACTIVE' value=' $toggle ' />
2332 <input type='hidden' name='ACTION' value=' $Lang ::tr{'toggle enable disable'}' />
2337 <form method='post' name='frmb $id ' action=' $ENV {'SCRIPT_NAME'}'>
2338 <input type='image' name=' $Lang ::tr{'edit'}' src='/images/edit.gif' title=' $Lang ::tr{'edit'}' alt=' $Lang ::tr{'edit'}' />
2339 <input type='hidden' name='MODE' value='USERQUOTA' />
2340 <input type='hidden' name='ID' value=' $id ' />
2341 <input type='hidden' name='ACTION' value=' $Lang ::tr{'edit'}' />
2346 <form method='post' name='frmc $id ' action=' $ENV {'SCRIPT_NAME'}'>
2347 <input type='image' name=' $Lang ::tr{'remove'}' src='/images/delete.gif' title=' $Lang ::tr{'remove'}' alt=' $Lang ::tr{'remove'}' />
2348 <input type='hidden' name='MODE' value='USERQUOTA' />
2349 <input type='hidden' name='ID' value=' $id ' />
2350 <input type='hidden' name='ACTION' value=' $Lang ::tr{'remove'}' />
2361 # If the user quota file contains entries, print entries and action icons
2362 if (! - z
" $uqfile " ) {
2367 <td class='boldbase'> <b> $Lang ::tr{'legend'}:</b></td>
2368 <td> <img src='/images/on.gif' alt=' $Lang ::tr{'click to disable'}' /></td>
2369 <td class='base'> $Lang ::tr{'click to disable'}</td>
2370 <td> <img src='/images/off.gif' alt=' $Lang ::tr{'click to enable'}' /></td>
2371 <td class='base'> $Lang ::tr{'click to enable'}</td>
2372 <td> <img src='/images/edit.gif' alt=' $Lang ::tr{'edit'}' /></td>
2373 <td class='base'> $Lang ::tr{'edit'}</td>
2374 <td> <img src='/images/delete.gif' alt=' $Lang ::tr{'remove'}' /></td>
2375 <td class='base'> $Lang ::tr{'remove'}</td>
2382 & Header
:: closebox
();
2386 #==========================================================
2388 # Section: Blacklist editor
2390 #==========================================================
2392 print "<form method='post' action=' $ENV {'SCRIPT_NAME'}' enctype='multipart/form-data'> \n " ;
2394 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'urlfilter urlfilter blacklist editor' }. ':' );
2398 <table width='100%'>
2400 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
2403 <td class='base'><b> $Lang ::tr{'urlfilter blacklist name'}</b></td>
2406 <td class='base'> $Lang ::tr{'urlfilter blacklist category name'}:</td>
2407 <td><input type='text' name='BE_NAME' value=' $besettings {'BE_NAME'}' size='12' /></td>
2411 <table width='100%'>
2413 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='20%'></td>
2416 <td class='base' colspan='4'><b> $Lang ::tr{'urlfilter edit domains urls expressions'}</b></td>
2419 <td colspan='2'> $Lang ::tr{'urlfilter domains'}</td>
2420 <td colspan='2'> $Lang ::tr{'urlfilter urls'}</td>
2423 <td colspan='2'><textarea name='BE_DOMAINS' cols='38' rows='10' wrap='off'>
2427 print $besettings { 'BE_DOMAINS' };
2431 <td colspan='2'><textarea name='BE_URLS' cols='38' rows='10' wrap='off'>
2435 print $besettings { 'BE_URLS' };
2441 <td colspan='4'> $Lang ::tr{'urlfilter expressions'}</td>
2444 <td colspan='4'><textarea name='BE_EXPRESSIONS' cols='80' rows='3' wrap='off'>
2448 print $besettings { 'BE_EXPRESSIONS' };
2455 <table width='100%'>
2457 <td class='base' colspan='4'><b> $Lang ::tr{'urlfilter load blacklist'}</b></td>
2460 <td width='25%' class='base'> $Lang ::tr{'urlfilter select blacklist'}:</td>
2461 <td width='20%' class='base'>
2462 <select name='BE_BLACKLIST'>
2466 & readblockcategories
;
2467 foreach ( @categories )
2469 print "<option value=' $_ ' $selected {'BE_BLACKLIST'}{ $_ }> $_ </option> \n " ;
2478 <td colpsan='4'><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter load blacklist'}' /></td>
2483 <table width='100%'>
2485 <td class='base' colspan='4'><b> $Lang ::tr{'urlfilter import blacklist'}</b></td>
2488 <td colspan='4'> $Lang ::tr{'urlfilter import text'}:</td>
2491 <td nowrap><input type='file' name='IMPORTFILE' size='40' /> <input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter import blacklist'}' /></td>
2492 <td><input type='hidden' name='MODE' value='BLACKLIST_EDITOR' /></td>
2496 <table width='100%'>
2498 <td class='base' colspan='4'><b> $Lang ::tr{'urlfilter export blacklist'}</b></td>
2501 <td><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter export blacklist'}' /></td>
2505 <table width='100%'>
2507 <td class='base' colspan='4'><b> $Lang ::tr{'urlfilter install blacklist'}</b></td>
2510 <td width='25%' class='base'> $Lang ::tr{'urlfilter dont restart urlfilter'}:</td>
2511 <td width='20%' class='base'><input type='checkbox' name='NORESTART' $checked {'NORESTART'}{'on'} /></td>
2516 <td><input type='submit' name='ACTION' value=' $Lang ::tr{'urlfilter install blacklist'}' /></td>
2519 <td class='base' colspan='4'><br> $Lang ::tr{'urlfilter install information'}</td>
2525 <td><input type='reset' name='ACTION' value=' $Lang ::tr{'urlfilter reset'}' /></td>
2527 <td><input type='button' name='return2main' value=' $Lang ::tr{'urlfilter back to main page'}' onClick='self.location.href=" $ENV {'SCRIPT_NAME'}"'></td>
2534 & Header
:: closebox
();
2539 & Header
:: closebigbox
();
2541 & Header
:: closepage
();
2543 # -------------------------------------------------------------------
2547 # transform to pre1.8 client definitions
2548 @clients = split ( /\n/ , $filtersettings { 'UNFILTERED_CLIENTS' });
2549 undef $filtersettings { 'UNFILTERED_CLIENTS' };
2552 s/^\s+//g ; s/\s+$//g ; s/\s+-\s+/-/g ; s/\s+/ /g ; s/\n//g ;
2553 $filtersettings { 'UNFILTERED_CLIENTS' } .= " $_ " ;
2555 $filtersettings { 'UNFILTERED_CLIENTS' } =~ s/\s+$// ;
2557 # transform to pre1.8 client definitions
2558 @clients = split ( /\n/ , $filtersettings { 'BANNED_CLIENTS' });
2559 undef $filtersettings { 'BANNED_CLIENTS' };
2562 s/^\s+//g ; s/\s+$//g ; s/\s+-\s+/-/g ; s/\s+/ /g ; s/\n//g ;
2563 $filtersettings { 'BANNED_CLIENTS' } .= " $_ " ;
2565 $filtersettings { 'BANNED_CLIENTS' } =~ s/\s+$// ;
2569 delete $filtersettings { 'CUSTOM_BLACK_DOMAINS' };
2570 delete $filtersettings { 'CUSTOM_BLACK_URLS' };
2571 delete $filtersettings { 'CUSTOM_WHITE_DOMAINS' };
2572 delete $filtersettings { 'CUSTOM_WHITE_URLS' };
2573 delete $filtersettings { 'CUSTOM_EXPRESSIONS' };
2574 delete $filtersettings { 'BACKGROUND' };
2575 delete $filtersettings { 'UPDATEFILE' };
2577 & General
:: writehash
( "${General::swroot}/urlfilter/settings" , \
%filtersettings );
2580 # -------------------------------------------------------------------
2582 sub readblockcategories
2586 & getblockcategory
( $dbdir );
2588 foreach ( @categories ) { $_ = substr ( $_ , length ( $dbdir )+ 1 ); }
2590 @filtergroups = @categories ;
2592 foreach ( @filtergroups ) {
2599 # -------------------------------------------------------------------
2601 sub getblockcategory
2603 foreach $category (< $_ [ 0 ]/*>)
2607 if ((- e
" $category /domains" ) || (- e
" $category /urls" ))
2609 unless ( $category =~ /\bcustom\b/ ) { push ( @categories , $category ); }
2611 & getblockcategory
( $category );
2616 # -------------------------------------------------------------------
2620 if (- e
" $dbdir /custom/blocked/domains" ) {
2621 open ( FILE
, " $dbdir /custom/blocked/domains" );
2622 delete $filtersettings { 'CUSTOM_BLACK_DOMAINS' };
2623 while (< FILE
>) { $filtersettings { 'CUSTOM_BLACK_DOMAINS' } .= $_ };
2627 if (- e
" $dbdir /custom/blocked/urls" ) {
2628 open ( FILE
, " $dbdir /custom/blocked/urls" );
2629 delete $filtersettings { 'CUSTOM_BLACK_URLS' };
2630 while (< FILE
>) { $filtersettings { 'CUSTOM_BLACK_URLS' } .= $_ };
2634 if (- e
" $dbdir /custom/blocked/expressions" ) {
2635 open ( FILE
, " $dbdir /custom/blocked/expressions" );
2636 delete $filtersettings { 'CUSTOM_EXPRESSIONS' };
2637 while (< FILE
>) { $filtersettings { 'CUSTOM_EXPRESSIONS' } .= $_ };
2641 if (- e
" $dbdir /custom/allowed/domains" ) {
2642 open ( FILE
, " $dbdir /custom/allowed/domains" );
2643 delete $filtersettings { 'CUSTOM_WHITE_DOMAINS' };
2644 while (< FILE
>) { $filtersettings { 'CUSTOM_WHITE_DOMAINS' } .= $_ };
2647 if (- e
" $dbdir /custom/allowed/urls" ) {
2648 open ( FILE
, " $dbdir /custom/allowed/urls" );
2649 delete $filtersettings { 'CUSTOM_WHITE_URLS' };
2650 while (< FILE
>) { $filtersettings { 'CUSTOM_WHITE_URLS' } .= $_ };
2655 # -------------------------------------------------------------------
2657 sub aggregatedconstraints
2677 @tmp1 = split ( /\,/ , $x );
2681 @tmp2 = split ( /\,/ );
2682 if (( $tmp1 [ 15 ] eq 'on' ) && ( $tmp2 [ 15 ] eq 'on' ))
2684 if (( $tmp1 [ 0 ] eq $tmp2 [ 0 ]) && ( $tmp1 [ 12 ] eq $tmp2 [ 12 ]) && ( $tmp1 [ 13 ] eq $tmp2 [ 13 ]) && ( $tmp1 [ 14 ] eq $tmp2 [ 14 ]))
2687 $tmp2 [ 16 ] .= " weekly " ;
2688 if ( $tmp1 [ 1 ] eq 'on' ) { $tmp2 [ 16 ] .= "m" ; }
2689 if ( $tmp1 [ 2 ] eq 'on' ) { $tmp2 [ 16 ] .= "t" ; }
2690 if ( $tmp1 [ 3 ] eq 'on' ) { $tmp2 [ 16 ] .= "w" ; }
2691 if ( $tmp1 [ 4 ] eq 'on' ) { $tmp2 [ 16 ] .= "h" ; }
2692 if ( $tmp1 [ 5 ] eq 'on' ) { $tmp2 [ 16 ] .= "f" ; }
2693 if ( $tmp1 [ 6 ] eq 'on' ) { $tmp2 [ 16 ] .= "a" ; }
2694 if ( $tmp1 [ 7 ] eq 'on' ) { $tmp2 [ 16 ] .= "s" ; }
2695 $tmp2 [ 16 ] .= " $tmp1 [8]: $tmp1 [9]- $tmp1 [10]: $tmp1 [11] \n " ;
2696 $_ = join ( "," , @tmp2 );
2703 $tmp1 [ 16 ] .= " weekly " ;
2704 if ( $tmp1 [ 1 ] eq 'on' ) { $tmp1 [ 16 ] .= "m" ; }
2705 if ( $tmp1 [ 2 ] eq 'on' ) { $tmp1 [ 16 ] .= "t" ; }
2706 if ( $tmp1 [ 3 ] eq 'on' ) { $tmp1 [ 16 ] .= "w" ; }
2707 if ( $tmp1 [ 4 ] eq 'on' ) { $tmp1 [ 16 ] .= "h" ; }
2708 if ( $tmp1 [ 5 ] eq 'on' ) { $tmp1 [ 16 ] .= "f" ; }
2709 if ( $tmp1 [ 6 ] eq 'on' ) { $tmp1 [ 16 ] .= "a" ; }
2710 if ( $tmp1 [ 7 ] eq 'on' ) { $tmp1 [ 16 ] .= "s" ; }
2711 $tmp1 [ 16 ] .= " $tmp1 [8]: $tmp1 [9]- $tmp1 [10]: $tmp1 [11] \n " ;
2712 $x = join ( "," , @tmp1 );
2722 # -------------------------------------------------------------------
2728 foreach $category (< $bldir /*>)
2731 system ( "chmod 755 $category &> /dev/null" );
2732 foreach $blacklist (< $category /*>)
2734 if (- f
$blacklist ) { system ( "chmod 644 $blacklist &> /dev/null" ); }
2735 if (- d
$blacklist ) { system ( "chmod 755 $blacklist &> /dev/null" ); }
2737 system ( "chmod 666 $category /*.db &> /dev/null" );
2738 & setpermissions
( $category );
2743 # -------------------------------------------------------------------
2747 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\)\$" ;
2748 my $audiovideo = " \\ .\(aiff|asf|avi|dif|divx|mov|movie|mp3|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wma|wmf|wmv\)\$" ;
2749 my $archives = " \\ .\(bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$" ;
2751 my $ident = " anonymous" ;
2764 if (!(- d
" $dbdir /custom" )) { mkdir ( " $dbdir /custom" ) }
2765 if (!(- d
" $dbdir /custom/blocked" )) { mkdir ( " $dbdir /custom/blocked" ) }
2766 if (!(- d
" $dbdir /custom/allowed" )) { mkdir ( " $dbdir /custom/allowed" ) }
2768 open ( FILE
, ">/ $dbdir /custom/blocked/domains" );
2769 print FILE
$filtersettings { 'CUSTOM_BLACK_DOMAINS' };
2771 open ( FILE
, ">/ $dbdir /custom/blocked/urls" );
2772 print FILE
$filtersettings { 'CUSTOM_BLACK_URLS' };
2774 open ( FILE
, ">/ $dbdir /custom/blocked/expressions" );
2775 print FILE
$filtersettings { 'CUSTOM_EXPRESSIONS' };
2777 open ( FILE
, ">/ $dbdir /custom/blocked/files" );
2778 if ( $filtersettings { 'BLOCK_EXECUTABLES' } eq 'on' ) { print FILE
" $executables \n " ; }
2779 if ( $filtersettings { 'BLOCK_AUDIO-VIDEO' } eq 'on' ) { print FILE
" $audiovideo \n " ; }
2780 if ( $filtersettings { 'BLOCK_ARCHIVES' } eq 'on' ) { print FILE
" $archives \n " ; }
2782 open ( FILE
, ">/ $dbdir /custom/allowed/domains" );
2783 print FILE
$filtersettings { 'CUSTOM_WHITE_DOMAINS' };
2785 open ( FILE
, ">/ $dbdir /custom/allowed/urls" );
2786 print FILE
$filtersettings { 'CUSTOM_WHITE_URLS' };
2789 if ( $filtersettings { 'ENABLE_USERNAME_LOG' } eq 'on' ) { $ident = "" ; }
2791 if ( $filtersettings { 'REDIRECT_PAGE' } eq '' )
2793 if (( $filtersettings { 'SHOW_CATEGORY' } eq 'on' ) || ( $filtersettings { 'SHOW_URL' } eq 'on' ) || ( $filtersettings { 'SHOW_IP' } eq 'on' )) {
2794 if ( $filtersettings { 'SHOW_CATEGORY' } eq 'on' ) { $redirect .= "&category= %t " ; }
2795 if ( $filtersettings { 'SHOW_URL' } eq 'on' ) { $redirect .= "&url= %u " ; }
2796 if ( $filtersettings { 'SHOW_IP' } eq 'on' ) { $redirect .= "&ip= %a " ; }
2797 $redirect =~ s/^&/?/ ;
2798 $redirect = "http:\/\/ $netsettings {'GREEN_ADDRESS'}: $http_port \/redirect.cgi" . $redirect ;
2800 $redirect = "http:\/\/ $netsettings {'GREEN_ADDRESS'}: $http_port \/redirect.cgi" ;
2802 } else { $redirect = $filtersettings { 'REDIRECT_PAGE' }; }
2804 if ( $filtersettings { 'ENABLE_DNSERROR' } eq 'on' ) { $redirect = "302:http://0.0.0.0" ; }
2808 if ( $filtersettings { 'ENABLE_CUSTOM_WHITELIST' } eq 'on' )
2810 $defaultrule .= "custom-allowed " ;
2812 if ( $filtersettings { 'BLOCK_ALL' } eq 'on' )
2814 $defaultrule .= "none" ;
2818 if ( $filtersettings { 'BLOCK_IP_ADDR' } eq 'on' )
2820 $defaultrule .= "!in-addr " ;
2822 for ( $i = 0 ; $i <= @filtergroups ; $i ++) {
2823 if ( $filtersettings { @filtergroups [ $i ]} eq 'on' )
2825 $defaultrule .= "! @categories [ $i ] " ;
2828 if ( $filtersettings { 'ENABLE_CUSTOM_BLACKLIST' } eq 'on' )
2830 $defaultrule .= "!custom-blocked " ;
2832 if ( $filtersettings { 'ENABLE_CUSTOM_EXPRESSIONS' } eq 'on' )
2834 $defaultrule .= "!custom-expressions " ;
2836 if (( $filtersettings { 'BLOCK_EXECUTABLES' } eq 'on' ) ||
2837 ( $filtersettings { 'BLOCK_AUDIO-VIDEO' } eq 'on' ) ||
2838 ( $filtersettings { 'BLOCK_ARCHIVES' } eq 'on' ))
2840 $defaultrule .= "!files " ;
2842 $defaultrule .= "any" ;
2845 $defaultrule =~ s/\// _
/ g
;
2847 open ( FILE
, ">${General::swroot}/urlfilter/squidGuard.conf" ) or die "Unable to write squidGuard.conf file" ;
2850 print FILE
"logdir /var/log/squidGuard \n " ;
2851 print FILE
"dbhome $dbdir \n\n " ;
2853 undef @repositoryfiles ;
2854 if ( $filtersettings { 'ENABLE_REWRITE' } eq 'on' )
2856 @repositorylist = < $repository /*>;
2857 foreach ( @repositorylist )
2859 if (!- d
) { push ( @repositoryfiles , substr ( $_ , rindex ( $_ , "/" )+ 1 )); }
2863 if ((( $filtersettings { 'ENABLE_REWRITE' } eq 'on' ) && ( @repositoryfiles )) || ( $filtersettings { 'ENABLE_SAFESEARCH' } eq 'on' ))
2865 print FILE
"rewrite rew-rule-1 { \n " ;
2867 if (( $filtersettings { 'ENABLE_REWRITE' } eq 'on' ) && ( @repositoryfiles ))
2869 print FILE
" # rewrite localfiles \n " ;
2870 foreach ( @repositoryfiles )
2872 print FILE
" s@.*/ $_ \$\ @http :// $netsettings {'GREEN_ADDRESS'}: $http_port /repository/ $_ \ @i \n " ;
2876 if ( $filtersettings { 'ENABLE_SAFESEARCH' } eq 'on' )
2878 print FILE
" # rewrite safesearch \n " ;
2879 print FILE
" s@(.* \\ Wgoogle \\ . \\ w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle) \\ ?)(.*)( \\ bsafe= \\ w+)(.*)\@ \\ 1 \\ 3safe=strict \\ 5\ @i \n " ;
2880 print FILE
" s@(.* \\ Wgoogle \\ . \\ w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle) \\ ?)(.*)\@ \\ 1safe=strict \\ \& \\ 3\ @i \n " ;
2881 print FILE
" s@(.* \\ Wsearch \\ .yahoo \\ . \\ w+/search \\ W)(.*)( \\ bvm= \\ w+)(.*)\@ \\ 1 \\ 2vm=r \\ 4\ @i \n " ;
2882 print FILE
" s@(.* \\ Wsearch \\ .yahoo \\ . \\ w+/search \\ W.*)\@ \\ 1 \\ \&vm=r\ @i \n " ;
2883 print FILE
" s@(.* \\ Walltheweb \\ .com/customize \\ ?)(.*)( \\ bcopt_offensive= \\ w+)(.*)\@ \\ 1 \\ 2copt_offensive=on \\ 4\ @i \n " ;
2888 if ((!( $filtersettings { 'UNFILTERED_CLIENTS' } eq '' )) && ( $filtersettings { 'ENABLE_SAFESEARCH' } eq 'on' )) {
2889 print FILE
"rewrite rew-rule-2 { \n " ;
2890 if (( $filtersettings { 'ENABLE_REWRITE' } eq 'on' ) && ( @repositoryfiles ))
2892 print FILE
" # rewrite localfiles \n " ;
2893 foreach ( @repositoryfiles )
2895 print FILE
" s@.*/ $_ \$\ @http :// $netsettings {'GREEN_ADDRESS'}: $http_port /repository/ $_ \ @i \n " ;
2898 print FILE
" # rewrite nothing \n " ;
2904 if (!( $filtersettings { 'UNFILTERED_CLIENTS' } eq '' )) {
2905 print FILE
"src unfiltered { \n " ;
2906 print FILE
" ip $filtersettings {'UNFILTERED_CLIENTS'} \n " ;
2909 if (!( $filtersettings { 'BANNED_CLIENTS' } eq '' )) {
2910 print FILE
"src banned { \n " ;
2911 print FILE
" ip $filtersettings {'BANNED_CLIENTS'} \n " ;
2912 if ( $filtersettings { 'ENABLE_LOG' } eq 'on' )
2914 if ( $filtersettings { 'ENABLE_CATEGORY_LOG' } eq 'on' )
2916 print FILE
" logfile " . $ident . " banned.log \n " ;
2918 print FILE
" logfile " . $ident . " urlfilter.log \n " ;
2940 $uq [ 0 ] = $uq [ 0 ] * 60 ;
2941 if ( $uq [ 1 ] eq '0' ) {
2942 if ( $uq [ 2 ] eq 'hourly' ) { $uq [ 1 ] = 3600 }
2943 if ( $uq [ 2 ] eq 'daily' ) { $uq [ 1 ] = 86400 }
2944 if ( $uq [ 2 ] eq 'weekly' ) { $uq [ 1 ] = 604800 }
2947 print FILE
"src quota- $idx { \n " ;
2948 print FILE
" user $uq [3] \n " ;
2949 print FILE
" userquota $uq [0] $uq [1] $uq [2] \n " ;
2957 @tclist = & aggregatedconstraints
;
2966 if ( $tc [ 15 ] eq 'on' )
2969 print FILE
"src network- $idx { \n " ;
2970 @clients = split ( / / , $tc [ 12 ]);
2971 @temp = split ( /-/ , $clients [ 0 ]);
2972 if ( (& General
:: validipormask
( $temp [ 0 ])) || (& General
:: validipandmask
( $temp [ 0 ])))
2974 print FILE
" ip $tc [12] \n " ;
2977 @clients = split ( / / , $tc [ 12 ]);
2978 foreach $line ( @clients )
2980 $line =~ s/(^\w+)\\(\w+$)/$1%5c$2/ ;
2981 print FILE
" $line " ;
2985 if (( $filtersettings { 'ENABLE_LOG' } eq 'on' ) && ( $tc [ 14 ] eq 'block' ) && ( $tc [ 13 ] eq 'any' ))
2987 if ( $filtersettings { 'ENABLE_CATEGORY_LOG' } eq 'on' )
2989 print FILE
" logfile " . $ident . " timeconst.log \n " ;
2991 print FILE
" logfile " . $ident . " urlfilter.log \n " ;
3003 if ( $tc [ 15 ] eq 'on' )
3006 print FILE
"time constraint- $idx { \n " ;
3007 print FILE
" $tc [16] \n " ;
3013 foreach $category ( @categories ) {
3014 $blacklist = $category ;
3015 $category =~ s/\// _
/ g
;
3016 print FILE
"dest $category { \n " ;
3017 if (- e
" $dbdir / $blacklist /domains" ) {
3018 print FILE
" domainlist $blacklist \/domains \n " ;
3020 if (- e
" $dbdir / $blacklist /urls" ) {
3021 print FILE
" urllist $blacklist \/urls \n " ;
3023 if ((- e
" $dbdir / $blacklist /expressions" ) && ( $filtersettings { 'ENABLE_EXPR_LISTS' } eq 'on' )) {
3024 print FILE
" expressionlist $blacklist \/expressions \n " ;
3026 if ((( $category eq 'ads' ) || ( $category eq 'adv' )) && ( $filtersettings { 'ENABLE_EMPTY_ADS' } eq 'on' ))
3028 print FILE
" redirect http:\/\/ $netsettings {'GREEN_ADDRESS'}: $http_port \/images/urlfilter/1x1.gif \n " ;
3030 if ( $filtersettings { 'ENABLE_LOG' } eq 'on' )
3032 if ( $filtersettings { 'ENABLE_CATEGORY_LOG' } eq 'on' )
3034 print FILE
" logfile $ident $category .log \n " ;
3036 print FILE
" logfile $ident urlfilter.log \n " ;
3040 $category = $blacklist ;
3043 print FILE
"dest files { \n " ;
3044 print FILE
" expressionlist custom\/blocked\/files \n " ;
3045 if ( $filtersettings { 'ENABLE_LOG' } eq 'on' )
3047 if ( $filtersettings { 'ENABLE_CATEGORY_LOG' } eq 'on' )
3049 print FILE
" logfile $ident files.log \n " ;
3051 print FILE
" logfile $ident urlfilter.log \n " ;
3056 print FILE
"dest custom-allowed { \n " ;
3057 print FILE
" domainlist custom\/allowed\/domains \n " ;
3058 print FILE
" urllist custom\/allowed\/urls \n " ;
3061 print FILE
"dest custom-blocked { \n " ;
3062 print FILE
" domainlist custom\/blocked\/domains \n " ;
3063 print FILE
" urllist custom\/blocked\/urls \n " ;
3064 if ( $filtersettings { 'ENABLE_LOG' } eq 'on' )
3066 if ( $filtersettings { 'ENABLE_CATEGORY_LOG' } eq 'on' )
3068 print FILE
" logfile $ident custom.log \n " ;
3070 print FILE
" logfile $ident urlfilter.log \n " ;
3075 print FILE
"dest custom-expressions { \n " ;
3076 print FILE
" expressionlist custom\/blocked\/expressions \n " ;
3077 if ( $filtersettings { 'ENABLE_LOG' } eq 'on' )
3079 if ( $filtersettings { 'ENABLE_CATEGORY_LOG' } eq 'on' )
3081 print FILE
" logfile $ident custom.log \n " ;
3083 print FILE
" logfile $ident urlfilter.log \n " ;
3088 print FILE
"acl { \n " ;
3089 if (!( $filtersettings { 'UNFILTERED_CLIENTS' } eq '' )) {
3090 print FILE
" unfiltered { \n " ;
3091 print FILE
" pass all \n " ;
3092 if ( $filtersettings { 'ENABLE_SAFESEARCH' } eq 'on' )
3094 print FILE
" rewrite rew-rule-2 \n " ;
3096 print FILE
" } \n\n " ;
3098 if (!( $filtersettings { 'BANNED_CLIENTS' } eq '' )) {
3099 print FILE
" banned { \n " ;
3100 print FILE
" pass " ;
3101 if (( $filtersettings { 'ENABLE_CUSTOM_WHITELIST' } eq 'on' ) && ( $filtersettings { 'ENABLE_GLOBAL_WHITELIST' } eq 'on' ))
3103 print FILE
"custom-allowed " ;
3105 print FILE
"none \n " ;
3106 print FILE
" } \n\n " ;
3123 $qredirect = $redirect ;
3124 $qredirect =~ s/\%t/\%q\%20-\%20\%i/ ;
3125 print FILE
" quota- $idx { \n " ;
3126 print FILE
" pass " ;
3127 if (( $filtersettings { 'ENABLE_CUSTOM_WHITELIST' } eq 'on' ) && ( $filtersettings { 'ENABLE_GLOBAL_WHITELIST' } eq 'on' ))
3129 print FILE
"custom-allowed " ;
3131 print FILE
"none \n " ;
3132 unless ( $redirect eq $qredirect ) { print FILE
" redirect $qredirect \n " ; }
3133 print FILE
" } \n\n " ;
3145 @ec = split ( /\|/ , $tc [ 13 ]);
3146 foreach ( @ec ) { s/\// _
/ g
; }
3147 if ( $tc [ 15 ] eq 'on' )
3150 print FILE
" network- $idx $tc [0] constraint- $idx { \n " ;
3151 print FILE
" pass " ;
3153 if ( $filtersettings { 'BLOCK_ALL' } eq 'on' )
3155 if ( $tc [ 14 ] eq 'block' )
3157 if (( @ec == 1 ) && ( $ec [ 0 ] eq 'any' )) {
3158 if (( $filtersettings { 'ENABLE_CUSTOM_WHITELIST' } eq 'on' ) && ( $filtersettings { 'ENABLE_GLOBAL_WHITELIST' } eq 'on' ))
3160 print FILE
"custom-allowed " ;
3164 print FILE
$defaultrule ;
3171 print FILE
$defaultrule unless (( @ec == 1 ) && ( $ec [ 0 ] eq 'any' ));
3174 if ( $tc [ 14 ] eq 'block' )
3176 $tcrule = $defaultrule ;
3177 if ( $filtersettings { 'ENABLE_CUSTOM_WHITELIST' } eq 'on' ) {
3178 $tcrule =~ s/custom-allowed // ;
3179 print FILE
"custom-allowed " unless (( @ec == 1 ) && ( $ec [ 0 ] eq 'any' ) && ( $filtersettings { 'ENABLE_GLOBAL_WHITELIST' } eq 'off' ));
3181 if (( @ec == 1 ) && ( $ec [ 0 ] eq 'any' )) {
3186 print FILE
"! $_ " unless ( index ( $defaultrule , "!" . $_ . " " ) ge 0 );
3189 print FILE
$tcrule unless (( @ec == 1 ) && ( $ec [ 0 ] eq 'any' ));
3191 $tcrule = $defaultrule ;
3192 if (( @ec == 1 ) && ( $ec [ 0 ] eq 'any' ))
3198 $tcrule = " $_ " . $tcrule unless ( index ( $defaultrule , "!" . $_ . " " ) ge 0 );
3199 $tcrule =~ s/!$_ // ;
3208 print FILE
" } \n\n " ;
3213 print FILE
" default { \n " ;
3214 print FILE
" pass $defaultrule \n " ;
3215 if (( $filtersettings { 'ENABLE_LOG' } eq 'on' ) && ( $filtersettings { 'BLOCK_ALL' } eq 'on' ))
3217 if ( $filtersettings { 'ENABLE_CATEGORY_LOG' } eq 'on' )
3219 print FILE
" logfile" . $ident . " default.log \n " ;
3221 print FILE
" logfile" . $ident . " urlfilter.log \n " ;
3224 if ((( $filtersettings { 'ENABLE_REWRITE' } eq 'on' ) && ( @repositoryfiles )) || ( $filtersettings { 'ENABLE_SAFESEARCH' } eq 'on' ))
3226 print FILE
" rewrite rew-rule-1 \n " ;
3228 print FILE
" redirect $redirect \n " ;
3235 # -------------------------------------------------------------------