]>
git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - html/cgi-bin/logs.cgi/urlfilter.dat
5 # This code is distributed under the terms of the GPL
7 # (c) The SmoothWall Team
9 # $Id: urlfilter.dat,v 1.4 2005/05/15 00:00:00 marco Exp $
14 # enable only the following on debugging purpose
16 #use CGI::Carp 'fatalsToBrowser';
20 require '/var/ipfire/general-functions.pl';
21 require "${General::swroot}/lang.pl";
22 require "${General::swroot}/header.pl";
24 my $dbdir = "${General::swroot}/urlfilter/blacklists";
25 my $logdir = "/var/log/squidGuard";
29 my %filtersettings=();
70 my @shortmonths = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
71 'Sep', 'Oct', 'Nov', 'Dec' );
72 my @longmonths = ( $Lang::tr
{'january'}, $Lang::tr
{'february'}, $Lang::tr
{'march'},
73 $Lang::tr
{'april'}, $Lang::tr
{'may'}, $Lang::tr
{'june'}, $Lang::tr
{'july'}, $Lang::tr
{'august'},
74 $Lang::tr
{'september'}, $Lang::tr
{'october'}, $Lang::tr
{'november'},
75 $Lang::tr
{'december'} );
77 my @now = localtime(time);
80 my $year = $now[5]+1900;
82 $cgiparams{'DAY'} = $now[3];
83 $cgiparams{'MONTH'} = $now[4];
84 $cgiparams{'LOGTYPE'} = 'urlfilter';
86 &Header
::getcgihash
(\
%cgiparams);
87 $logsettings{'LOGVIEW_REVERSE'} = 'off';
88 &General
::readhash
("${General::swroot}/logging/settings", \
%logsettings);
89 if (-e
"${General::swroot}/urlfilter/settings")
91 &General
::readhash
("${General::swroot}/urlfilter/settings", \
%filtersettings);
94 $now[4] = $cgiparams{'MONTH'}+1;
96 $now[4] = "0$now[4]"; }
100 if ($ENV{'QUERY_STRING'} && $cgiparams{'ACTION'} ne $Lang::tr
{'update'})
102 @temp = split(',',$ ENV
{'QUERY_STRING'});
104 $cgiparams{'MONTH'} = $temp[1];
105 $cgiparams{'DAY'} = $temp[2];
106 $cgiparams{'LOGTYPE'} = $temp[3];
109 if (!($cgiparams{'MONTH'} =~ /^(0|1|2|3|4|5|6|7|8|9|10|11)$/) ||
110 !($cgiparams{'DAY'} =~ /^(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/))
112 $cgiparams{'DAY'} = $now[3];
113 $cgiparams{'MONTH'} = $now[4];
115 elsif($cgiparams{'ACTION'} eq '>>')
117 @temp_now = localtime(time);
118 $temp_now[4] = $cgiparams{'MONTH'};
119 $temp_now[3] = $cgiparams{'DAY'};
120 @temp_then = localtime(POSIX
::mktime
(@temp_now) + 86400);
121 ## Retrieve the same time on the next day -
122 ## 86400 seconds in a day
123 $cgiparams{'MONTH'} = $temp_then[4];
124 $cgiparams{'DAY'} = $temp_then[3];
126 elsif($cgiparams{'ACTION'} eq '<<')
128 @temp_now = localtime(time);
129 $temp_now[4] = $cgiparams{'MONTH'};
130 $temp_now[3] = $cgiparams{'DAY'};
131 @temp_then = localtime(POSIX
::mktime
(@temp_now) - 86400);
132 ## Retrieve the same time on the previous day -
133 ## 86400 seconds in a day
134 $cgiparams{'MONTH'} = $temp_then[4];
135 $cgiparams{'DAY'} = $temp_then[3];
138 $monthstr = $shortmonths[$cgiparams{'MONTH'}];
139 $longmonthstr = $longmonths[$cgiparams{'MONTH'}];
141 if (($cgiparams{'DAY'} ne $now[3]) || ($cgiparams{'MONTH'} ne $now[4]))
144 if ( ( $cgiparams{'MONTH'} eq $now[4]) && ($cgiparams{'DAY'} > $now[3]) ||
145 ( $cgiparams{'MONTH'} > $now[4] ) ) {
146 @then = localtime(POSIX
::mktime
( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1901 ));
148 @then = localtime(POSIX
::mktime
( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1900 ));
151 $lastleap=($year-1)%4;
153 if ($lastleap == 0 && $tdoy < 60) {
161 $day = $cgiparams{'DAY'};
173 if ($cgiparams{'ACTION'} eq $Lang::tr
{'export'})
175 print "Content-type: text/plain\n\n";
176 print "IPCop URL filter log\r\n";
177 print "Section: $cgiparams{'LOGTYPE'}\r\n";
178 print "Date: $daystr $longmonthstr\r\n";
181 if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @log = reverse @log; }
185 ($date,$time,$pid,@loginfo) = split(/ /);
186 @ip = split(/\//,$loginfo[2]);
187 @category = split(/\//,$loginfo[0]);
188 $dsturl = $loginfo[1];
189 $loginfo[3] =~ s/\%5c/\\/;
192 if ($cgiparams{'LOGTYPE'} eq 'squidGuard')
197 print "$category[1] ";
199 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "$loginfo[3] "; }
208 &Header
::showhttpheaders
();
210 &Header
::openpage
($Lang::tr
{'urlfilter log viewer'}, 1, '');
212 &Header
::openbigbox
('100%', 'left', '', $errormessage);
215 &Header
::openbox
('100%', 'left', $Lang::tr
{'error messages'});
216 print "<font class='base'>$errormessage </font>\n";
220 &Header
::openbox
('100%', 'left', "$Lang::tr{'settings'}:");
222 $selected{'LOGTYPE'}{$cgiparams{'LOGTYPE'}} = "selected='selected'";
225 <form method='post' action="$ENV{'SCRIPT_NAME'}">
228 <td width='8%' class='base'>$Lang::tr{'section'}</td>
229 <td width='15%' class='base'>
230 <select name='LOGTYPE' size='1'>
231 <option value='urlfilter' $selected{'LOGTYPE'}{'urlfilter'} = "selected='selected'">$Lang::tr{'urlfilter url filter'}</option>
232 <option value='squidGuard' $selected{'LOGTYPE'}{'squidGuard'} = "selected='selected'">squidGuard</option>
236 <td width='8%' class='base'>$Lang::tr{'month'}:</td>
238 <select name='MONTH'>
241 for ($month = 0; $month < 12; $month++)
244 if ($month == $cgiparams{'MONTH'}) {
245 print 'selected="selected" '; }
246 print "value='$month'>$longmonths[$month]</option>\n";
251 <td width='8%' class='base'>$Lang::tr{'day'}:</td>
256 for ($day = 1; $day <= 31; $day++)
259 if ($day == $cgiparams{'DAY'}) {
260 print 'selected="selected" '; }
261 print "value='$day'>$day</option>\n";
266 <td width='5%' align='center'><input type='submit' name='ACTION' title='$Lang::tr{'day before'}' value='<<' /></td>
267 <td width='5%' align='center'><input type='submit' name='ACTION' title='$Lang::tr{'day after'}' value='>>' /></td>
268 <td width='10%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'update'}' /></td>
269 <td width='10%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'export'}' /></td>
278 &Header
::openbox
('100%', 'left', $Lang::tr
{'log'});
282 if ($start == -1) { $start = $lines - $Header::viewsize
; }
283 if ($start >= $lines - $Header::viewsize
) { $start = $lines - $Header::viewsize
; };
284 if ($start < 0) { $start = 0; }
286 $prev = $start - $Header::viewsize
;
287 $next = $start + $Header::viewsize
;
289 if ($prev < 0) { $prev = 0; }
290 if ($next >= $lines) { $next = -1 }
291 if ($start == 0) { $prev = -1; }
293 if ($cgiparams{'LOGTYPE'} eq 'urlfilter')
295 print "<b>$Lang::tr{'urlfilter log summary'} $longmonthstr $daystr: $lines</b><p>\n";
298 @slice = splice(@log, $start, $Header::viewsize
);
300 if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @slice = reverse @slice; }
307 print "<table width='100%'>\n";
308 unless ($cgiparams{'LOGTYPE'} eq 'squidGuard')
311 print "<td align='center'><b>$Lang::tr{'urlfilter time'}</b></td>\n";
312 print "<td align='center'><b>$Lang::tr{'urlfilter category'}</b></td>\n";
313 print "<td align='center'><b>$Lang::tr{'urlfilter client'}</b></td>\n";
314 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "<td align='center'><b>$Lang::tr{'urlfilter username'}</b></td>\n"; }
315 print "<td align='center'><b>$Lang::tr{'urlfilter dst'}</b></td>\n";
321 undef $attr1; undef $attr2;
323 ($date,$time,$pid,@loginfo) = split(/ /);
324 @ip = split(/\//,$loginfo[2]);
325 @category = split(/\//,$loginfo[0]);
326 $dsturl = $loginfo[1];
327 $loginfo[3] =~ s/\%5c/\\/;
328 if ($cgiparams{'LOGTYPE'} eq 'squidGuard') {
329 if (@loginfo[0] =~ /squidGuard/) { $attr1 .= "<b>"; $attr2 .= "</b>"; }
330 if (@loginfo[1] =~ /ready/) { $attr1 .= "<b><font color='$Header::colourgreen'>"; $attr2 .= "</font></b>"; }
331 if (@loginfo[2] =~ /emergency/) { $attr1 .= "<b><font color='$Header::colourerr'>"; $attr2 .= "</font></b>"; }
334 if ($lines % 2) { print "<tr bgcolor='$Header::table1colour'>\n"; } else { print "<tr bgcolor='$Header::table2colour'>\n"; }
336 if ($cgiparams{'LOGTYPE'} eq 'squidGuard') {
337 print "<td nowrap>$time $pid $attr1@loginfo$attr2</td>\n";
339 print "<td width='10%' align='center' nowrap>$time</td>\n";
340 print "<td width='11%' align='center' nowrap>$category[1]</td>\n";
341 print "<td width='15%' align='center' nowrap>$ip[0]</td>\n";
342 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on')
344 print "<td width='12%' align='center' nowrap>$loginfo[3]</td>\n";
345 $site = substr($dsturl,0,55);
346 if (length($dsturl) > 55) { $site .= "..."; }
348 $site = substr($dsturl,0,69);
349 if (length($dsturl) > 69) { $site .= "..."; }
351 #print "<td>$site</td>\n";
352 print "<td><a href='$dsturl' title='$dsturl' target='_blank'>$site</a></td>\n";
357 print "</table><br>\n";
365 &Header
::closebigbox
();
367 &Header
::closepage
();
369 # -------------------------------------------------------------------
376 if ($cgiparams{'LOGTYPE'} eq 'squidGuard')
378 $filestr = "$logdir/squidGuard.log";
379 foreach $logarch (<$filestr.*.gz
>)
381 open (LOG
,"gzip -dc $logarch |");
383 ($date,$time,$pid,@loginfo) = split(/ /);
384 ($logyear,$logmonth,$logday) = split(/-/,$date);
385 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
391 ($date,$time,$pid,@loginfo) = split(/ /);
392 ($logyear,$logmonth,$logday) = split(/-/,$date);
393 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
397 foreach $logarch (<$logdir/*.gz
>)
399 if ($logarch !~ /squidGuard\.log/) {
400 open (LOG
,"gzip -dc $logarch |");
402 ($date,$time,$pid,@loginfo) = split(/ /);
403 ($logyear,$logmonth,$logday) = split(/-/,$date);
404 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
409 foreach $filestr (<$logdir/*.log>)
411 if ($filestr !~ /squidGuard\.log/) {
414 ($date,$time,$pid,@loginfo) = split(/ /);
415 ($logyear,$logmonth,$logday) = split(/-/,$date);
416 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
421 @log = sort { substr($a,11,8) cmp substr($b,11,8) } @log;
426 # -------------------------------------------------------------------
430 print "<table width='100%'>";
433 print "<td align='center' width='50%'>";
435 print "<a href='$ENV{'SCRIPT_NAME'}?$prev,$cgiparams{'MONTH'},$cgiparams{'DAY'},$cgiparams{'LOGTYPE'}'>$Lang::tr{'older'}</a>"; }
437 print "$Lang::tr{'older'}"; }
440 print "<td align='center' width='50%'>";
442 print "<a href='$ENV{'SCRIPT_NAME'}?$next,$cgiparams{'MONTH'},$cgiparams{'DAY'},$cgiparams{'LOGTYPE'}'>$Lang::tr{'newer'}</a>"; }
444 print "$Lang::tr{'newer'}"; }
451 # -------------------------------------------------------------------
456 # This code is distributed under the terms of the GPL
458 # (c) The SmoothWall Team
460 # $Id: urlfilter.dat,v 1.4 2005/05/15 00:00:00 marco Exp $
465 # enable only the following on debugging purpose
467 #use CGI::Carp 'fatalsToBrowser';
471 require '/var/ipfire/general-functions.pl';
472 require "${General::swroot}/lang.pl";
473 require "${General::swroot}/header.pl";
475 my $dbdir = "${General::swroot}/urlfilter/blacklists";
476 my $logdir = "/var/log/squidGuard";
480 my %filtersettings=();
521 my @shortmonths = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
522 'Sep', 'Oct', 'Nov', 'Dec' );
523 my @longmonths = ( $Lang::tr
{'january'}, $Lang::tr
{'february'}, $Lang::tr
{'march'},
524 $Lang::tr
{'april'}, $Lang::tr
{'may'}, $Lang::tr
{'june'}, $Lang::tr
{'july'}, $Lang::tr
{'august'},
525 $Lang::tr
{'september'}, $Lang::tr
{'october'}, $Lang::tr
{'november'},
526 $Lang::tr
{'december'} );
528 my @now = localtime(time);
531 my $year = $now[5]+1900;
533 $cgiparams{'DAY'} = $now[3];
534 $cgiparams{'MONTH'} = $now[4];
535 $cgiparams{'LOGTYPE'} = 'urlfilter';
537 &Header
::getcgihash
(\
%cgiparams);
538 $logsettings{'LOGVIEW_REVERSE'} = 'off';
539 &General
::readhash
("${General::swroot}/logging/settings", \
%logsettings);
540 if (-e
"${General::swroot}/urlfilter/settings")
542 &General
::readhash
("${General::swroot}/urlfilter/settings", \
%filtersettings);
545 $now[4] = $cgiparams{'MONTH'}+1;
547 $now[4] = "0$now[4]"; }
551 if ($ENV{'QUERY_STRING'} && $cgiparams{'ACTION'} ne $Lang::tr
{'update'})
553 @temp = split(',',$ ENV
{'QUERY_STRING'});
555 $cgiparams{'MONTH'} = $temp[1];
556 $cgiparams{'DAY'} = $temp[2];
557 $cgiparams{'LOGTYPE'} = $temp[3];
560 if (!($cgiparams{'MONTH'} =~ /^(0|1|2|3|4|5|6|7|8|9|10|11)$/) ||
561 !($cgiparams{'DAY'} =~ /^(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/))
563 $cgiparams{'DAY'} = $now[3];
564 $cgiparams{'MONTH'} = $now[4];
566 elsif($cgiparams{'ACTION'} eq '>>')
568 @temp_now = localtime(time);
569 $temp_now[4] = $cgiparams{'MONTH'};
570 $temp_now[3] = $cgiparams{'DAY'};
571 @temp_then = localtime(POSIX
::mktime
(@temp_now) + 86400);
572 ## Retrieve the same time on the next day -
573 ## 86400 seconds in a day
574 $cgiparams{'MONTH'} = $temp_then[4];
575 $cgiparams{'DAY'} = $temp_then[3];
577 elsif($cgiparams{'ACTION'} eq '<<')
579 @temp_now = localtime(time);
580 $temp_now[4] = $cgiparams{'MONTH'};
581 $temp_now[3] = $cgiparams{'DAY'};
582 @temp_then = localtime(POSIX
::mktime
(@temp_now) - 86400);
583 ## Retrieve the same time on the previous day -
584 ## 86400 seconds in a day
585 $cgiparams{'MONTH'} = $temp_then[4];
586 $cgiparams{'DAY'} = $temp_then[3];
589 $monthstr = $shortmonths[$cgiparams{'MONTH'}];
590 $longmonthstr = $longmonths[$cgiparams{'MONTH'}];
592 if (($cgiparams{'DAY'} ne $now[3]) || ($cgiparams{'MONTH'} ne $now[4]))
595 if ( ( $cgiparams{'MONTH'} eq $now[4]) && ($cgiparams{'DAY'} > $now[3]) ||
596 ( $cgiparams{'MONTH'} > $now[4] ) ) {
597 @then = localtime(POSIX
::mktime
( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1901 ));
599 @then = localtime(POSIX
::mktime
( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1900 ));
602 $lastleap=($year-1)%4;
604 if ($lastleap == 0 && $tdoy < 60) {
612 $day = $cgiparams{'DAY'};
624 if ($cgiparams{'ACTION'} eq $Lang::tr
{'export'})
626 print "Content-type: text/plain\n\n";
627 print "IPCop URL filter log\r\n";
628 print "Section: $cgiparams{'LOGTYPE'}\r\n";
629 print "Date: $daystr $longmonthstr\r\n";
632 if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @log = reverse @log; }
636 ($date,$time,$pid,@loginfo) = split(/ /);
637 @ip = split(/\//,$loginfo[2]);
638 @category = split(/\//,$loginfo[0]);
639 $dsturl = $loginfo[1];
640 $loginfo[3] =~ s/\%5c/\\/;
643 if ($cgiparams{'LOGTYPE'} eq 'squidGuard')
648 print "$category[1] ";
650 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "$loginfo[3] "; }
659 &Header
::showhttpheaders
();
661 &Header
::openpage
($Lang::tr
{'urlfilter log viewer'}, 1, '');
663 &Header
::openbigbox
('100%', 'left', '', $errormessage);
666 &Header
::openbox
('100%', 'left', $Lang::tr
{'error messages'});
667 print "<font class='base'>$errormessage </font>\n";
671 &Header
::openbox
('100%', 'left', "$Lang::tr{'settings'}:");
673 $selected{'LOGTYPE'}{$cgiparams{'LOGTYPE'}} = "selected='selected'";
676 <form method='post' action="$ENV{'SCRIPT_NAME'}">
679 <td width='8%' class='base'>$Lang::tr{'section'}</td>
680 <td width='15%' class='base'>
681 <select name='LOGTYPE' size='1'>
682 <option value='urlfilter' $selected{'LOGTYPE'}{'urlfilter'} = "selected='selected'">$Lang::tr{'urlfilter url filter'}</option>
683 <option value='squidGuard' $selected{'LOGTYPE'}{'squidGuard'} = "selected='selected'">squidGuard</option>
687 <td width='8%' class='base'>$Lang::tr{'month'}:</td>
689 <select name='MONTH'>
692 for ($month = 0; $month < 12; $month++)
695 if ($month == $cgiparams{'MONTH'}) {
696 print 'selected="selected" '; }
697 print "value='$month'>$longmonths[$month]</option>\n";
702 <td width='8%' class='base'>$Lang::tr{'day'}:</td>
707 for ($day = 1; $day <= 31; $day++)
710 if ($day == $cgiparams{'DAY'}) {
711 print 'selected="selected" '; }
712 print "value='$day'>$day</option>\n";
717 <td width='5%' align='center'><input type='submit' name='ACTION' title='$Lang::tr{'day before'}' value='<<' /></td>
718 <td width='5%' align='center'><input type='submit' name='ACTION' title='$Lang::tr{'day after'}' value='>>' /></td>
719 <td width='10%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'update'}' /></td>
720 <td width='10%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'export'}' /></td>
729 &Header
::openbox
('100%', 'left', $Lang::tr
{'log'});
733 if ($start == -1) { $start = $lines - $Header::viewsize
; }
734 if ($start >= $lines - $Header::viewsize
) { $start = $lines - $Header::viewsize
; };
735 if ($start < 0) { $start = 0; }
737 $prev = $start - $Header::viewsize
;
738 $next = $start + $Header::viewsize
;
740 if ($prev < 0) { $prev = 0; }
741 if ($next >= $lines) { $next = -1 }
742 if ($start == 0) { $prev = -1; }
744 if ($cgiparams{'LOGTYPE'} eq 'urlfilter')
746 print "<b>$Lang::tr{'urlfilter log summary'} $longmonthstr $daystr: $lines</b><p>\n";
749 @slice = splice(@log, $start, $Header::viewsize
);
751 if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @slice = reverse @slice; }
758 print "<table width='100%'>\n";
759 unless ($cgiparams{'LOGTYPE'} eq 'squidGuard')
762 print "<td align='center'><b>$Lang::tr{'urlfilter time'}</b></td>\n";
763 print "<td align='center'><b>$Lang::tr{'urlfilter category'}</b></td>\n";
764 print "<td align='center'><b>$Lang::tr{'urlfilter client'}</b></td>\n";
765 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "<td align='center'><b>$Lang::tr{'urlfilter username'}</b></td>\n"; }
766 print "<td align='center'><b>$Lang::tr{'urlfilter dst'}</b></td>\n";
772 undef $attr1; undef $attr2;
774 ($date,$time,$pid,@loginfo) = split(/ /);
775 @ip = split(/\//,$loginfo[2]);
776 @category = split(/\//,$loginfo[0]);
777 $dsturl = $loginfo[1];
778 $loginfo[3] =~ s/\%5c/\\/;
779 if ($cgiparams{'LOGTYPE'} eq 'squidGuard') {
780 if (@loginfo[0] =~ /squidGuard/) { $attr1 .= "<b>"; $attr2 .= "</b>"; }
781 if (@loginfo[1] =~ /ready/) { $attr1 .= "<b><font color='$Header::colourgreen'>"; $attr2 .= "</font></b>"; }
782 if (@loginfo[2] =~ /emergency/) { $attr1 .= "<b><font color='$Header::colourerr'>"; $attr2 .= "</font></b>"; }
785 if ($lines % 2) { print "<tr bgcolor='$Header::table1colour'>\n"; } else { print "<tr bgcolor='$Header::table2colour'>\n"; }
787 if ($cgiparams{'LOGTYPE'} eq 'squidGuard') {
788 print "<td nowrap>$time $pid $attr1@loginfo$attr2</td>\n";
790 print "<td width='10%' align='center' nowrap>$time</td>\n";
791 print "<td width='11%' align='center' nowrap>$category[1]</td>\n";
792 print "<td width='15%' align='center' nowrap>$ip[0]</td>\n";
793 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on')
795 print "<td width='12%' align='center' nowrap>$loginfo[3]</td>\n";
796 $site = substr($dsturl,0,55);
797 if (length($dsturl) > 55) { $site .= "..."; }
799 $site = substr($dsturl,0,69);
800 if (length($dsturl) > 69) { $site .= "..."; }
802 #print "<td>$site</td>\n";
803 print "<td><a href='$dsturl' title='$dsturl' target='_blank'>$site</a></td>\n";
808 print "</table><br>\n";
816 &Header
::closebigbox
();
818 &Header
::closepage
();
820 # -------------------------------------------------------------------
827 if ($cgiparams{'LOGTYPE'} eq 'squidGuard')
829 $filestr = "$logdir/squidGuard.log";
830 foreach $logarch (<$filestr.*.gz
>)
832 open (LOG
,"gzip -dc $logarch |");
834 ($date,$time,$pid,@loginfo) = split(/ /);
835 ($logyear,$logmonth,$logday) = split(/-/,$date);
836 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
842 ($date,$time,$pid,@loginfo) = split(/ /);
843 ($logyear,$logmonth,$logday) = split(/-/,$date);
844 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
848 foreach $logarch (<$logdir/*.gz
>)
850 if ($logarch !~ /squidGuard\.log/) {
851 open (LOG
,"gzip -dc $logarch |");
853 ($date,$time,$pid,@loginfo) = split(/ /);
854 ($logyear,$logmonth,$logday) = split(/-/,$date);
855 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
860 foreach $filestr (<$logdir/*.log>)
862 if ($filestr !~ /squidGuard\.log/) {
865 ($date,$time,$pid,@loginfo) = split(/ /);
866 ($logyear,$logmonth,$logday) = split(/-/,$date);
867 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
872 @log = sort { substr($a,11,8) cmp substr($b,11,8) } @log;
877 # -------------------------------------------------------------------
881 print "<table width='100%'>";
884 print "<td align='center' width='50%'>";
886 print "<a href='$ENV{'SCRIPT_NAME'}?$prev,$cgiparams{'MONTH'},$cgiparams{'DAY'},$cgiparams{'LOGTYPE'}'>$Lang::tr{'older'}</a>"; }
888 print "$Lang::tr{'older'}"; }
891 print "<td align='center' width='50%'>";
893 print "<a href='$ENV{'SCRIPT_NAME'}?$next,$cgiparams{'MONTH'},$cgiparams{'DAY'},$cgiparams{'LOGTYPE'}'>$Lang::tr{'newer'}</a>"; }
895 print "$Lang::tr{'newer'}"; }
902 # -------------------------------------------------------------------
907 # This code is distributed under the terms of the GPL
909 # (c) The SmoothWall Team
911 # $Id: urlfilter.dat,v 1.4 2005/05/15 00:00:00 marco Exp $
916 # enable only the following on debugging purpose
918 #use CGI::Carp 'fatalsToBrowser';
922 require '/var/ipfire/general-functions.pl';
923 require "${General::swroot}/lang.pl";
924 require "${General::swroot}/header.pl";
926 my $dbdir = "${General::swroot}/urlfilter/blacklists";
927 my $logdir = "/var/log/squidGuard";
931 my %filtersettings=();
972 my @shortmonths = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
973 'Sep', 'Oct', 'Nov', 'Dec' );
974 my @longmonths = ( $Lang::tr
{'january'}, $Lang::tr
{'february'}, $Lang::tr
{'march'},
975 $Lang::tr
{'april'}, $Lang::tr
{'may'}, $Lang::tr
{'june'}, $Lang::tr
{'july'}, $Lang::tr
{'august'},
976 $Lang::tr
{'september'}, $Lang::tr
{'october'}, $Lang::tr
{'november'},
977 $Lang::tr
{'december'} );
979 my @now = localtime(time);
982 my $year = $now[5]+1900;
984 $cgiparams{'DAY'} = $now[3];
985 $cgiparams{'MONTH'} = $now[4];
986 $cgiparams{'LOGTYPE'} = 'urlfilter';
988 &Header
::getcgihash
(\
%cgiparams);
989 $logsettings{'LOGVIEW_REVERSE'} = 'off';
990 &General
::readhash
("${General::swroot}/logging/settings", \
%logsettings);
991 if (-e
"${General::swroot}/urlfilter/settings")
993 &General
::readhash
("${General::swroot}/urlfilter/settings", \
%filtersettings);
996 $now[4] = $cgiparams{'MONTH'}+1;
998 $now[4] = "0$now[4]"; }
1002 if ($ENV{'QUERY_STRING'} && $cgiparams{'ACTION'} ne $Lang::tr
{'update'})
1004 @temp = split(',',$ ENV
{'QUERY_STRING'});
1006 $cgiparams{'MONTH'} = $temp[1];
1007 $cgiparams{'DAY'} = $temp[2];
1008 $cgiparams{'LOGTYPE'} = $temp[3];
1011 if (!($cgiparams{'MONTH'} =~ /^(0|1|2|3|4|5|6|7|8|9|10|11)$/) ||
1012 !($cgiparams{'DAY'} =~ /^(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)$/))
1014 $cgiparams{'DAY'} = $now[3];
1015 $cgiparams{'MONTH'} = $now[4];
1017 elsif($cgiparams{'ACTION'} eq '>>')
1019 @temp_now = localtime(time);
1020 $temp_now[4] = $cgiparams{'MONTH'};
1021 $temp_now[3] = $cgiparams{'DAY'};
1022 @temp_then = localtime(POSIX
::mktime
(@temp_now) + 86400);
1023 ## Retrieve the same time on the next day -
1024 ## 86400 seconds in a day
1025 $cgiparams{'MONTH'} = $temp_then[4];
1026 $cgiparams{'DAY'} = $temp_then[3];
1028 elsif($cgiparams{'ACTION'} eq '<<')
1030 @temp_now = localtime(time);
1031 $temp_now[4] = $cgiparams{'MONTH'};
1032 $temp_now[3] = $cgiparams{'DAY'};
1033 @temp_then = localtime(POSIX
::mktime
(@temp_now) - 86400);
1034 ## Retrieve the same time on the previous day -
1035 ## 86400 seconds in a day
1036 $cgiparams{'MONTH'} = $temp_then[4];
1037 $cgiparams{'DAY'} = $temp_then[3];
1040 $monthstr = $shortmonths[$cgiparams{'MONTH'}];
1041 $longmonthstr = $longmonths[$cgiparams{'MONTH'}];
1043 if (($cgiparams{'DAY'} ne $now[3]) || ($cgiparams{'MONTH'} ne $now[4]))
1046 if ( ( $cgiparams{'MONTH'} eq $now[4]) && ($cgiparams{'DAY'} > $now[3]) ||
1047 ( $cgiparams{'MONTH'} > $now[4] ) ) {
1048 @then = localtime(POSIX
::mktime
( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1901 ));
1050 @then = localtime(POSIX
::mktime
( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1900 ));
1053 $lastleap=($year-1)%4;
1055 if ($lastleap == 0 && $tdoy < 60) {
1063 $day = $cgiparams{'DAY'};
1075 if ($cgiparams{'ACTION'} eq $Lang::tr
{'export'})
1077 print "Content-type: text/plain\n\n";
1078 print "IPCop URL filter log\r\n";
1079 print "Section: $cgiparams{'LOGTYPE'}\r\n";
1080 print "Date: $daystr $longmonthstr\r\n";
1083 if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @log = reverse @log; }
1087 ($date,$time,$pid,@loginfo) = split(/ /);
1088 @ip = split(/\//,$loginfo[2]);
1089 @category = split(/\//,$loginfo[0]);
1090 $dsturl = $loginfo[1];
1091 $loginfo[3] =~ s/\%5c/\\/;
1094 if ($cgiparams{'LOGTYPE'} eq 'squidGuard')
1099 print "$category[1] ";
1101 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "$loginfo[3] "; }
1110 &Header
::showhttpheaders
();
1112 &Header
::openpage
($Lang::tr
{'urlfilter log viewer'}, 1, '');
1114 &Header
::openbigbox
('100%', 'left', '', $errormessage);
1116 if ($errormessage) {
1117 &Header
::openbox
('100%', 'left', $Lang::tr
{'error messages'});
1118 print "<font class='base'>$errormessage </font>\n";
1119 &Header
::closebox
();
1122 &Header
::openbox
('100%', 'left', "$Lang::tr{'settings'}:");
1124 $selected{'LOGTYPE'}{$cgiparams{'LOGTYPE'}} = "selected='selected'";
1127 <form method='post' action="$ENV{'SCRIPT_NAME'}">
1128 <table width='100%'>
1130 <td width='8%' class='base'>$Lang::tr{'section'}</td>
1131 <td width='15%' class='base'>
1132 <select name='LOGTYPE' size='1'>
1133 <option value='urlfilter' $selected{'LOGTYPE'}{'urlfilter'} = "selected='selected'">$Lang::tr{'urlfilter url filter'}</option>
1134 <option value='squidGuard' $selected{'LOGTYPE'}{'squidGuard'} = "selected='selected'">squidGuard</option>
1138 <td width='8%' class='base'>$Lang::tr{'month'}:</td>
1140 <select name='MONTH'>
1143 for ($month = 0; $month < 12; $month++)
1146 if ($month == $cgiparams{'MONTH'}) {
1147 print 'selected="selected" '; }
1148 print "value='$month'>$longmonths[$month]</option>\n";
1153 <td width='8%' class='base'>$Lang::tr{'day'}:</td>
1158 for ($day = 1; $day <= 31; $day++)
1161 if ($day == $cgiparams{'DAY'}) {
1162 print 'selected="selected" '; }
1163 print "value='$day'>$day</option>\n";
1168 <td width='5%' align='center'><input type='submit' name='ACTION' title='$Lang::tr{'day before'}' value='<<' /></td>
1169 <td width='5%' align='center'><input type='submit' name='ACTION' title='$Lang::tr{'day after'}' value='>>' /></td>
1170 <td width='10%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'update'}' /></td>
1171 <td width='10%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'export'}' /></td>
1178 &Header
::closebox
();
1180 &Header
::openbox
('100%', 'left', $Lang::tr
{'log'});
1184 if ($start == -1) { $start = $lines - $Header::viewsize
; }
1185 if ($start >= $lines - $Header::viewsize
) { $start = $lines - $Header::viewsize
; };
1186 if ($start < 0) { $start = 0; }
1188 $prev = $start - $Header::viewsize
;
1189 $next = $start + $Header::viewsize
;
1191 if ($prev < 0) { $prev = 0; }
1192 if ($next >= $lines) { $next = -1 }
1193 if ($start == 0) { $prev = -1; }
1195 if ($cgiparams{'LOGTYPE'} eq 'urlfilter')
1197 print "<b>$Lang::tr{'urlfilter log summary'} $longmonthstr $daystr: $lines</b><p>\n";
1200 @slice = splice(@log, $start, $Header::viewsize
);
1202 if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @slice = reverse @slice; }
1209 print "<table width='100%'>\n";
1210 unless ($cgiparams{'LOGTYPE'} eq 'squidGuard')
1213 print "<td align='center'><b>$Lang::tr{'urlfilter time'}</b></td>\n";
1214 print "<td align='center'><b>$Lang::tr{'urlfilter category'}</b></td>\n";
1215 print "<td align='center'><b>$Lang::tr{'urlfilter client'}</b></td>\n";
1216 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "<td align='center'><b>$Lang::tr{'urlfilter username'}</b></td>\n"; }
1217 print "<td align='center'><b>$Lang::tr{'urlfilter dst'}</b></td>\n";
1223 undef $attr1; undef $attr2;
1225 ($date,$time,$pid,@loginfo) = split(/ /);
1226 @ip = split(/\//,$loginfo[2]);
1227 @category = split(/\//,$loginfo[0]);
1228 $dsturl = $loginfo[1];
1229 $loginfo[3] =~ s/\%5c/\\/;
1230 if ($cgiparams{'LOGTYPE'} eq 'squidGuard') {
1231 if (@loginfo[0] =~ /squidGuard/) { $attr1 .= "<b>"; $attr2 .= "</b>"; }
1232 if (@loginfo[1] =~ /ready/) { $attr1 .= "<b><font color='$Header::colourgreen'>"; $attr2 .= "</font></b>"; }
1233 if (@loginfo[2] =~ /emergency/) { $attr1 .= "<b><font color='$Header::colourerr'>"; $attr2 .= "</font></b>"; }
1236 if ($lines % 2) { print "<tr bgcolor='$Header::table1colour'>\n"; } else { print "<tr bgcolor='$Header::table2colour'>\n"; }
1238 if ($cgiparams{'LOGTYPE'} eq 'squidGuard') {
1239 print "<td nowrap>$time $pid $attr1@loginfo$attr2</td>\n";
1241 print "<td width='10%' align='center' nowrap>$time</td>\n";
1242 print "<td width='11%' align='center' nowrap>$category[1]</td>\n";
1243 print "<td width='15%' align='center' nowrap>$ip[0]</td>\n";
1244 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on')
1246 print "<td width='12%' align='center' nowrap>$loginfo[3]</td>\n";
1247 $site = substr($dsturl,0,55);
1248 if (length($dsturl) > 55) { $site .= "..."; }
1250 $site = substr($dsturl,0,69);
1251 if (length($dsturl) > 69) { $site .= "..."; }
1253 #print "<td>$site</td>\n";
1254 print "<td><a href='$dsturl' title='$dsturl' target='_blank'>$site</a></td>\n";
1259 print "</table><br>\n";
1265 &Header
::closebox
();
1267 &Header
::closebigbox
();
1269 &Header
::closepage
();
1271 # -------------------------------------------------------------------
1278 if ($cgiparams{'LOGTYPE'} eq 'squidGuard')
1280 $filestr = "$logdir/squidGuard.log";
1281 foreach $logarch (<$filestr.*.gz
>)
1283 open (LOG
,"gzip -dc $logarch |");
1285 ($date,$time,$pid,@loginfo) = split(/ /);
1286 ($logyear,$logmonth,$logday) = split(/-/,$date);
1287 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
1291 open (LOG
,$filestr);
1293 ($date,$time,$pid,@loginfo) = split(/ /);
1294 ($logyear,$logmonth,$logday) = split(/-/,$date);
1295 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
1299 foreach $logarch (<$logdir/*.gz
>)
1301 if ($logarch !~ /squidGuard\.log/) {
1302 open (LOG
,"gzip -dc $logarch |");
1304 ($date,$time,$pid,@loginfo) = split(/ /);
1305 ($logyear,$logmonth,$logday) = split(/-/,$date);
1306 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
1311 foreach $filestr (<$logdir/*.log>)
1313 if ($filestr !~ /squidGuard\.log/) {
1314 open (LOG
,$filestr);
1316 ($date,$time,$pid,@loginfo) = split(/ /);
1317 ($logyear,$logmonth,$logday) = split(/-/,$date);
1318 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
1323 @log = sort { substr($a,11,8) cmp substr($b,11,8) } @log;
1328 # -------------------------------------------------------------------
1332 print "<table width='100%'>";
1335 print "<td align='center' width='50%'>";
1337 print "<a href='$ENV{'SCRIPT_NAME'}?$prev,$cgiparams{'MONTH'},$cgiparams{'DAY'},$cgiparams{'LOGTYPE'}'>$Lang::tr{'older'}</a>"; }
1339 print "$Lang::tr{'older'}"; }
1342 print "<td align='center' width='50%'>";
1344 print "<a href='$ENV{'SCRIPT_NAME'}?$next,$cgiparams{'MONTH'},$cgiparams{'DAY'},$cgiparams{'LOGTYPE'}'>$Lang::tr{'newer'}</a>"; }
1346 print "$Lang::tr{'newer'}"; }
1353 # -------------------------------------------------------------------