]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - html/cgi-bin/urlfilter.cgi
fixed wrong url on redirector page
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / urlfilter.cgi
CommitLineData
10e4f239 1#!/usr/bin/perl
70df8302
MT
2###############################################################################
3# #
4# IPFire.org - A linux based firewall #
5# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
6# #
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. #
11# #
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. #
16# #
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/>. #
19# #
20###############################################################################
10e4f239
MT
21
22use strict;
23
24# enable only the following on debugging purpose
cb5e9c6c
CS
25#use warnings;
26#use CGI::Carp 'fatalsToBrowser';
10e4f239
MT
27
28use File::Copy;
29use IO::Socket;
30
31require '/var/ipfire/general-functions.pl';
32require "${General::swroot}/lang.pl";
33require "${General::swroot}/header.pl";
34
1465b127 35my $http_port='81';
10e4f239
MT
36my %netsettings=();
37my %mainsettings=();
38my %proxysettings=();
39my %filtersettings=();
10e4f239
MT
40my %tcsettings=();
41my %uqsettings=();
42my %besettings=();
43my %updatesettings=();
44my %checked=();
45my %selected=();
46my $id=0;
47my $line='';
48my $i=0;
49my $n=0;
50my $time='';
51my $filesize;
52my $category='';
53my $section='';
54my $blacklist='';
55my $blistbackup='';
56
57my $changed = 'no';
58my $tcfile = "${General::swroot}/urlfilter/timeconst";
59my $uqfile = "${General::swroot}/urlfilter/userquota";
60my $dbdir = "${General::swroot}/urlfilter/blacklists";
61my $editdir = "${General::swroot}/urlfilter/editor";
62my $repository = "/home/httpd/html/repository";
63my $hintcolour = '#FFFFCC';
64
65my $sourceurlfile = "${General::swroot}/urlfilter/autoupdate/autoupdate.urls";
66my $updconffile = "${General::swroot}/urlfilter/autoupdate/autoupdate.conf";
67my $updflagfile = "${General::swroot}/urlfilter/blacklists/.autoupdate.last";
68my $upd_cron_dly = "${General::swroot}/urlfilter/autoupdate/cron.daily";
69my $upd_cron_wly = "${General::swroot}/urlfilter/autoupdate/cron.weekly";
70my $upd_cron_mly = "${General::swroot}/urlfilter/autoupdate/cron.monthly";
71
72my $errormessage='';
73my $updatemessage='';
74my $restoremessage='';
75my $buttontext='';
76my $source_name='';
77my $source_url='';
78my $blacklistage=0;
79
80my @repositorylist=();
81my @repositoryfiles=();
82my @categories=();
83my @selectedcategories=();
84my @filtergroups=();
85my @tclist=();
86my @uqlist=();
87my @source_urllist=();
1465b127 88my @clients=();
10e4f239
MT
89my @temp=();
90
91my $lastslashpos=0;
92
93my $toggle='';
94my $gif='';
95my $led='';
96my $ldesc='';
97my $gdesc='';
98
99if (! -d $dbdir) { mkdir("$dbdir"); }
100if (! -e $tcfile) { system("touch $tcfile"); }
101if (! -e $uqfile) { system("touch $uqfile"); }
102if (! -e $sourceurlfile) { system("touch $sourceurlfile"); }
103
104&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
105&General::readhash("${General::swroot}/main/settings", \%mainsettings);
106&General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
107
108&readblockcategories;
109
110open(FILE, $tcfile);
111@tclist = <FILE>;
112close(FILE);
113open(FILE, $uqfile);
114@uqlist = <FILE>;
115close(FILE);
116open(FILE, $sourceurlfile);
117@source_urllist = <FILE>;
118close(FILE);
119
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';
149
150$filtersettings{'ACTION'} = '';
151$filtersettings{'VALID'} = '';
152
153&Header::getcgihash(\%filtersettings);
154&Header::getcgihash(\%tcsettings);
155&Header::getcgihash(\%uqsettings);
156&Header::getcgihash(\%besettings);
157
158if (($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'}) ||
1465b127 162 ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload background'}) ||
10e4f239
MT
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'}))
1465b127
MT
166{
167
168 @clients = split(/\n/,$filtersettings{'UNFILTERED_CLIENTS'});
169 foreach (@clients)
170 {
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'}; }
173 @temp = split(/-/);
174 foreach (@temp) { unless ((&General::validipormask($_)) || (&General::validipandmask($_))) { $errormessage = $Lang::tr{'urlfilter invalid ip or mask error'}; } }
175 }
176 @clients = split(/\n/,$filtersettings{'BANNED_CLIENTS'});
177 foreach (@clients)
178 {
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'}; }
181 @temp = split(/-/);
182 foreach (@temp) { unless ((&General::validipormask($_)) || (&General::validipandmask($_))) { $errormessage = $Lang::tr{'urlfilter invalid ip or mask error'}; } }
183 }
184 if ($errormessage) { goto ERROR; }
185
10e4f239
MT
186 if (!($filtersettings{'CHILDREN'} =~ /^\d+$/) || ($filtersettings{'CHILDREN'} < 1))
187 {
188 $errormessage = $Lang::tr{'urlfilter invalid num of children'};
189 goto ERROR;
190 }
191
192 if ((!($filtersettings{'REDIRECT_PAGE'} eq '')) && (!($filtersettings{'REDIRECT_PAGE'} =~ /^https?:\/\//)))
193 {
194 $filtersettings{'REDIRECT_PAGE'} = "http://".$filtersettings{'REDIRECT_PAGE'};
195 }
196
197 if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter remove file'})
198 {
199 if (-e "$repository/$filtersettings{'ID'}") { unlink("$repository/$filtersettings{'ID'}"); }
200 $filtersettings{'ACTION'} = $Lang::tr{'urlfilter manage repository'};
201 }
202
203 if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload file'})
204 {
205 &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPLOADFILE'});
206
207 $filtersettings{'ACTION'} = $Lang::tr{'urlfilter manage repository'};
208 $_ = $filtersettings{'UPLOADFILE'};
209 tr/\\/\//;
210 $_ = substr($_,rindex($_,"/")+1);
211 if ($_) {
212 if (copy($filtersettings{'UPLOADFILE'}, "$repository/$_") != 1)
213 {
214 $errormessage = $!;
215 goto ERROR;
216 }
217 }
218
219 }
220
1465b127
MT
221 if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload background'})
222 {
223 &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'BACKGROUND'});
224
225 if (copy($filtersettings{'BACKGROUND'}, "/home/httpd/html/images/urlfilter/background.jpg") != 1)
226 {
227 $errormessage = $!;
228 goto ERROR;
229 }
230 }
231
10e4f239
MT
232 if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter upload blacklist'})
233 {
234 &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPDATEFILE'});
235
236 if (!($filtersettings{'UPDATEFILE'} =~ /.tar.gz$/))
237 {
238 $errormessage = $Lang::tr{'urlfilter wrong filetype'};
239 goto ERROR;
240 }
241
242 if (copy($filtersettings{'UPDATEFILE'}, "${General::swroot}/urlfilter/blacklists.tar.gz") != 1)
243 {
244 $errormessage = $!;
245 goto ERROR;
246 }
247
248 if (!(-d "${General::swroot}/urlfilter/update")) { mkdir("${General::swroot}/urlfilter/update"); }
249
250 my $exitcode = system("/bin/tar --no-same-owner -xzf ${General::swroot}/urlfilter/blacklists.tar.gz -C ${General::swroot}/urlfilter/update");
251
252 if ($exitcode > 0)
253 {
254 $errormessage = $Lang::tr{'urlfilter tar error'};
255 } else {
256
1465b127
MT
257 if (-d "${General::swroot}/urlfilter/update/BL")
258 {
259 system("mv ${General::swroot}/urlfilter/update/BL ${General::swroot}/urlfilter/update/blacklists");
260 }
261
10e4f239
MT
262 if (-d "${General::swroot}/urlfilter/update/category")
263 {
264 system("mv ${General::swroot}/urlfilter/update/category ${General::swroot}/urlfilter/update/blacklists");
265 }
266
267 if (!(-d "${General::swroot}/urlfilter/update/blacklists"))
268 {
269 $errormessage = $Lang::tr{'urlfilter invalid content'};
270 } else {
271 system("cp -r ${General::swroot}/urlfilter/update/blacklists/* $dbdir");
272
273 &readblockcategories;
274 &readcustomlists;
275
276 &writeconfigfile;
277
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\"");
281 }
282 }
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; }
286 }
287
288 if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter backup'})
289 {
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"))
292 {
293 $errormessage = $Lang::tr{'urlfilter backup error'};
294 goto ERROR;
295 }
296 else
297 {
298 print "Content-type: application/gzip\n";
299 print "Content-length: ";
300 print (-s "${General::swroot}/urlfilter/backup.tar.gz");
301 print "\n";
302 print "Content-disposition: attachment; filename=urlfilter-backup.tar.gz\n\n";
303
304 open (FILE, "${General::swroot}/urlfilter/backup.tar.gz");
305 while (<FILE>) { print; }
306 close (FILE);
307
308 if (-e "${General::swroot}/urlfilter/backup.tar.gz") { unlink("${General::swroot}/urlfilter/backup.tar.gz"); }
309 exit;
310 }
311 }
312
313 if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter restore'})
314 {
315 &Header::getcgihash(\%filtersettings, {'wantfile' => 1, 'filevar' => 'UPDATEFILE'});
316
317 if (!($filtersettings{'UPDATEFILE'} =~ /.tar.gz$/))
318 {
319 $errormessage = $Lang::tr{'urlfilter wrong filetype'};
320 goto ERROR;
321 }
322
323 if (!(-d "${General::swroot}/urlfilter/restore")) { mkdir("${General::swroot}/urlfilter/restore"); }
324
325 if (copy($filtersettings{'UPDATEFILE'}, "${General::swroot}/urlfilter/backup.tar.gz") != 1)
326 {
327 $errormessage = $!;
328 }
329
330 my $exitcode = system("/bin/tar --no-same-owner --preserve-permissions -xzf ${General::swroot}/urlfilter/backup.tar.gz -C ${General::swroot}/urlfilter/restore");
331 if ($exitcode > 0)
332 {
333 $errormessage = $Lang::tr{'urlfilter tar error'};
334 } else {
335 if (!(-e "${General::swroot}/urlfilter/restore/settings"))
336 {
337 $errormessage = $Lang::tr{'urlfilter invalid restore file'};
338 } else {
339 system("cp -rp ${General::swroot}/urlfilter/restore/* ${General::swroot}/urlfilter/");
340 &readblockcategories;
341 &readcustomlists;
342 &writeconfigfile;
343
344 $restoremessage = $Lang::tr{'urlfilter restore success'};
345 }
346 }
347
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; }
351 }
352
353 if ($filtersettings{'ACTION'} eq $Lang::tr{'save'})
354 {
355 $filtersettings{'VALID'} = 'yes';
356 &savesettings;
357 }
358
359 if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save and restart'})
360 {
1465b127 361 if ((!(-e "${General::swroot}/proxy/enable")) && (!(-e "${General::swroot}/proxy/enable_blue")))
10e4f239
MT
362 {
363 $errormessage = $Lang::tr{'urlfilter web proxy service required'};
364 goto ERROR;
365 }
366 if (!($proxysettings{'ENABLE_FILTER'} eq 'on'))
367 {
368 $errormessage = $Lang::tr{'urlfilter not enabled'};
369 goto ERROR;
370 }
371
372 $filtersettings{'VALID'} = 'yes';
373 &savesettings;
374
375 system("chown -R nobody.nobody $dbdir");
376
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"); }
381
1465b127 382 &setpermissions ($dbdir);
10e4f239 383
7d3af7f7 384 system('/usr/local/bin/squidctrl restart >/dev/null 2>&1');
10e4f239 385 }
10e4f239
MT
386}
387
388if ($tcsettings{'ACTION'} eq $Lang::tr{'urlfilter set time constraints'}) { $tcsettings{'TCMODE'} = 'on'}
389
390if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'add'}))
391{
392 $tcsettings{'TCMODE'}='on';
393
394 if (!$tcsettings{'DST'})
395 {
396 $errormessage=$Lang::tr{'urlfilter dst error'};
397 }
398
399 if (!$tcsettings{'SRC'})
400 {
401 $errormessage=$Lang::tr{'urlfilter src error'};
402 }
403
404 if (!($tcsettings{'TO_HOUR'}.$tcsettings{'TO_MINUTE'} gt $tcsettings{'FROM_HOUR'}.$tcsettings{'FROM_MINUTE'}))
405 {
406 $errormessage=$Lang::tr{'urlfilter timespace error'};
407 }
408
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')))
410 {
411 $errormessage=$Lang::tr{'urlfilter weekday error'};
412 }
413
414 if (!$errormessage)
415 {
1465b127
MT
416 # transform to pre1.8 client definitions
417 @clients = split(/\n/,$tcsettings{'SRC'});
418 undef $tcsettings{'SRC'};
419 foreach(@clients)
420 {
421 s/^\s+//g; s/\s+$//g; s/\s+-\s+/-/g; s/\s+/ /g; s/\n//g;
422 $tcsettings{'SRC'} .= "$_ ";
423 }
424 $tcsettings{'SRC'} =~ s/\s+$//;
425
10e4f239
MT
426 if ($tcsettings{'DST'} =~ /^any/) { $tcsettings{'DST'} = 'any'; }
427 if ($tcsettings{'ENABLERULE'} eq 'on') { $tcsettings{'ACTIVE'} = $tcsettings{'ENABLERULE'}; } else { $tcsettings{'ACTIVE'} = 'off'}
428
429 $tcsettings{'ENABLERULE'} = 'on';
430 if($tcsettings{'EDITING'} eq 'no') {
431 open(FILE,">>$tcfile");
432 flock FILE, 2;
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";
434 } else {
435 open(FILE, ">$tcfile");
436 flock FILE, 2;
437 $id = 0;
438 foreach $line (@tclist)
439 {
440 $id++;
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"; }
444 }
445 }
446 close(FILE);
447 undef %tcsettings;
448 $tcsettings{'CHANGED'}='yes';
449 $tcsettings{'TCMODE'}='on';
450 $changed = 'yes';
451 } else {
452 if ($tcsettings{'EDITING'} ne 'no')
453 {
454 $tcsettings{'ACTION'} = $Lang::tr{'edit'};
455 $tcsettings{'ID'} = $tcsettings{'EDITING'};
456 }
457 }
458}
459
1465b127
MT
460if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'urlfilter copy rule'}) && (!$errormessage))
461{
462 $id = 0;
463 foreach $line (@tclist)
464 {
465 $id++;
466 if ($tcsettings{'ID'} eq $id)
467 {
468 chomp($line);
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];
487 }
488 }
489 $tcsettings{'TCMODE'}='on';
490}
491
10e4f239
MT
492if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'remove'}))
493{
494 $id = 0;
495 open(FILE, ">$tcfile");
496 flock FILE, 2;
497 foreach $line (@tclist)
498 {
499 $id++;
500 unless ($tcsettings{'ID'} eq $id) { print FILE "$line"; }
501 }
502 close(FILE);
503 $tcsettings{'CHANGED'}='yes';
504 $tcsettings{'TCMODE'}='on';
505}
506
507if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'urlfilter restart'}))
508{
509 if (!($proxysettings{'ENABLE_FILTER'} eq 'on'))
510 {
511 $errormessage = $Lang::tr{'urlfilter not enabled'};
512 }
1465b127 513 if ((!(-e "${General::swroot}/proxy/enable")) && (!(-e "${General::swroot}/proxy/enable_blue")))
10e4f239
MT
514 {
515 $errormessage = $Lang::tr{'urlfilter web proxy service required'};
516 }
517
7d3af7f7 518 if (!$errormessage) { system('/usr/local/bin/squidctrl restart >/dev/null 2>&1'); }
10e4f239
MT
519 $tcsettings{'TCMODE'}='on';
520}
521
522if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'toggle enable disable'}))
523{
524 open(FILE, ">$tcfile");
525 flock FILE, 2;
526 $id = 0;
527 foreach $line (@tclist)
528 {
529 $id++;
530 unless ($tcsettings{'ID'} eq $id) { print FILE "$line"; }
531 else
532 {
533 chomp($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";
537 }
538 }
539 close(FILE);
540 $tcsettings{'CHANGED'}='yes';
541 $tcsettings{'TCMODE'}='on';
542}
543
10e4f239
MT
544if (($tcsettings{'MODE'} eq 'TIMECONSTRAINT') && ($tcsettings{'ACTION'} eq $Lang::tr{'edit'}) && (!$errormessage))
545{
546 $id = 0;
547 foreach $line (@tclist)
548 {
549 $id++;
550 if ($tcsettings{'ID'} eq $id)
551 {
552 chomp($line);
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];
571 }
572 }
573 $tcsettings{'TCMODE'}='on';
574}
575
1465b127
MT
576if ((!$errormessage) && (!($tcsettings{'ACTION'} eq $Lang::tr{'urlfilter copy rule'})) && (!($tcsettings{'ACTION'} eq $Lang::tr{'edit'}))) {
577 $tcsettings{'ENABLERULE'}='on';
578 $tcsettings{'TO_HOUR'}='24';
579}
580
10e4f239
MT
581if ($uqsettings{'ACTION'} eq $Lang::tr{'urlfilter set user quota'}) { $uqsettings{'UQMODE'} = 'on'}
582
583if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'add'}))
584{
585 $uqsettings{'UQMODE'}='on';
586
587 if ((!($uqsettings{'TIME_QUOTA'} =~ /^\d+/)) || ($uqsettings{'TIME_QUOTA'} < '1'))
588 {
589 $errormessage=$Lang::tr{'urlfilter quota time error'};
590 }
591
592 @temp = split(/\n/,$uqsettings{'QUOTA_USERS'});
593 undef $uqsettings{'QUOTA_USERS'};
594 foreach (@temp)
595 {
596 s/^\s+//g; s/\s+$//g;
597 if ($_) { $uqsettings{'QUOTA_USERS'} .= $_."\n"; }
598 }
599
600 if ($uqsettings{'QUOTA_USERS'} eq '')
601 {
602 $errormessage=$Lang::tr{'urlfilter quota user error'};
603 }
604
605 $_ = $uqsettings{'QUOTA_USERS'};
606 chomp; s/\n/|/g;
607 my $quota_users = $_;
608
609 if ($uqsettings{'QUOTA_USERS'} =~ /\\/)
610 {
611 $errormessage=$Lang::tr{'urlfilter invalid user error'};
612 }
613
614 if (!$errormessage) {
615 if ($uqsettings{'ENABLEQUOTA'} eq 'on') { $uqsettings{'ACTIVE'} = $uqsettings{'ENABLEQUOTA'}; } else { $uqsettings{'ACTIVE'} = 'off'}
616
617 $uqsettings{'ENABLERULE'} = 'on';
618 if($uqsettings{'EDITING'} eq 'no') {
619 open(FILE,">>$uqfile");
620 flock FILE, 2;
621 print FILE "$uqsettings{'TIME_QUOTA'},$uqsettings{'SPORADIC'},$uqsettings{'RENEWAL'},$quota_users,$uqsettings{'ACTIVE'}\n";
622 } else {
623 open(FILE, ">$uqfile");
624 flock FILE, 2;
625 $id = 0;
626 foreach $line (@uqlist)
627 {
628 $id++;
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"; }
632 }
633 }
634 close(FILE);
635 undef %uqsettings;
636 $uqsettings{'CHANGED'}='yes';
637 $uqsettings{'MODE'}='USERQUOTA';
638 $uqsettings{'UQMODE'}='on';
639 $changed = 'yes';
640 } else {
641 if ($uqsettings{'EDITING'} ne 'no')
642 {
643 $uqsettings{'ACTION'} = $Lang::tr{'edit'};
644 $uqsettings{'ID'} = $uqsettings{'EDITING'};
645 }
646 }
647}
648
649if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'remove'}))
650{
651 $id = 0;
652 open(FILE, ">$uqfile");
653 flock FILE, 2;
654 foreach $line (@uqlist)
655 {
656 $id++;
657 unless ($uqsettings{'ID'} eq $id) { print FILE "$line"; }
658 }
659 close(FILE);
660 $uqsettings{'CHANGED'}='yes';
661 $uqsettings{'UQMODE'}='on';
662}
663
664if (!$errormessage) {
665 $uqsettings{'ENABLEQUOTA'}='on';
666}
667
668if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'edit'}) && (!$errormessage))
669{
670 $id = 0;
671 foreach $line (@uqlist)
672 {
673 $id++;
674 if ($uqsettings{'ID'} eq $id)
675 {
676 chomp($line);
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];
683 }
684 }
685 $uqsettings{'UQMODE'}='on';
686}
687
688if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'toggle enable disable'}))
689{
690 open(FILE, ">$uqfile");
691 flock FILE, 2;
692 $id = 0;
693 foreach $line (@uqlist)
694 {
695 $id++;
696 unless ($uqsettings{'ID'} eq $id) { print FILE "$line"; }
697 else
698 {
699 chomp($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";
703 }
704 }
705 close(FILE);
706 $uqsettings{'CHANGED'}='yes';
707 $uqsettings{'UQMODE'}='on';
708}
709
710if (($uqsettings{'MODE'} eq 'USERQUOTA') && ($uqsettings{'ACTION'} eq $Lang::tr{'urlfilter restart'}))
711{
712 if (!($proxysettings{'ENABLE_FILTER'} eq 'on'))
713 {
714 $errormessage = $Lang::tr{'urlfilter not enabled'};
715 }
1465b127 716 if ((!(-e "${General::swroot}/proxy/enable")) && (!(-e "${General::swroot}/proxy/enable_blue")))
10e4f239
MT
717 {
718 $errormessage = $Lang::tr{'urlfilter web proxy service required'};
719 }
720
7d3af7f7 721 if (!$errormessage) { system('/usr/local/bin/squidctrl restart >/dev/null 2>&1'); }
10e4f239
MT
722 $uqsettings{'UQMODE'}='on';
723}
724
725if ($besettings{'ACTION'} eq $Lang::tr{'urlfilter blacklist editor'}) { $besettings{'BEMODE'} = 'on'; }
726
727if ($besettings{'MODE'} eq 'BLACKLIST_EDITOR')
728{
729 @temp = split(/\n/,$besettings{'BE_DOMAINS'});
730 undef $besettings{'BE_DOMAINS'};
731 foreach (@temp)
732 {
733 s/^\s+//g; s/\s+$//g;
734 if ($_) { $besettings{'BE_DOMAINS'} .= $_."\n"; }
735 }
736 chomp($besettings{'BE_DOMAINS'});
737 @temp = split(/\n/,$besettings{'BE_URLS'});
738 undef $besettings{'BE_URLS'};
739 foreach (@temp)
740 {
741 s/^\s+//g; s/\s+$//g;
742 if ($_) { $besettings{'BE_URLS'} .= $_."\n"; }
743 }
744 chomp($besettings{'BE_URLS'});
745 @temp = split(/\n/,$besettings{'BE_EXPRESSIONS'});
746 undef $besettings{'BE_EXPRESSIONS'};
747 foreach (@temp)
748 {
749 s/^\s+//g; s/\s+$//g;
750 if ($_) { $besettings{'BE_EXPRESSIONS'} .= $_."\n"; }
751 }
752 chomp($besettings{'BE_EXPRESSIONS'});
753}
754
755if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter load blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR'))
756{
757 $besettings{'BEMODE'} = 'on';
758
759 $besettings{'BE_NAME'} = $besettings{'BE_BLACKLIST'};
760
761 delete $besettings{'BE_DOMAINS'};
762 delete $besettings{'BE_URLS'};
763 delete $besettings{'BE_EXPRESSIONS'};
764
765 if (-e "$dbdir/$besettings{'BE_NAME'}/domains")
766 {
767 open(FILE, "$dbdir/$besettings{'BE_NAME'}/domains");
768 while (<FILE>) { unless ($_ eq '\n') { $besettings{'BE_DOMAINS'} .= $_ } };
769 close FILE;
770 chomp($besettings{'BE_DOMAINS'});
771 }
772 if (-e "$dbdir/$besettings{'BE_NAME'}/urls")
773 {
774 open(FILE, "$dbdir/$besettings{'BE_NAME'}/urls");
775 while (<FILE>) { unless ($_ eq '\n') { $besettings{'BE_URLS'} .= $_ } };
776 close FILE;
777 chomp($besettings{'BE_URLS'});
778 }
779 if (-e "$dbdir/$besettings{'BE_NAME'}/expressions")
780 {
781 open(FILE, "$dbdir/$besettings{'BE_NAME'}/expressions");
782 while (<FILE>) { unless ($_ eq '\n') { $besettings{'BE_EXPRESSIONS'} .= $_ } };
783 close FILE;
784 chomp($besettings{'BE_EXPRESSIONS'});
785 }
786}
787
788if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter import blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR'))
789{
790 $besettings{'BEMODE'} = 'on';
791
792 &Header::getcgihash(\%besettings, {'wantfile' => 1, 'filevar' => 'IMPORTFILE'});
793
794 if (!($besettings{'IMPORTFILE'} =~ /.tar.gz$/))
795 {
796 $errormessage = $Lang::tr{'urlfilter wrong filetype'};
797 } else {
798 if (!-d "$editdir") { mkdir("$editdir"); }
799
800 if (copy($besettings{'IMPORTFILE'}, "$editdir/blacklist.tar.gz") != 1)
801 {
802 $errormessage = $!;
803 } else {
804
805 my $exitcode = system("/bin/tar --no-same-owner --preserve-permissions -xzf $editdir/blacklist.tar.gz -C $editdir");
806 if ($exitcode > 0)
807 {
808 $errormessage = $Lang::tr{'urlfilter tar error'};
809 } else {
810 $i = 0;
811 foreach (<$editdir/blacklists/*>)
812 {
813 if (-d)
814 {
815 $i++;
816 $besettings{'BE_NAME'} = substr($_, rindex($_,"/")+1);
817 }
818 }
819
820 if (!($i == 1))
821 {
822 $errormessage = $Lang::tr{'urlfilter invalid import file'};
823 } else {
824 delete $besettings{'BE_DOMAINS'};
825 delete $besettings{'BE_URLS'};
826 delete $besettings{'BE_EXPRESSIONS'};
827
828 if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/domains")
829 {
830 open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/domains");
831 while (<FILE>) { unless ($_ eq '\n') { $besettings{'BE_DOMAINS'} .= $_ } };
832 close FILE;
833 chomp($besettings{'BE_DOMAINS'});
834 }
835 if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/urls")
836 {
837 open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/urls");
838 while (<FILE>) { unless ($_ eq '\n') { $besettings{'BE_URLS'} .= $_ } };
839 close FILE;
840 chomp($besettings{'BE_URLS'});
841 }
842 if (-e "$editdir/blacklists/$besettings{'BE_NAME'}/expressions")
843 {
844 open(FILE, "$editdir/blacklists/$besettings{'BE_NAME'}/expressions");
845 while (<FILE>) { unless ($_ eq '\n') { $besettings{'BE_EXPRESSIONS'} .= $_ } };
846 close FILE;
847 chomp($besettings{'BE_EXPRESSIONS'});
848 }
849 }
850 }
851
852 if (-d $editdir) { system("rm -rf $editdir"); }
853
854 }
855 }
856}
857
858if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter export blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR'))
859{
860 $besettings{'BEMODE'} = 'on';
861
862 if ($besettings{'BE_NAME'} eq '')
863 {
864 $errormessage = $Lang::tr{'urlfilter category name error'};
865 } elsif ($besettings{'BE_DOMAINS'} || $besettings{'BE_URLS'} || $besettings{'BE_EXPRESSIONS'}) {
866
867 $_ = $besettings{'BE_NAME'}; tr/A-Z/a-z/; $besettings{'BE_NAME'} = $_;
868
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'}"); }
872
873 open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/domains");
874 flock FILE, 2;
875 print FILE "$besettings{'BE_DOMAINS'}\n";
876 close FILE;
877 open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/urls");
878 flock FILE, 2;
879 print FILE "$besettings{'BE_URLS'}\n";
880 close FILE;
881 open(FILE, ">$editdir/blacklists/$besettings{'BE_NAME'}/expressions");
882 flock FILE, 2;
883 print FILE "$besettings{'BE_EXPRESSIONS'}\n";
884 close FILE;
885
886 if (system("/bin/tar -C $editdir -czf $editdir/$besettings{'BE_NAME'}.tar.gz blacklists"))
887 {
888 $errormessage = $Lang::tr{'urlfilter export error'};
889 }
890 else
891 {
892 print "Content-type: application/gzip\n";
893 print "Content-length: ";
894 print (-s "$editdir/$besettings{'BE_NAME'}.tar.gz");
895 print "\n";
896 print "Content-disposition: attachment; filename=$besettings{'BE_NAME'}.tar.gz\n\n";
897
898 open (FILE, "$editdir/$besettings{'BE_NAME'}.tar.gz");
899 while (<FILE>) { print; }
900 close (FILE);
901
902 if (-d $editdir) { system("rm -rf $editdir"); }
903 exit;
904 }
905 } else {
906 $errormessage = $Lang::tr{'urlfilter category data error'};
907 }
908}
909
910if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter install blacklist'}) && ($besettings{'MODE'} = 'BLACKLIST_EDITOR'))
911{
912 $besettings{'BEMODE'} = 'on';
913
914 if ($besettings{'BE_NAME'} eq '')
915 {
916 $errormessage = $Lang::tr{'urlfilter category name error'};
917 } elsif ($besettings{'BE_DOMAINS'} || $besettings{'BE_URLS'} || $besettings{'BE_EXPRESSIONS'}) {
918
919 $_ = $besettings{'BE_NAME'}; tr/A-Z/a-z/; $besettings{'BE_NAME'} = $_;
920
921 if (!-d "$editdir") { mkdir("$editdir"); }
922
923 if (!-d "$dbdir/$besettings{'BE_NAME'}") { mkdir("$dbdir/$besettings{'BE_NAME'}"); }
924
925 if (-e "$dbdir/$besettings{'BE_NAME'}/domains") { unlink("$dbdir/$besettings{'BE_NAME'}/domains"); }
926 if ($besettings{'BE_DOMAINS'})
927 {
928 open(FILE, ">$dbdir/$besettings{'BE_NAME'}/domains");
929 flock FILE, 2;
930 print FILE "$besettings{'BE_DOMAINS'}\n";
931 close FILE;
932 }
933 if (-e "$dbdir/$besettings{'BE_NAME'}/urls") { unlink("$dbdir/$besettings{'BE_NAME'}/urls"); }
934 if ($besettings{'BE_URLS'})
935 {
936 open(FILE, ">$dbdir/$besettings{'BE_NAME'}/urls");
937 flock FILE, 2;
938 print FILE "$besettings{'BE_URLS'}\n";
939 close FILE;
940 }
941 if (-e "$dbdir/$besettings{'BE_NAME'}/expressions") { unlink("$dbdir/$besettings{'BE_NAME'}/expressions"); }
942 if ($besettings{'BE_EXPRESSIONS'})
943 {
944 open(FILE, ">$dbdir/$besettings{'BE_NAME'}/expressions");
945 flock FILE, 2;
946 print FILE "$besettings{'BE_EXPRESSIONS'}\n";
947 close FILE;
948 }
949
950 open(FILE, ">$editdir/install.conf");
951 flock FILE, 2;
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"; }
958 print FILE "}\n\n";
959 print FILE "acl {\n";
960 print FILE " default {\n";
961 print FILE " pass none\n";
962 print FILE " }\n";
963 print FILE "}\n";
964 close FILE;
965
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");
969
970 &readblockcategories;
971 &readcustomlists;
972
973 &writeconfigfile;
974
7d3af7f7 975 system('/usr/local/bin/squidctrl restart >/dev/null 2>&1') unless ($besettings{'NORESTART'} eq 'on');
10e4f239
MT
976
977 if (-d $editdir) { system("rm -rf $editdir"); }
978 } else {
979 $errormessage = $Lang::tr{'urlfilter category data error'};
980 }
981}
982
983if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save schedule'})
984{
985 if (($filtersettings{'UPDATE_SOURCE'} eq 'custom') && ($filtersettings{'CUSTOM_UPDATE_URL'} eq ''))
986 {
987 $errormessage = $Lang::tr{'urlfilter custom url required'};
988 } else {
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";
994 close FILE;
995
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); }
999
1000 if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'daily'))
1001 {
1002 symlink("../bin/autoupdate.pl",$upd_cron_dly)
1003 } else {
1004 symlink("/bin/false",$upd_cron_dly)
1005 }
1006
1007 if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'weekly'))
1008 {
1009 symlink("../bin/autoupdate.pl",$upd_cron_wly)
1010 } else {
1011 symlink("/bin/false",$upd_cron_wly)
1012 }
1013
1014 if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'monthly'))
1015 {
1016 symlink("../bin/autoupdate.pl",$upd_cron_mly)
1017 } else {
1018 symlink("/bin/false",$upd_cron_mly)
1019 }
1020 }
1021}
1022
1023if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter update now'})
1024{
1025 if ($filtersettings{'UPDATE_SOURCE'} eq 'custom')
1026 {
1027 if ($filtersettings{'CUSTOM_UPDATE_URL'} eq '')
1028 {
1029 $errormessage = $Lang::tr{'urlfilter custom url required'};
1030 } else {
1031 system("${General::swroot}/urlfilter/bin/autoupdate.pl $filtersettings{'CUSTOM_UPDATE_URL'} &");
1032 }
1033 } else {
1034 system("${General::swroot}/urlfilter/bin/autoupdate.pl $filtersettings{'UPDATE_SOURCE'} &");
1035 }
1036}
1037
1038
1039if (-e "${General::swroot}/urlfilter/settings") { &General::readhash("${General::swroot}/urlfilter/settings", \%filtersettings); }
1040
1041&readcustomlists;
1042
1465b127
MT
1043ERROR:
1044
1045if ($errormessage) { $filtersettings{'VALID'} = 'no'; }
1046
10e4f239
MT
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'";
1110
1111foreach $category (@filtergroups) {
1112 $checked{$category}{'off'} = '';
1113 $checked{$category}{'on'} = '';
1114 $checked{$category}{$filtersettings{$category}} = "checked='checked'";
1115}
1116
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'";
1122
1123@selectedcategories = split(/\|/,$tcsettings{'DST'});
1124foreach (@selectedcategories)
1125{
1126 $selected{'DST'}{$_} = "selected='selected'";
1127}
1128
1129$selected{'ACCESS'}{$tcsettings{'ACCESS'}} = "selected='selected'";
1130
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'";
1155
1156$selected{'SPORADIC'}{$uqsettings{'SPORADIC'}} = "selected='selected'";
1157$selected{'RENEWAL'} {$uqsettings{'RENEWAL'}} = "selected='selected'";
1158
1159$checked{'ENABLEQUOTA'}{'off'} = '';
1160$checked{'ENABLEQUOTA'}{'on'} = '';
1161$checked{'ENABLEQUOTA'}{$uqsettings{'ENABLEQUOTA'}} = "checked='checked'";
1162
1163$selected{'BE_BLACKLIST'}{$besettings{'BE_BLACKLIST'}} = "selected='selected'";
1164
1165
1166&Header::showhttpheaders();
1167
1168&Header::openpage($Lang::tr{'urlfilter configuration'}, 1, '');
1169
1170&Header::openbigbox('100%', 'left', '', $errormessage);
1171
1172if ($errormessage) {
1173 &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
1174 print "<font class='base'>$errormessage&nbsp;</font>\n";
1175 &Header::closebox();
1176} elsif (($tcsettings{'CHANGED'} eq 'yes') || ($uqsettings{'CHANGED'} eq 'yes') ) {
1177 &writeconfigfile;
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"; }
1182 print "</class>\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();
1187 print "</form>\n";
1188}
1189
1190if ($restoremessage) {
1191 &Header::openbox('100%', 'left', "$Lang::tr{'urlfilter restore results'}:");
1192 print "<class name='base'>$restoremessage\n";
1193 print "&nbsp;</class>\n";
1194 &Header::closebox();
1195}
1196
1197if ((!$tcsettings{'TCMODE'}) && (!$uqsettings{'UQMODE'}) && (!$besettings{'BEMODE'})) {
1198
1199if (!($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter manage repository'})) {
1200
1201#==========================================================
1202#
1203# Section: Main Configuration
1204#
1205#==========================================================
1206
1207print "<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>\n";
1208
1209&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter filter settings'}:");
1210print <<END
1211<table width='100%'>
1212<tr>
1213 <td colspan='4'><b>$Lang::tr{'urlfilter block categories'}</b></td>
1214</tr>
1215END
1216;
1217
1218if (@categories == 0) {
1219print <<END
1220<tr>
1221 <td><i>$Lang::tr{'urlfilter no categories'}</i></td>
1222 <td>&nbsp;</td>
1223 <td>&nbsp;</td>
1224 <td>&nbsp;</td>
1225</tr>
1226
1227END
1228;
1229}
1230
1231for ($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";
1237 }
1238 if ($i eq 3) { print "<\/tr>\n"; }
1239 }
1240}
1241
1242print <<END
1243</table>
1244<hr size='1'>
1245<table width='100%'>
1246<tr>
1247 <td><b>$Lang::tr{'urlfilter custom blacklist'}</b></td>
1248 <td>&nbsp;</td>
1249 <td>&nbsp;</td>
1250 <td>&nbsp;</td>
1251</tr>
1252<tr>
1253 <td colspan='2'>$Lang::tr{'urlfilter blocked domains'}&nbsp;<img src='/blob.gif' alt='*' /></td>
1254 <td colspan='2'>$Lang::tr{'urlfilter blocked urls'}&nbsp;<img src='/blob.gif' alt='*' /></td>
1255</tr>
1256<tr>
1257 <td colspan='2' width='50%'><textarea name='CUSTOM_BLACK_DOMAINS' cols='32' rows='6' wrap='off'>
1258END
1259;
1260
1261print $filtersettings{'CUSTOM_BLACK_DOMAINS'};
1262
1263print <<END
1264</textarea></td>
1265 <td colspan='2' width='50%'><textarea name='CUSTOM_BLACK_URLS' cols='32' rows='6' wrap='off'>
1266END
1267;
1268
1269print $filtersettings{'CUSTOM_BLACK_URLS'};
1270
1271print <<END
1272</textarea></td>
1273</tr>
1274</table>
1275<table width='100%'>
1276<tr>
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>
1279 <td>&nbsp;</td>
1280 <td>&nbsp;</td>
1281</tr>
1282</table>
1283<hr size='1'>
1284<table width='100%'>
1285<tr>
1286 <td><b>$Lang::tr{'urlfilter custom whitelist'}</b></td>
1287 <td>&nbsp;</td>
1288 <td>&nbsp;</td>
1289 <td>&nbsp;</td>
1290</tr>
1291<tr>
1292 <td colspan='2'>$Lang::tr{'urlfilter allowed domains'}&nbsp;<img src='/blob.gif' alt='*' /></td>
1293 <td colspan='2'>$Lang::tr{'urlfilter allowed urls'}&nbsp;<img src='/blob.gif' alt='*' /></td>
1294</tr>
1295<tr>
1296 <td colspan='2' width='50%'><textarea name='CUSTOM_WHITE_DOMAINS' cols='32' rows='6' wrap='off'>
1297END
1298;
1299
1300print $filtersettings{'CUSTOM_WHITE_DOMAINS'};
1301
1302print <<END
1303</textarea></td>
1304 <td colspan='2' width='50%'><textarea name='CUSTOM_WHITE_URLS' cols='32' rows='6' wrap='off'>
1305END
1306;
1307
1308print $filtersettings{'CUSTOM_WHITE_URLS'};
1309
1310print <<END
1311</textarea></td>
1312</tr>
1313</table>
1314<table width='100%'>
1315<tr>
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>
1318 <td>&nbsp;</td>
1319 <td>&nbsp;</td>
1320</tr>
1321</table>
1322<hr size='1'>
1323<table width='100%'>
1324<tr>
1325 <td colspan='4'><b>$Lang::tr{'urlfilter custom expression list'}</b></td>
1326</tr>
1327<tr>
1328 <td colspan='4'>$Lang::tr{'urlfilter blocked expressions'}&nbsp;<img src='/blob.gif' alt='*' /></td>
1329</tr>
1330<tr>
1331 <td colspan='4'><textarea name='CUSTOM_EXPRESSIONS' cols='70' rows='3' wrap='off'>
1332END
1333;
1334
1335print $filtersettings{'CUSTOM_EXPRESSIONS'};
1336
1337print <<END
1338</textarea></td>
1339</tr>
1340<tr>
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>
1343 <td>&nbsp;</td>
1344 <td>&nbsp;</td>
1345</tr>
1346</table>
1347<hr size='1'>
1348<table width='100%'>
1349<tr>
1350 <td colspan='4'><b>$Lang::tr{'urlfilter file ext block'}</b></td>
1351</tr>
1352<tr>
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>
1357</tr>
1358<tr>
1359 <td class='base'>$Lang::tr{'urlfilter block archives'}:</td>
1360 <td><input type='checkbox' name='BLOCK_ARCHIVES' $checked{'BLOCK_ARCHIVES'}{'on'} /></td>
1361 <td>&nbsp;</td>
1362 <td>&nbsp;</td>
1363</tr>
1364</table>
1365<hr size='1'>
1366<table width='100%'>
1367<tr>
1368 <td colspan='4'><b>$Lang::tr{'urlfilter local file redirection'}</b></td>
1369</tr>
1370<tr>
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>
1373 <td>&nbsp;</td>
1374 <td>&nbsp;</td>
1375</tr>
1376<tr>
1377 <td><input type='submit' name='ACTION' value='$Lang::tr{'urlfilter manage repository'}'></td>
1378 <td>&nbsp;</td>
1379 <td>&nbsp;</td>
1380 <td>&nbsp;</td>
1381</tr>
1382</table>
1383<hr size='1'>
1384<table width='100%'>
1385<tr>
1386 <td colspan='2'><b>$Lang::tr{'urlfilter network access control'}</b></td>
1387 <td>&nbsp;</td>
1388 <td>&nbsp;</td>
1389</tr>
1390<tr>
1465b127
MT
1391 <td colspan='2'>$Lang::tr{'urlfilter unfiltered clients'}&nbsp;<img src='/blob.gif' alt='*' /></td>
1392 <td colspan='2'>$Lang::tr{'urlfilter banned clients'}&nbsp;<img src='/blob.gif' alt='*' /></td>
1393</tr>
1394<tr>
1395 <td colspan='2' width='50%'><textarea name='UNFILTERED_CLIENTS' cols='32' rows='6' wrap='off'>
1396END
1397;
1398
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;
1404
1405@clients = split(/ /,$filtersettings{'UNFILTERED_CLIENTS'});
1406undef $filtersettings{'UNFILTERED_CLIENTS'};
1407foreach (@clients) { $filtersettings{'UNFILTERED_CLIENTS'} .= "$_\n"; }
1408
1409print $filtersettings{'UNFILTERED_CLIENTS'};
1410
1411print <<END
1412</textarea></td>
1413 <td colspan='2' width='50%'><textarea name='BANNED_CLIENTS' cols='32' rows='6' wrap='off'>
1414END
1415;
1416
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;
1422
1423@clients = split(/ /,$filtersettings{'BANNED_CLIENTS'});
1424undef $filtersettings{'BANNED_CLIENTS'};
1425foreach (@clients) { $filtersettings{'BANNED_CLIENTS'} .= "$_\n"; }
1426
1427print $filtersettings{'BANNED_CLIENTS'};
1428
1429print <<END
1430</textarea></td>
10e4f239
MT
1431</tr>
1432</table>
1433<hr size='1'>
1434<table width='100%'>
1435<tr>
1436 <td colspan='4'><b>$Lang::tr{'urlfilter timebased access control'}</b></td>
1437</tr>
1438<tr>
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>
1441 <td>&nbsp;</td>
1442 <td>&nbsp;</td>
1443</tr>
1444</table>
1445<hr size='1'>
1446<table width='100%'>
1447<tr>
1448 <td colspan='4'><b>$Lang::tr{'urlfilter block settings'}</b></td>
1449</tr>
1450<tr>
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'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
1454 <td><input type='text' name='REDIRECT_PAGE' value='$filtersettings{'REDIRECT_PAGE'}' size='40' /></td>
1455</tr>
1456<tr>
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'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
1460 <td><input type='text' name='MSG_TEXT_1' value='$filtersettings{'MSG_TEXT_1'}' size='40' /></td>
1461</tr>
1462<tr>
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'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
1466 <td><input type='text' name='MSG_TEXT_2' value='$filtersettings{'MSG_TEXT_2'}' size='40' /></td>
1467</tr>
1468<tr>
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'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
1472 <td><input type='text' name='MSG_TEXT_3' value='$filtersettings{'MSG_TEXT_3'}' size='40' /></td>
1473</tr>
1474<tr>
1475 <td class='base'>$Lang::tr{'urlfilter enable jpeg'}:</td>
1476 <td><input type='checkbox' name='ENABLE_JPEG' $checked{'ENABLE_JPEG'}{'on'} /></td>
1477 <td>&nbsp;</td>
1478 <td>&nbsp;</td>
1479</tr>
1480</table>
1465b127
MT
1481<table width='100%'>
1482<tr>
1483 <td class='base'><b>$Lang::tr{'urlfilter background image'}</b></td>
1484</tr>
1485<tr>
1486 <td><br>$Lang::tr{'urlfilter background text'}:</td>
1487</tr>
1488<tr>
1489 <td><input type='file' name='BACKGROUND' size='40' /> &nbsp; <input type='submit' name='ACTION' value='$Lang::tr{'urlfilter upload background'}' /></td>
1490</tr>
1491</table>
10e4f239
MT
1492<hr size='1'>
1493<table width='100%'>
1494<tr>
1495 <td colspan='4'><b>$Lang::tr{'urlfilter advanced settings'}</b></td>
1496</tr>
1497<tr>
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>
1502</tr>
1503<tr>
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>
1508</tr>
1509<tr>
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>
1514</tr>
1515<tr>
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>
1520</tr>
1521<tr>
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>
1526</tr>
1527</table>
1528<hr size='1'>
1529<table width='100%'>
1530<tr>
1531 <td>
1532 <img src='/blob.gif' align='top' alt='*' />&nbsp;
1533 <font class='base'>$Lang::tr{'this field may be blank'}</font>
1534 </td>
8deebac8 1535 <td align='right'>&nbsp;
1465b127 1536 </td>
10e4f239
MT
1537</tr>
1538</table>
1539<table width='100%'>
1540<tr>
1541<td>&nbsp;</td>
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>
1544<td>&nbsp;</td>
1545</tr>
1546</table>
1547END
1548;
1549
1550&Header::closebox();
1551
1552print "</form>\n";
1553
1554print "<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>\n";
1555
1556&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter maintenance'}:");
1557
1558print <<END
1559<table width='100%'>
1560<tr>
1561<td class='base'><b>$Lang::tr{'urlfilter blacklist update'}</b></td>
1562</tr>
1563<tr>
1564<td>$Lang::tr{'urlfilter upload information'}<p>$Lang::tr{'urlfilter upload text'}:</td>
1565</tr>
1566<tr>
1567<td><input type='file' name='UPDATEFILE' size='40' /> &nbsp; <input type='submit' name='ACTION' value='$Lang::tr{'urlfilter upload blacklist'}' /></td>
1568</tr>
1569</table>
1570
1571<hr size='1'>
1572
1573<table width='100%'>
1574<tr>
1575 <td colspan='2' class='base'><b>$Lang::tr{'urlfilter automatic blacklist update'}</b>
1576END
1577;
1578if (-e "$updflagfile")
1579{
1580$blacklistage = int(-M "$updflagfile");
1581print "&nbsp; <b>[</b> <small><i>$Lang::tr{'urlfilter blacklist age 1'} <b>$blacklistage</b> $Lang::tr{'urlfilter blacklist age 2'}</i></small> <b>]</b>";
1582}
1583
1584$updatesettings{'UPDATE_SCHEDULE'} = 'monthly';
1585$updatesettings{'CUSTOM_UPDATE_URL'} = '';
1586
1587if (-e "$updconffile") { &General::readhash("$updconffile", \%updatesettings); }
1588
1589$checked{'ENABLE_AUTOUPDATE'}{'off'} = '';
1590$checked{'ENABLE_AUTOUPDATE'}{'on'} = '';
1591$checked{'ENABLE_AUTOUPDATE'}{$updatesettings{'ENABLE_AUTOUPDATE'}} = "checked='checked'";
1592
1593$selected{'UPDATE_SCHEDULE'}{$updatesettings{'UPDATE_SCHEDULE'}} = "selected='selected'";
1594
1595$selected{'UPDATE_SOURCE'}{$updatesettings{'UPDATE_SOURCE'}} = "selected='selected'";
1596
1597print <<END
1598 </td>
1599</tr>
1600<tr>
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>
1603</tr>
1604<tr>
1605 <td class='base'>$Lang::tr{'urlfilter automatic update schedule'}:</td>
1606 <td class='base'>
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>
1611 </select>
1612 </td>
1613</tr>
1614<tr>
1615 <td class='base'>$Lang::tr{'urlfilter select source'}:</td>
1616 <td class='base' colspan='2'>
1617 <select name='UPDATE_SOURCE'>
1618END
1619;
1620
1621foreach (@source_urllist) {
1622 chomp;
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";
1626}
1627
1628print <<END
1629 <option value='custom' $selected{'UPDATE_SOURCE'}{'custom'}>$Lang::tr{'urlfilter custom url'}</option>
1630 </select>
1631 </td>
1632</tr>
1633<tr>
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>
1636</tr>
1637</table>
1638<table width='100%'>
1639<tr>
1640 <td width='25%'><input type='submit' name='ACTION' value='$Lang::tr{'urlfilter save schedule'}'>&nbsp;&nbsp;&nbsp;<input type='submit' name='ACTION' value='$Lang::tr{'urlfilter update now'}'></td>
1641</tr>
1642</table>
1643
1644<hr size='1'>
1645
1646<table width='100%'>
1647<tr>
1648 <td class='base'><b>$Lang::tr{'urlfilter blacklist editor'}</b></td>
1649</tr>
1650<tr>
1651 <td>$Lang::tr{'urlfilter blacklist editor info'}</td>
1652</tr>
1653<tr>
1654 <td><input type='submit' name='ACTION' value='$Lang::tr{'urlfilter blacklist editor'}' /></td>
1655</tr>
1656</table>
1657
1658<hr size='1'>
1659
1660<table width='100%'>
1661<tr>
1662 <td colspan='4' class='base'><b>$Lang::tr{'urlfilter backup settings'}</b></td>
1663</tr>
1664<tr>
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>
1667 <td>&nbsp;</td>
1668 <td>&nbsp;</td>
1669</tr>
1670<tr>
1671 <td colspan='4' class='base'><input type='submit' name='ACTION' value='$Lang::tr{'urlfilter backup'}' /></td>
1672</tr>
1673</table>
1674
1675<hr size='1'>
1676
1677<table width='100%'>
1678<tr>
1679 <td class='base'><b>$Lang::tr{'urlfilter restore settings'}</b></td>
1680</tr>
1681<tr>
1682 <td>$Lang::tr{'urlfilter restore text'}:</td>
1683</tr>
1684<tr>
1685 <td><input type='file' name='UPDATEFILE' size='40' /> &nbsp; <input type='submit' name='ACTION' value='$Lang::tr{'urlfilter restore'}' /></td>
1686</tr>
1687</table>
1688</form>
1689END
1690;
1691
1692&Header::closebox();
1693
1694} else {
1695
1696#==========================================================
1697#
1698# Section: Manage Repository
1699#
1700#==========================================================
1701
1702print "<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>\n";
1703
1704&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter manage local file repository'}:");
1705print <<END
1706<table width='100%'>
1707<tr>
1708 <td>$Lang::tr{'urlfilter repository information'}<br><br></td>
1709</tr>
1710<tr>
1711 <td>$Lang::tr{'urlfilter upload file text'}:</td>
1712</tr>
1713<tr>
1714 <td><input type='file' name='UPLOADFILE' size='50' /> &nbsp; <input type='submit' name='ACTION' value='$Lang::tr{'urlfilter upload file'}' /></td>
1715</tr>
1716<tr>
1717 <td><br><b>$Lang::tr{'urlfilter upload file information 1'}:</b> $Lang::tr{'urlfilter upload file information 2'}</td>
1718</tr>
1719</table>
1720<hr size='1'>
1721<table width='100%'>
1722<tr>
1723 <td><input type='button' name='return2main' value='$Lang::tr{'urlfilter back to main page'}' onClick='self.location.href="$ENV{'SCRIPT_NAME'}"'></td>
1724</tr>
1725</table>
1726</form>
1727END
1728;
1729
1730&Header::closebox();
1731
1732&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter current files'}: </b>[$repository]");
1733
1734@repositorylist = <$repository/*>;
1735
1736undef @repositoryfiles;
1737foreach (@repositorylist)
1738{
1739 if (!-d) { push(@repositoryfiles,substr($_,rindex($_,"/")+1)); }
1740}
1741
1742if (@repositoryfiles)
1743{
1744 print <<END
1745<table width='100%'>
1746<tr>
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>
1750</tr>
1751END
1752;
1753 $id = 0;
1754 foreach $line (@repositoryfiles)
1755 {
1756 $id++;
1757 if ($id % 2) {
1758 print "<tr bgcolor='$Header::table1colour'>\n"; }
1759 else {
1760 print "<tr bgcolor='$Header::table2colour'>\n"; }
1761 $filesize = (-s "$repository/$line");
1762 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/;
1763
1764print <<END
1765 <td>&nbsp; &nbsp;$line</td>
1766 <td align='right'>$filesize&nbsp; &nbsp;</td>
1767
1768 <td align='center'>
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'}' />
1773 </form>
1774 </td>
1775
1776 </tr>
1777END
1778;
1779 }
1780
1781print <<END
1782</table>
1783<table>
1784 <tr>
1785 </tr>
1786</table>
1787<table>
1788 <tr>
1789 <td class='boldbase'>&nbsp; <b>$Lang::tr{'legend'}:</b></td>
1790 <td>&nbsp; &nbsp; <img src='/images/delete.gif' alt='$Lang::tr{'remove'}' /></td>
1791 <td class='base'>$Lang::tr{'remove'}</td>
1792 </tr>
1793</table>
1794END
1795;
1796} else {
1797
1798 print "<i>$Lang::tr{'urlfilter empty repository'}</i>\n";
1799}
1800
1801&Header::closebox();
1802
1803}
1804
1805} elsif ($tcsettings{'TCMODE'}) {
1806
1807#==========================================================
1808#
1809# Section: Set Time Constraints
1810#
1811#==========================================================
1812
1813print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";
1814
1815$buttontext = $Lang::tr{'urlfilter add rule'};
1816if ($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'};
1819} else {
1820&Header::openbox('100%', 'left', $Lang::tr{'urlfilter add new time constraint rule'}.':');
1821}
1822print <<END
1823
1824<table width='100%'>
1825<tr>
1826 <td width='2%'>$Lang::tr{'urlfilter constraint definition'}</td>
1827 <td width='1%'>&nbsp;&nbsp;</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%'>&nbsp;&nbsp;</td>
1836 <td width='7%' colspan=3>$Lang::tr{'urlfilter from'}</td>
1837 <td width='1%'>&nbsp;</td>
1838 <td width='7%' colspan=3>$Lang::tr{'urlfilter to'}</td>
1839 <td>&nbsp;</td>
1840</tr>
1841<tr>
1842 <td class='base'>
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>
1846 </select>
1847 </td>
1848 <td>&nbsp;</td>
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>
1856 <td>&nbsp;</td>
1857 <td class='base'>
1858 <select name='FROM_HOUR'>
1859END
1860;
1861for ($i=0;$i<=24;$i++) {
1862$_ = sprintf("%02s",$i);
1863print "<option $selected{'FROM_HOUR'}{$_}>$_</option>\n";
1864}
1865print <<END
1866 </select>
1867 </td>
1868 <td>:</td>
1869 <td class='base'>
1870 <select name='FROM_MINUTE'>
1871END
1872;
1873for ($i=0;$i<=45;$i+=15) {
1874$_ = sprintf("%02s",$i);
1875print "<option $selected{'FROM_MINUTE'}{$_}>$_</option>\n";
1876}
1877print <<END
1878 </select>
1879 <td> - </td>
1880 </td>
1881 <td class='base'>
1882 <select name='TO_HOUR'>
1883END
1884;
1885for ($i=0;$i<=24;$i++) {
1886$_ = sprintf("%02s",$i);
1887print "<option $selected{'TO_HOUR'}{$_}>$_</option>\n";
1888}
1889print <<END
1890 </select>
1891 </td>
1892 <td>:</td>
1893 <td class='base'>
1894 <select name='TO_MINUTE'>
1895END
1896;
1897for ($i=0;$i<=45;$i+=15) {
1898$_ = sprintf("%02s",$i);
1899print "<option $selected{'TO_MINUTE'}{$_}>$_</option>\n";
1900}
1901print <<END
1902 </select>
1903 </td>
1904 <td>&nbsp;</td>
1905</tr>
1906</table>
1907
1908<br>
1909
1910<table width='100%'>
1911 <tr>
1912 <td width='5%'>$Lang::tr{'urlfilter source'}</td>
1913 <td width='1%'>&nbsp;&nbsp;</td>
1914 <td width='5%'>$Lang::tr{'urlfilter dst'}&nbsp;<img src='/blob.gif' alt='*'><img src='/blob.gif' alt='*'></td>
1915 <td width='1%'>&nbsp;&nbsp;</td>
1916 <td width='5%'>$Lang::tr{'urlfilter access'}</td>
1917 <td>&nbsp;</td>
1918 </tr>
1919 <tr>
1465b127
MT
1920 <td rowspan='2'><textarea name='SRC' cols='28' rows='5' wrap='off'>
1921END
1922;
1923
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;
1929
1930@clients = split(/ /,$tcsettings{'SRC'});
1931undef $tcsettings{'SRC'};
1932foreach (@clients) { $tcsettings{'SRC'} .= "$_\n"; }
1933
1934print $tcsettings{'SRC'};
1935
1936print <<END
1937</textarea></td>
1938
10e4f239 1939 <td>&nbsp;</td>
1465b127
MT
1940 <td class='base' rowspan='2' valign='top'>
1941 <select name='DST' size='6' multiple>
10e4f239
MT
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>
1944END
1945;
1946
1947&readblockcategories;
1948foreach (@categories)
1949{
1950 print "<option value='$_' $selected{'DST'}{$_}>$_</option>\n";
1951}
1952
1953print <<END
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>
1957 </select>
1958 </td>
1959 <td>&nbsp;</td>
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>
1964 </select>
1965 </td>
1966 <td>&nbsp;</td>
1967 </tr>
1465b127
MT
1968 <tr>
1969 <td>&nbsp;</td>
1970 <td>&nbsp;</td>
1971 <td>&nbsp;</td>
1972 <td>&nbsp;</td>
1973 </tr>
10e4f239
MT
1974 <tr>
1975 <td>$Lang::tr{'remark'}&nbsp;<img src='/blob.gif' alt='*'></td>
1976 <td>&nbsp;</td>
1977 <td>&nbsp;</td>
1978 <td>&nbsp;</td>
1979 <td>&nbsp;</td>
1465b127 1980 <td>&nbsp;</td>
10e4f239
MT
1981 </tr>
1982 <tr>
1983 <td><input type='text' name='COMMENT' value='$tcsettings{'COMMENT'}' size='32' /></td>
1984 <td>&nbsp;</td>
1985 <td>&nbsp;</td>
1986 <td>&nbsp;</td>
1987 <td>&nbsp;</td>
1465b127 1988 <td>&nbsp;</td>
10e4f239
MT
1989 </tr>
1990</table>
1991
1992<table width='100%'>
1993 <tr>
1994 <td class='base'>$Lang::tr{'urlfilter enabled'}<input type='checkbox' name='ENABLERULE' $checked{'ENABLERULE'}{'on'} /></td>
1995 </tr>
1996</table>
1997
1998<p>
1999
2000<table width='50%'>
2001 <tr>
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>
2006 <td>&nbsp;</td>
2007 <td><input type='button' name='return2main' value='$Lang::tr{'urlfilter back to main page'}' onClick='self.location.href="$ENV{'SCRIPT_NAME'}"'></td>
2008 </tr>
2009</table>
2010<p>
2011<table width='100%'>
2012 <tr>
2013 <td width='1%' align='right'> <img src='/blob.gif' align='top' alt='*' />&nbsp;</td>
2014 <td><font class='base'>$Lang::tr{'this field may be blank'}</font></td>
2015 </tr>
2016 <tr>
2017 <td width='1%' align='right'><img src='/blob.gif' align='top' alt='*' /><img src='/blob.gif' align='top' alt='*' />&nbsp;</td>
2018 <td><font class='base'>$Lang::tr{'urlfilter select multi'}</font></td>
2019 </tr>
2020</table>
2021END
2022;
2023
2024if ($tcsettings{'ACTION'} eq $Lang::tr{'edit'}) {
2025 print "<input type='hidden' name='EDITING' value='$tcsettings{'ID'}' />\n";
2026} else {
2027 print "<input type='hidden' name='EDITING' value='no' />\n";
2028}
2029
2030&Header::closebox();
2031print "</form>\n";
2032
2033&Header::openbox('100%', 'left', $Lang::tr{'current rules'});
2034print <<END
2035<table width='100%'>
2036 <tr>
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>
1465b127 2041 <td width='10%' class='boldbase' colspan='5' align='center'>&nbsp;</td>
10e4f239
MT
2042 </tr>
2043END
2044;
2045
2046if ($tcsettings{'ACTION'} ne '' or $changed ne 'no')
2047{
2048 open(FILE, $tcfile);
2049 @tclist = <FILE>;
2050 close(FILE);
2051}
2052
2053$id = 0;
2054foreach $line (@tclist)
2055{
2056 $id++;
2057 chomp($line);
2058 @temp = split(/\,/,$line);
2059 if($tcsettings{'ACTION'} eq $Lang::tr{'edit'} && $tcsettings{'ID'} eq $id) {
2060 print "<tr bgcolor='$Header::colouryellow'>\n"; }
2061 elsif ($id % 2) {
2062 print "<tr bgcolor='$Header::table1colour'>\n"; }
2063 else {
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'}; }
2071
2072 undef $time;
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.' &nbsp; '.$temp[8].':'.$temp[9].' to '.$temp[10].':'.$temp[11];
2081
2082print <<END
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>
2088
2089 <td align='center'>
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'}' />
2096 </form>
2097 </td>
2098
2099 <td align='center'>
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'}' />
2105 </form>
2106 </td>
2107
2108 <td align='center'>
2109 <form method='post' name='frmc$id' action='$ENV{'SCRIPT_NAME'}'>
1465b127
MT
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'}' />
2114 </form>
2115 </td>
2116
2117 <td align='center'>
2118 <form method='post' name='frmd$id' action='$ENV{'SCRIPT_NAME'}'>
10e4f239
MT
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'}' />
2123 </form>
2124 </td>
2125
2126 </tr>
2127END
2128;
2129 if($tcsettings{'ACTION'} eq $Lang::tr{'edit'} && $tcsettings{'ID'} eq $id) {
2130 print "<tr bgcolor='$Header::colouryellow'>\n"; }
2131 elsif ($id % 2) {
2132 print "<tr bgcolor='$Header::table1colour'>\n"; }
2133 else {
2134 print "<tr bgcolor='$Header::table2colour'>\n"; }
2135print <<END
2136 <td align='center' colspan='4'>$temp[16]
2137 </td>
1465b127 2138 <td align='center' colspan='5'>
10e4f239
MT
2139 </td>
2140 </tr>
2141END
2142;
2143}
2144
2145print "</table>\n";
2146
2147# If the time constraint file contains entries, print entries and action icons
2148if (! -z "$tcfile") {
2149print <<END
2150
2151<table>
2152 <tr>
2153 <td class='boldbase'>&nbsp; <b>$Lang::tr{'legend'}:</b></td>
2154 <td>&nbsp; &nbsp; <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>&nbsp; &nbsp; <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>&nbsp; <img src='/images/on.gif' alt='$Lang::tr{'click to disable'}' /></td>
2159 <td class='base'>$Lang::tr{'click to disable'}</td>
2160 <td>&nbsp; &nbsp; <img src='/images/off.gif' alt='$Lang::tr{'click to enable'}' /></td>
2161 <td class='base'>$Lang::tr{'click to enable'}</td>
2162 <td>&nbsp; &nbsp; <img src='/images/edit.gif' alt='$Lang::tr{'edit'}' /></td>
2163 <td class='base'>$Lang::tr{'edit'}</td>
1465b127
MT
2164 <td>&nbsp; &nbsp; <img src='/images/urlfilter/copy.gif' alt='$Lang::tr{'urlfilter copy rule'}' /></td>
2165 <td class='base'>$Lang::tr{'urlfilter copy rule'}</td>
10e4f239
MT
2166 <td>&nbsp; &nbsp; <img src='/images/delete.gif' alt='$Lang::tr{'remove'}' /></td>
2167 <td class='base'>$Lang::tr{'remove'}</td>
2168 </tr>
2169</table>
2170END
2171;
2172}
2173
2174&Header::closebox();
2175
2176} elsif ($uqsettings{'UQMODE'}) {
2177
2178#==========================================================
2179#
2180# Section: Set User Quota
2181#
2182#==========================================================
2183
2184print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";
2185
2186$buttontext = $Lang::tr{'urlfilter add rule'};
2187if ($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'};
2190} else {
2191&Header::openbox('100%', 'left', $Lang::tr{'urlfilter add new user quota rule'}.':');
2192}
2193print <<END
2194
2195<table width='100%'>
2196<tr>
2197 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
2198</tr>
2199<tr>
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'>
2204 <tr>
2205 <!-- intentionally left empty -->
2206 </tr>
2207 <tr>
2208 <td>$Lang::tr{'urlfilter assigned quota users'}:</td>
2209 </tr>
2210 <tr>
2211 <!-- intentionally left empty -->
2212 </tr>
2213 <tr>
2214 <!-- intentionally left empty -->
2215 </tr>
2216 <tr>
2217 <td><textarea name='QUOTA_USERS' cols='32' rows='6' wrap='off'>
2218END
2219;
2220
2221$uqsettings{'QUOTA_USERS'} =~ s/\|/\n/g;
2222print $uqsettings{'QUOTA_USERS'};
2223
2224print <<END
2225</textarea></td>
2226 </tr>
2227 </table>
2228 </td>
2229</tr>
2230<tr>
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>
2236 </select></td>
2237</tr>
2238<tr>
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>
2244 </select></td>
2245</tr>
2246<tr>
2247 <td colspan='2'>&nbsp;</td>
2248</tr>
2249<tr>
2250 <td class='base'>$Lang::tr{'urlfilter enabled'}</td>
2251 <td class='base'><input type='checkbox' name='ENABLEQUOTA' $checked{'ENABLEQUOTA'}{'on'} /></td>
2252</tr>
2253
2254</table>
2255<p>
2256
2257<table width='50%'>
2258 <tr>
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>
2263 <td>&nbsp;</td>
2264 <td><input type='button' name='return2main' value='$Lang::tr{'urlfilter back to main page'}' onClick='self.location.href="$ENV{'SCRIPT_NAME'}"'></td>
2265 </tr>
2266</table>
2267
2268<p>
2269END
2270;
2271
2272if ($uqsettings{'ACTION'} eq $Lang::tr{'edit'}) {
2273 print "<input type='hidden' name='EDITING' value='$uqsettings{'ID'}' />\n";
2274} else {
2275 print "<input type='hidden' name='EDITING' value='no' />\n";
2276}
2277
2278&Header::closebox();
2279print "</form>\n";
2280
2281&Header::openbox('100%', 'left', $Lang::tr{'current rules'});
2282print <<END
2283<table width='100%'>
2284 <tr>
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'>&nbsp;</td>
2290 </tr>
2291END
2292;
2293
2294if ($uqsettings{'ACTION'} ne '' or $changed ne 'no')
2295{
2296 open(FILE, $uqfile);
2297 @uqlist = <FILE>;
2298 close(FILE);
2299}
2300
2301$id = 0;
2302foreach $line (@uqlist)
2303{
2304 $id++;
2305 chomp($line);
2306 @temp = split(/\,/,$line);
2307 if($uqsettings{'ACTION'} eq $Lang::tr{'edit'} && $uqsettings{'ID'} eq $id) {
2308 print "<tr bgcolor='$Header::colouryellow'>\n"; }
2309 elsif ($id % 2) {
2310 print "<tr bgcolor='$Header::table1colour'>\n"; }
2311 else {
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'}; }
2315
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] = $_;
2319
2320print <<END
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>
2325
2326 <td align='center'>
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'}' />
2333 </form>
2334 </td>
2335
2336 <td align='center'>
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'}' />
2342 </form>
2343 </td>
2344
2345 <td align='center'>
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'}' />
2351 </form>
2352 </td>
2353
2354 </tr>
2355END
2356;
2357}
2358
2359print "</table>\n";
2360
2361# If the user quota file contains entries, print entries and action icons
2362if (! -z "$uqfile") {
2363print <<END
2364
2365<table>
2366 <tr>
2367 <td class='boldbase'>&nbsp; <b>$Lang::tr{'legend'}:</b></td>
2368 <td>&nbsp; <img src='/images/on.gif' alt='$Lang::tr{'click to disable'}' /></td>
2369 <td class='base'>$Lang::tr{'click to disable'}</td>
2370 <td>&nbsp; &nbsp; <img src='/images/off.gif' alt='$Lang::tr{'click to enable'}' /></td>
2371 <td class='base'>$Lang::tr{'click to enable'}</td>
2372 <td>&nbsp; &nbsp; <img src='/images/edit.gif' alt='$Lang::tr{'edit'}' /></td>
2373 <td class='base'>$Lang::tr{'edit'}</td>
2374 <td>&nbsp; &nbsp; <img src='/images/delete.gif' alt='$Lang::tr{'remove'}' /></td>
2375 <td class='base'>$Lang::tr{'remove'}</td>
2376 </tr>
2377</table>
2378END
2379;
2380}
2381
2382&Header::closebox();
2383
2384} else {
2385
2386#==========================================================
2387#
2388# Section: Blacklist editor
2389#
2390#==========================================================
2391
2392print "<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>\n";
2393
2394&Header::openbox('100%', 'left', $Lang::tr{'urlfilter urlfilter blacklist editor'}.':');
2395
2396print <<END
2397
2398<table width='100%'>
2399<tr>
2400 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
2401</tr>
2402<tr>
2403 <td class='base'><b>$Lang::tr{'urlfilter blacklist name'}</b></td>
2404</tr>
2405<tr>
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>
2408</tr>
2409</table>
2410<hr size='1'>
2411<table width='100%'>
2412<tr>
2413 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='20%'></td>
2414</tr>
2415<tr>
2416 <td class='base' colspan='4'><b>$Lang::tr{'urlfilter edit domains urls expressions'}</b></td>
2417</tr>
2418<tr>
2419 <td colspan='2'>$Lang::tr{'urlfilter domains'}</td>
2420 <td colspan='2'>$Lang::tr{'urlfilter urls'}</td>
2421</tr>
2422<tr>
2423 <td colspan='2'><textarea name='BE_DOMAINS' cols='38' rows='10' wrap='off'>
2424END
2425;
2426
2427print $besettings{'BE_DOMAINS'};
2428
2429print <<END
2430</textarea></td>
2431 <td colspan='2'><textarea name='BE_URLS' cols='38' rows='10' wrap='off'>
2432END
2433;
2434
2435print $besettings{'BE_URLS'};
2436
2437print <<END
2438</textarea></td>
2439</tr>
2440<tr>
2441 <td colspan='4'>$Lang::tr{'urlfilter expressions'}</td>
2442</tr>
2443<tr>
2444 <td colspan='4'><textarea name='BE_EXPRESSIONS' cols='80' rows='3' wrap='off'>
2445END
2446;
2447
2448print $besettings{'BE_EXPRESSIONS'};
2449
2450print <<END
2451</textarea></td>
2452</tr>
2453</table>
2454<hr size='1'>
2455<table width='100%'>
2456<tr>
2457 <td class='base' colspan='4'><b>$Lang::tr{'urlfilter load blacklist'}</b></td>
2458</tr>
2459<tr>
2460 <td width='25%' class='base'>$Lang::tr{'urlfilter select blacklist'}:</td>
2461 <td width='20%' class='base'>
2462 <select name='BE_BLACKLIST'>
2463END
2464;
2465
2466&readblockcategories;
2467foreach (@categories)
2468{
2469 print "<option value='$_' $selected{'BE_BLACKLIST'}{$_}>$_</option>\n";
2470}
2471
2472print <<END
2473 </select>
2474 </td>
2475 <td>&nbsp;</td>
2476 <td>&nbsp;</td>
2477<tr>
2478 <td colpsan='4'><input type='submit' name='ACTION' value='$Lang::tr{'urlfilter load blacklist'}' /></td>
2479</tr>
2480</tr>
2481</table>
2482<hr size='1'>
2483<table width='100%'>
2484<tr>
2485 <td class='base' colspan='4'><b>$Lang::tr{'urlfilter import blacklist'}</b></td>
2486</tr>
2487<tr>
2488 <td colspan='4'>$Lang::tr{'urlfilter import text'}:</td>
2489</tr>
2490<tr>
2491 <td nowrap><input type='file' name='IMPORTFILE' size='40' /> &nbsp; <input type='submit' name='ACTION' value='$Lang::tr{'urlfilter import blacklist'}' /></td>
2492 <td><input type='hidden' name='MODE' value='BLACKLIST_EDITOR' /></td>
2493</tr>
2494</table>
2495<hr size='1'>
2496<table width='100%'>
2497<tr>
2498 <td class='base' colspan='4'><b>$Lang::tr{'urlfilter export blacklist'}</b></td>
2499</tr>
2500<tr>
2501 <td><input type='submit' name='ACTION' value='$Lang::tr{'urlfilter export blacklist'}' /></td>
2502</tr>
2503</table>
2504<hr size='1'>
2505<table width='100%'>
2506<tr>
2507 <td class='base' colspan='4'><b>$Lang::tr{'urlfilter install blacklist'}</b></td>
2508</tr>
2509<tr>
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>
2512 <td>&nbsp;</td>
2513 <td>&nbsp;</td>
2514</tr>
2515<tr>
2516 <td><input type='submit' name='ACTION' value='$Lang::tr{'urlfilter install blacklist'}' /></td>
2517</tr>
2518<tr>
2519 <td class='base' colspan='4'><br>$Lang::tr{'urlfilter install information'}</td>
2520</tr>
2521</table>
2522<hr size='1'>
2523<table width='20%'>
2524<tr>
2525 <td><input type='reset' name='ACTION' value='$Lang::tr{'urlfilter reset'}' /></td>
2526 <td>&nbsp;</td>
2527 <td><input type='button' name='return2main' value='$Lang::tr{'urlfilter back to main page'}' onClick='self.location.href="$ENV{'SCRIPT_NAME'}"'></td>
2528</tr>
2529</table>
2530
2531END
2532;
2533
2534&Header::closebox();
2535print "</form>\n";
2536
2537}
2538
2539&Header::closebigbox();
2540
2541&Header::closepage();
2542
2543# -------------------------------------------------------------------
2544
2545sub savesettings
2546{
1465b127
MT
2547 # transform to pre1.8 client definitions
2548 @clients = split(/\n/,$filtersettings{'UNFILTERED_CLIENTS'});
2549 undef $filtersettings{'UNFILTERED_CLIENTS'};
2550 foreach(@clients)
2551 {
2552 s/^\s+//g; s/\s+$//g; s/\s+-\s+/-/g; s/\s+/ /g; s/\n//g;
2553 $filtersettings{'UNFILTERED_CLIENTS'} .= "$_ ";
2554 }
2555 $filtersettings{'UNFILTERED_CLIENTS'} =~ s/\s+$//;
2556
2557 # transform to pre1.8 client definitions
2558 @clients = split(/\n/,$filtersettings{'BANNED_CLIENTS'});
2559 undef $filtersettings{'BANNED_CLIENTS'};
2560 foreach(@clients)
2561 {
2562 s/^\s+//g; s/\s+$//g; s/\s+-\s+/-/g; s/\s+/ /g; s/\n//g;
2563 $filtersettings{'BANNED_CLIENTS'} .= "$_ ";
2564 }
2565 $filtersettings{'BANNED_CLIENTS'} =~ s/\s+$//;
2566
10e4f239
MT
2567 &writeconfigfile;
2568
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'};
2576
2577 &General::writehash("${General::swroot}/urlfilter/settings", \%filtersettings);
2578}
2579
2580# -------------------------------------------------------------------
2581
2582sub readblockcategories
2583{
2584 undef(@categories);
1465b127
MT
2585
2586 &getblockcategory ($dbdir);
2587
2588 foreach (@categories) { $_ = substr($_,length($dbdir)+1); }
10e4f239
MT
2589
2590 @filtergroups = @categories;
1465b127 2591
10e4f239 2592 foreach (@filtergroups) {
1465b127 2593 s/\//_SLASH_/g;
10e4f239
MT
2594 tr/a-z/A-Z/;
2595 $_ = "FILTER_".$_;
2596 }
2597}
2598
2599# -------------------------------------------------------------------
2600
1465b127
MT
2601sub getblockcategory
2602{
2603 foreach $category (<$_[0]/*>)
2604 {
2605 if (-d $category)
2606 {
2607 if ((-e "$category/domains") || (-e "$category/urls"))
2608 {
2609 unless ($category =~ /\bcustom\b/) { push(@categories,$category); }
2610 }
2611 &getblockcategory ($category);
2612 }
2613 }
2614}
2615
2616# -------------------------------------------------------------------
2617
10e4f239
MT
2618sub readcustomlists
2619{
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'} .= $_ };
2624 close(FILE);
2625 }
2626
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'} .= $_ };
2631 close(FILE);
2632 }
2633
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'} .= $_ };
2638 close(FILE);
2639 }
2640
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'} .= $_ };
2645 close(FILE);
2646 }
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'} .= $_ };
2651 close(FILE);
2652 }
2653}
2654
2655# -------------------------------------------------------------------
2656
2657sub aggregatedconstraints
2658{
2659 my $aggregated;
2660 my @old;
2661 my @new;
2662 my @tmp1;
2663 my @tmp2;
2664 my $x;
2665
2666 if (-e $tcfile)
2667 {
2668 open(TC, $tcfile);
2669 @old = <TC>;
2670 close(TC);
2671
2672 while (@old > 0)
2673 {
2674 $aggregated = 0;
2675 $x = shift(@old);
2676 chomp($x);
2677 @tmp1 = split(/\,/,$x);
2678 $tmp1[16] = '';
2679 foreach (@new)
2680 {
2681 @tmp2 = split(/\,/);
1465b127 2682 if (($tmp1[15] eq 'on') && ($tmp2[15] eq 'on'))
10e4f239
MT
2683 {
2684 if (($tmp1[0] eq $tmp2[0]) && ($tmp1[12] eq $tmp2[12]) && ($tmp1[13] eq $tmp2[13]) && ($tmp1[14] eq $tmp2[14]))
2685 {
2686 $aggregated = 1;
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);
2697 }
2698
2699 }
2700 }
2701 if (!$aggregated)
2702 {
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);
2713 push(@new,$x);
2714 }
2715 }
2716 }
2717
2718 return @new;
2719
2720}
2721
2722# -------------------------------------------------------------------
2723
1465b127
MT
2724sub setpermissions
2725{
2726 my $bldir = $_[0];
2727
2728 foreach $category (<$bldir/*>)
2729 {
2730 if (-d $category){
2731 system("chmod 755 $category &> /dev/null");
2732 foreach $blacklist (<$category/*>)
2733 {
2734 if (-f $blacklist) { system("chmod 644 $blacklist &> /dev/null"); }
2735 if (-d $blacklist) { system("chmod 755 $blacklist &> /dev/null"); }
2736 }
2737 system("chmod 666 $category/*.db &> /dev/null");
2738 &setpermissions ($category);
2739 }
2740 }
2741}
2742
2743# -------------------------------------------------------------------
2744
10e4f239
MT
2745sub writeconfigfile
2746{
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\)\$";
1465b127 2748 my $audiovideo = "\\.\(aiff|asf|avi|dif|divx|mov|movie|mp3|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wma|wmf|wmv\)\$";
10e4f239
MT
2749 my $archives = "\\.\(bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$";
2750
2751 my $ident = " anonymous";
2752
2753 my $defaultrule='';
2754 my $tcrule='';
2755 my $redirect='';
2756 my $qredirect='';
2757
2758 my $idx;
2759
2760 my @ec=();
2761 my @tc=();
2762 my @uq=();
2763
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") }
2767
2768 open(FILE, ">/$dbdir/custom/blocked/domains");
2769 print FILE $filtersettings{'CUSTOM_BLACK_DOMAINS'};
2770 close(FILE);
2771 open(FILE, ">/$dbdir/custom/blocked/urls");
2772 print FILE $filtersettings{'CUSTOM_BLACK_URLS'};
2773 close(FILE);
2774 open(FILE, ">/$dbdir/custom/blocked/expressions");
2775 print FILE $filtersettings{'CUSTOM_EXPRESSIONS'};
2776 close(FILE);
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"; }
2781 close(FILE);
2782 open(FILE, ">/$dbdir/custom/allowed/domains");
2783 print FILE $filtersettings{'CUSTOM_WHITE_DOMAINS'};
2784 close(FILE);
2785 open(FILE, ">/$dbdir/custom/allowed/urls");
2786 print FILE $filtersettings{'CUSTOM_WHITE_URLS'};
2787 close(FILE);
2788
2789 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { $ident = ""; }
2790
2791 if ($filtersettings{'REDIRECT_PAGE'} eq '')
2792 {
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/^&/?/;
1465b127 2798 $redirect = "http:\/\/$netsettings{'GREEN_ADDRESS'}:$http_port\/redirect.cgi".$redirect;
10e4f239 2799 } else {
1465b127 2800 $redirect="http:\/\/$netsettings{'GREEN_ADDRESS'}:$http_port\/redirect.cgi";
10e4f239
MT
2801 }
2802 } else { $redirect=$filtersettings{'REDIRECT_PAGE'}; }
2803
2804 if ($filtersettings{'ENABLE_DNSERROR'} eq 'on') { $redirect = "302:http://0.0.0.0"; }
2805
2806 undef $defaultrule;
2807
2808 if ($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on')
2809 {
2810 $defaultrule .= "custom-allowed ";
2811 }
2812 if ($filtersettings{'BLOCK_ALL'} eq 'on')
2813 {
2814 $defaultrule .= "none";
2815 }
2816 else
2817 {
2818 if ($filtersettings{'BLOCK_IP_ADDR'} eq 'on')
2819 {
2820 $defaultrule .= "!in-addr ";
2821 }
2822 for ($i=0; $i<=@filtergroups; $i++) {
2823 if ($filtersettings{@filtergroups[$i]} eq 'on')
2824 {
2825 $defaultrule .= "!@categories[$i] ";
2826 }
2827 }
2828 if ($filtersettings{'ENABLE_CUSTOM_BLACKLIST'} eq 'on')
2829 {
2830 $defaultrule .= "!custom-blocked ";
2831 }
2832 if ($filtersettings{'ENABLE_CUSTOM_EXPRESSIONS'} eq 'on')
2833 {
2834 $defaultrule .= "!custom-expressions ";
2835 }
2836 if (($filtersettings{'BLOCK_EXECUTABLES'} eq 'on') ||
2837 ($filtersettings{'BLOCK_AUDIO-VIDEO'} eq 'on') ||
2838 ($filtersettings{'BLOCK_ARCHIVES'} eq 'on'))
2839 {
2840 $defaultrule .= "!files ";
2841 }
2842 $defaultrule .= "any";
2843 }
2844
1465b127
MT
2845 $defaultrule =~ s/\//_/g;
2846
10e4f239
MT
2847 open(FILE, ">${General::swroot}/urlfilter/squidGuard.conf") or die "Unable to write squidGuard.conf file";
2848 flock(FILE, 2);
2849
2850 print FILE "logdir /var/log/squidGuard\n";
2851 print FILE "dbhome $dbdir\n\n";
2852
2853 undef @repositoryfiles;
2854 if ($filtersettings{'ENABLE_REWRITE'} eq 'on')
2855 {
2856 @repositorylist = <$repository/*>;
2857 foreach (@repositorylist)
2858 {
2859 if (!-d) { push(@repositoryfiles,substr($_,rindex($_,"/")+1)); }
2860 }
2861 }
2862
2863 if ((($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) || ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on'))
2864 {
1465b127 2865 print FILE "rewrite rew-rule-1 {\n";
10e4f239
MT
2866
2867 if (($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles))
2868 {
2869 print FILE " # rewrite localfiles\n";
2870 foreach (@repositoryfiles)
2871 {
1465b127 2872 print FILE " s@.*/$_\$\@http://$netsettings{'GREEN_ADDRESS'}:$http_port/repository/$_\@i\n";
10e4f239
MT
2873 }
2874 }
2875
2876 if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')
2877 {
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";
2884 }
2885
2886 print FILE "}\n\n";
2887
2888 if ((!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) && ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')) {
1465b127 2889 print FILE "rewrite rew-rule-2 {\n";
10e4f239
MT
2890 if (($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles))
2891 {
2892 print FILE " # rewrite localfiles\n";
2893 foreach (@repositoryfiles)
2894 {
1465b127 2895 print FILE " s@.*/$_\$\@http://$netsettings{'GREEN_ADDRESS'}:$http_port/repository/$_\@i\n";
10e4f239
MT
2896 }
2897 } else {
2898 print FILE " # rewrite nothing\n";
2899 }
2900 print FILE "}\n\n";
2901 }
2902 }
2903
1465b127
MT
2904 if (!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) {
2905 print FILE "src unfiltered {\n";
2906 print FILE " ip $filtersettings{'UNFILTERED_CLIENTS'}\n";
2907 print FILE "}\n\n";
2908 }
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')
2913 {
2914 if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on')
2915 {
2916 print FILE " logfile ".$ident." banned.log\n";
2917 } else {
2918 print FILE " logfile ".$ident." urlfilter.log\n";
2919 }
2920 }
2921 print FILE "}\n\n";
2922 }
2923
10e4f239
MT
2924 if (-e $uqfile)
2925 {
2926 open(UQ, $uqfile);
2927 @uqlist = <UQ>;
2928 close(UQ);
2929
2930 if (@uqlist > 0)
2931 {
2932 $idx=0;
2933 foreach (@uqlist)
2934 {
2935 chomp;
2936 @uq = split(/\,/);
2937 if ($uq[4] eq 'on')
2938 {
2939 $idx++;
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 }
2945 }
2946 $uq[3] =~ s/\|/ /g;
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";
2950 print FILE "}\n\n";
2951 }
2952 }
2953
2954 }
2955 }
2956
2957 @tclist = &aggregatedconstraints;
2958
2959 if (@tclist > 0)
2960 {
2961 $idx=0;
2962 foreach (@tclist)
2963 {
2964 chomp;
2965 @tc = split(/\,/);
2966 if ($tc[15] eq 'on')
2967 {
2968 $idx++;
2969 print FILE "src network-$idx {\n";
1465b127
MT
2970 @clients = split(/ /,$tc[12]);
2971 @temp = split(/-/,$clients[0]);
2972 if ( (&General::validipormask($temp[0])) || (&General::validipandmask($temp[0])))
2973 {
2974 print FILE " ip $tc[12]\n";
2975 } else {
2976 print FILE " user";
2977 @clients = split(/ /,$tc[12]);
2978 foreach $line (@clients)
2979 {
2980 $line =~ s/(^\w+)\\(\w+$)/$1%5c$2/;
2981 print FILE " $line";
2982 }
2983 print FILE "\n";
2984 }
2985 if (($filtersettings{'ENABLE_LOG'} eq 'on') && ($tc[14] eq 'block') && ($tc[13] eq 'any'))
2986 {
2987 if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on')
2988 {
2989 print FILE " logfile ".$ident." timeconst.log\n";
2990 } else {
2991 print FILE " logfile ".$ident." urlfilter.log\n";
2992 }
2993 }
10e4f239
MT
2994 print FILE "}\n\n";
2995 }
2996 }
2997
2998 $idx=0;
2999 foreach (@tclist)
3000 {
3001 chomp;
3002 @tc = split(/\,/);
3003 if ($tc[15] eq 'on')
3004 {
3005 $idx++;
3006 print FILE "time constraint-$idx {\n";
3007 print FILE "$tc[16]\n";
3008 print FILE "}\n\n";
3009 }
3010 }
3011 }
3012
10e4f239 3013 foreach $category (@categories) {
1465b127
MT
3014 $blacklist = $category;
3015 $category =~ s/\//_/g;
9b7d98ff 3016 if ( $filtersettings{"FILTER_".uc($category)} ne "on" ){next;}
10e4f239 3017 print FILE "dest $category {\n";
1465b127
MT
3018 if (-e "$dbdir/$blacklist/domains") {
3019 print FILE " domainlist $blacklist\/domains\n";
10e4f239 3020 }
1465b127
MT
3021 if (-e "$dbdir/$blacklist/urls") {
3022 print FILE " urllist $blacklist\/urls\n";
10e4f239 3023 }
1465b127
MT
3024 if ((-e "$dbdir/$blacklist/expressions") && ($filtersettings{'ENABLE_EXPR_LISTS'} eq 'on')) {
3025 print FILE " expressionlist $blacklist\/expressions\n";
10e4f239 3026 }
1465b127 3027 if ((($category eq 'ads') || ($category eq 'adv')) && ($filtersettings{'ENABLE_EMPTY_ADS'} eq 'on'))
10e4f239 3028 {
1465b127 3029 print FILE " redirect http:\/\/$netsettings{'GREEN_ADDRESS'}:$http_port\/images/urlfilter/1x1.gif\n";
10e4f239
MT
3030 }
3031 if ($filtersettings{'ENABLE_LOG'} eq 'on')
3032 {
3033 if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on')
3034 {
3035 print FILE " logfile $ident $category.log\n";
3036 } else {
3037 print FILE " logfile $ident urlfilter.log\n";
3038 }
3039 }
3040 print FILE "}\n\n";
1465b127 3041 $category = $blacklist;
10e4f239
MT
3042 }
3043
3044 print FILE "dest files {\n";
3045 print FILE " expressionlist custom\/blocked\/files\n";
3046 if ($filtersettings{'ENABLE_LOG'} eq 'on')
3047 {
3048 if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on')
3049 {
3050 print FILE " logfile $ident files.log\n";
3051 } else {
3052 print FILE " logfile $ident urlfilter.log\n";
3053 }
3054 }
3055 print FILE "}\n\n";
3056
3057 print FILE "dest custom-allowed {\n";
3058 print FILE " domainlist custom\/allowed\/domains\n";
3059 print FILE " urllist custom\/allowed\/urls\n";
3060 print FILE "}\n\n";
3061
3062 print FILE "dest custom-blocked {\n";
3063 print FILE " domainlist custom\/blocked\/domains\n";
3064 print FILE " urllist custom\/blocked\/urls\n";
3065 if ($filtersettings{'ENABLE_LOG'} eq 'on')
3066 {
3067 if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on')
3068 {
3069 print FILE " logfile $ident custom.log\n";
3070 } else {
3071 print FILE " logfile $ident urlfilter.log\n";
3072 }
3073 }
3074 print FILE "}\n\n";
3075
3076 print FILE "dest custom-expressions {\n";
3077 print FILE " expressionlist custom\/blocked\/expressions\n";
3078 if ($filtersettings{'ENABLE_LOG'} eq 'on')
3079 {
3080 if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on')
3081 {
3082 print FILE " logfile $ident custom.log\n";
3083 } else {
3084 print FILE " logfile $ident urlfilter.log\n";
3085 }
3086 }
3087 print FILE "}\n\n";
3088
3089 print FILE "acl {\n";
3090 if (!($filtersettings{'UNFILTERED_CLIENTS'} eq '')) {
3091 print FILE " unfiltered {\n";
3092 print FILE " pass all\n";
3093 if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')
3094 {
1465b127 3095 print FILE " rewrite rew-rule-2\n";
10e4f239
MT
3096 }
3097 print FILE " }\n\n";
3098 }
3099 if (!($filtersettings{'BANNED_CLIENTS'} eq '')) {
3100 print FILE " banned {\n";
3101 print FILE " pass ";
3102 if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on'))
3103 {
3104 print FILE "custom-allowed ";
3105 }
3106 print FILE "none\n";
3107 print FILE " }\n\n";
3108 }
3109
3110 if (-s $uqfile)
3111 {
3112 open(UQ, $uqfile);
3113 @uqlist = <UQ>;
3114 close(UQ);
3115
3116 $idx=0;
3117 foreach (@uqlist)
3118 {
3119 chomp;
3120 @uq = split(/\,/);
3121 if ($uq[4] eq 'on')
3122 {
3123 $idx++;
3124 $qredirect = $redirect;
3125 $qredirect =~ s/\%t/\%q\%20-\%20\%i/;
3126 print FILE " quota-$idx {\n";
3127 print FILE " pass ";
3128 if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on'))
3129 {
3130 print FILE "custom-allowed ";
3131 }
3132 print FILE "none\n";
3133 unless ($redirect eq $qredirect) { print FILE " redirect $qredirect\n"; }
3134 print FILE " }\n\n";
3135 }
3136 }
3137 }
3138
3139 if (@tclist > 0)
3140 {
3141 $idx=0;
3142 foreach (@tclist)
3143 {
3144 chomp;
3145 @tc = split(/\,/);
3146 @ec = split(/\|/,$tc[13]);
1465b127 3147 foreach (@ec) { s/\//_/g; }
10e4f239
MT
3148 if ($tc[15] eq 'on')
3149 {
3150 $idx++;
3151 print FILE " network-$idx $tc[0] constraint-$idx {\n";
3152 print FILE " pass ";
3153
3154 if ($filtersettings{'BLOCK_ALL'} eq 'on')
3155 {
3156 if ($tc[14] eq 'block')
3157 {
3158 if ((@ec == 1) && ($ec[0] eq 'any')) {
3159 if (($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'on'))
3160 {
3161 print FILE "custom-allowed ";
3162 }
3163 print FILE "none";
3164 } else {
3165 print FILE $defaultrule;
3166 }
3167 } else {
3168 foreach (@ec)
3169 {
3170 print FILE "$_ ";
3171 }
3172 print FILE $defaultrule unless ((@ec == 1) && ($ec[0] eq 'any'));
3173 }
3174 } else {
3175 if ($tc[14] eq 'block')
3176 {
3177 $tcrule = $defaultrule;
3178 if ($filtersettings{'ENABLE_CUSTOM_WHITELIST'} eq 'on') {
3179 $tcrule =~ s/custom-allowed //;
3180 print FILE "custom-allowed " unless ((@ec == 1) && ($ec[0] eq 'any') && ($filtersettings{'ENABLE_GLOBAL_WHITELIST'} eq 'off'));
3181 }
3182 if ((@ec == 1) && ($ec[0] eq 'any')) {
3183 print FILE "none";
3184 } else {
3185 foreach (@ec)
3186 {
3187 print FILE "!$_ " unless (index($defaultrule,"!".$_." ") ge 0);
3188 }
3189 }
3190 print FILE $tcrule unless ((@ec == 1) && ($ec[0] eq 'any'));
3191 } else {
3192 $tcrule = $defaultrule;
1465b127 3193 if ((@ec == 1) && ($ec[0] eq 'any'))
10e4f239 3194 {
1465b127
MT
3195 print FILE "any";
3196 } else {
3197 foreach (@ec)
3198 {
3199 $tcrule = "$_ ".$tcrule unless (index($defaultrule,"!".$_." ") ge 0);
3200 $tcrule =~ s/!$_ //;
3201 }
3202 print FILE $tcrule;
10e4f239 3203 }
10e4f239
MT
3204 }
3205 }
3206
3207 print FILE "\n";
3208
3209 print FILE " }\n\n";
3210 }
3211 }
3212 }
3213
3214 print FILE " default {\n";
3215 print FILE " pass $defaultrule\n";
3216 if (($filtersettings{'ENABLE_LOG'} eq 'on') && ($filtersettings{'BLOCK_ALL'} eq 'on'))
3217 {
3218 if ($filtersettings{'ENABLE_CATEGORY_LOG'} eq 'on')
3219 {
3220 print FILE " logfile".$ident." default.log\n";
3221 } else {
3222 print FILE " logfile".$ident." urlfilter.log\n";
3223 }
3224 }
3225 if ((($filtersettings{'ENABLE_REWRITE'} eq 'on') && (@repositoryfiles)) || ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on'))
3226 {
1465b127 3227 print FILE " rewrite rew-rule-1\n";
10e4f239
MT
3228 }
3229 print FILE " redirect $redirect\n";
3230 print FILE " }\n";
3231 print FILE "}\n";
3232
3233 close FILE;
3234}
3235
3236# -------------------------------------------------------------------