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