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