]>
git.ipfire.org Git - 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";
25 my %mainsettings = ();
26 &General
::readhash
("${General::swroot}/main/settings", \
%mainsettings);
27 &General
::readhash
("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \
%color);
29 my $dbdir = "${General::swroot}/urlfilter/blacklists";
30 my $logdir = "/var/log/squidGuard";
34 my %filtersettings=();
75 my @shortmonths = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
76 'Sep', 'Oct', 'Nov', 'Dec' );
77 my @longmonths = ( $Lang::tr
{'january'}, $Lang::tr
{'february'}, $Lang::tr
{'march'},
78 $Lang::tr
{'april'}, $Lang::tr
{'may'}, $Lang::tr
{'june'}, $Lang::tr
{'july'}, $Lang::tr
{'august'},
79 $Lang::tr
{'september'}, $Lang::tr
{'october'}, $Lang::tr
{'november'},
80 $Lang::tr
{'december'} );
82 my @now = localtime(time);
85 my $year = $now[5]+1900;
87 $cgiparams{'DAY'} = $now[3];
88 $cgiparams{'MONTH'} = $now[4];
89 $cgiparams{'LOGTYPE'} = 'urlfilter';
91 &Header
::getcgihash
(\
%cgiparams);
92 $logsettings{'LOGVIEW_REVERSE'} = 'off';
93 &General
::readhash
("${General::swroot}/logging/settings", \
%logsettings);
94 if (-e
"${General::swroot}/urlfilter/settings")
96 &General
::readhash
("${General::swroot}/urlfilter/settings", \
%filtersettings);
99 $now[4] = $cgiparams{'MONTH'}+1;
101 $now[4] = "0$now[4]"; }
105 if ($ENV{'QUERY_STRING'} && $cgiparams{'ACTION'} ne $Lang::tr
{'update'})
107 @temp = split(',',$ ENV
{'QUERY_STRING'});
109 $cgiparams{'MONTH'} = $temp[1];
110 $cgiparams{'DAY'} = $temp[2];
111 $cgiparams{'LOGTYPE'} = $temp[3];
114 if (!($cgiparams{'MONTH'} =~ /^(0|1|2|3|4|5|6|7|8|9|10|11)$/) ||
115 !($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)$/))
117 $cgiparams{'DAY'} = $now[3];
118 $cgiparams{'MONTH'} = $now[4];
120 elsif($cgiparams{'ACTION'} eq '>>')
122 @temp_now = localtime(time);
123 $temp_now[4] = $cgiparams{'MONTH'};
124 $temp_now[3] = $cgiparams{'DAY'};
125 @temp_then = localtime(POSIX
::mktime
(@temp_now) + 86400);
126 ## Retrieve the same time on the next day -
127 ## 86400 seconds in a day
128 $cgiparams{'MONTH'} = $temp_then[4];
129 $cgiparams{'DAY'} = $temp_then[3];
131 elsif($cgiparams{'ACTION'} eq '<<')
133 @temp_now = localtime(time);
134 $temp_now[4] = $cgiparams{'MONTH'};
135 $temp_now[3] = $cgiparams{'DAY'};
136 @temp_then = localtime(POSIX
::mktime
(@temp_now) - 86400);
137 ## Retrieve the same time on the previous day -
138 ## 86400 seconds in a day
139 $cgiparams{'MONTH'} = $temp_then[4];
140 $cgiparams{'DAY'} = $temp_then[3];
143 $monthstr = $shortmonths[$cgiparams{'MONTH'}];
144 $longmonthstr = $longmonths[$cgiparams{'MONTH'}];
146 if (($cgiparams{'DAY'} ne $now[3]) || ($cgiparams{'MONTH'} ne $now[4]))
149 if ( ( $cgiparams{'MONTH'} eq $now[4]) && ($cgiparams{'DAY'} > $now[3]) ||
150 ( $cgiparams{'MONTH'} > $now[4] ) ) {
151 @then = localtime(POSIX
::mktime
( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1901 ));
153 @then = localtime(POSIX
::mktime
( 0, 0, 0, $cgiparams{'DAY'}, $cgiparams{'MONTH'}, $year - 1900 ));
156 $lastleap=($year-1)%4;
158 if ($lastleap == 0 && $tdoy < 60) {
166 $day = $cgiparams{'DAY'};
178 if ($cgiparams{'ACTION'} eq $Lang::tr
{'export'})
180 print "Content-type: text/plain\n\n";
181 print "IPCop URL filter log\r\n";
182 print "Section: $cgiparams{'LOGTYPE'}\r\n";
183 print "Date: $daystr $longmonthstr\r\n";
186 if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @log = reverse @log; }
190 ($date,$time,$pid,@loginfo) = split(/ /);
191 @ip = split(/\//,$loginfo[2]);
192 @category = split(/\//,$loginfo[0]);
193 $dsturl = $loginfo[1];
194 $loginfo[3] =~ s/\%5c/\\/;
197 if ($cgiparams{'LOGTYPE'} eq 'squidGuard')
202 print "$category[1] ";
204 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "$loginfo[3] "; }
213 &Header
::showhttpheaders
();
215 &Header
::openpage
($Lang::tr
{'urlfilter log viewer'}, 1, '');
217 &Header
::openbigbox
('100%', 'left', '', $errormessage);
220 &Header
::openbox
('100%', 'left', $Lang::tr
{'error messages'});
221 print "<font class='base'>$errormessage </font>\n";
225 &Header
::openbox
('100%', 'left', "$Lang::tr{'settings'}:");
227 $selected{'LOGTYPE'}{$cgiparams{'LOGTYPE'}} = "selected='selected'";
230 <form method='post' action="$ENV{'SCRIPT_NAME'}">
233 <td width='8%' class='base'>$Lang::tr{'section'}</td>
234 <td width='15%' class='base'>
235 <select name='LOGTYPE' size='1'>
236 <option value='urlfilter' $selected{'LOGTYPE'}{'urlfilter'} = "selected='selected'">$Lang::tr{'urlfilter url filter'}</option>
237 <option value='squidGuard' $selected{'LOGTYPE'}{'squidGuard'} = "selected='selected'">squidGuard</option>
241 <td width='8%' class='base'>$Lang::tr{'month'}:</td>
243 <select name='MONTH'>
246 for ($month = 0; $month < 12; $month++)
249 if ($month == $cgiparams{'MONTH'}) {
250 print 'selected="selected" '; }
251 print "value='$month'>$longmonths[$month]</option>\n";
256 <td width='8%' class='base'>$Lang::tr{'day'}:</td>
261 for ($day = 1; $day <= 31; $day++)
264 if ($day == $cgiparams{'DAY'}) {
265 print 'selected="selected" '; }
266 print "value='$day'>$day</option>\n";
271 <td width='5%' align='center'><input type='submit' name='ACTION' title='$Lang::tr{'day before'}' value='<<' /></td>
272 <td width='5%' align='center'><input type='submit' name='ACTION' title='$Lang::tr{'day after'}' value='>>' /></td>
273 <td width='10%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'update'}' /></td>
274 <td width='10%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'export'}' /></td>
283 &Header
::openbox
('100%', 'left', $Lang::tr
{'log'});
287 if ($start == -1) { $start = $lines - $Header::viewsize
; }
288 if ($start >= $lines - $Header::viewsize
) { $start = $lines - $Header::viewsize
; };
289 if ($start < 0) { $start = 0; }
291 $prev = $start - $Header::viewsize
;
292 $next = $start + $Header::viewsize
;
294 if ($prev < 0) { $prev = 0; }
295 if ($next >= $lines) { $next = -1 }
296 if ($start == 0) { $prev = -1; }
298 if ($cgiparams{'LOGTYPE'} eq 'urlfilter')
300 print "<b>$Lang::tr{'urlfilter log summary'} $longmonthstr $daystr: $lines</b><p>\n";
303 @slice = splice(@log, $start, $Header::viewsize
);
305 if ($logsettings{'LOGVIEW_REVERSE'} eq 'on') { @slice = reverse @slice; }
312 print "<table width='100%'>\n";
313 unless ($cgiparams{'LOGTYPE'} eq 'squidGuard')
316 print "<td align='center'><b>$Lang::tr{'urlfilter time'}</b></td>\n";
317 print "<td align='center'><b>$Lang::tr{'urlfilter category'}</b></td>\n";
318 print "<td align='center'><b>$Lang::tr{'urlfilter client'}</b></td>\n";
319 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on') { print "<td align='center'><b>$Lang::tr{'urlfilter username'}</b></td>\n"; }
320 print "<td align='center'><b>$Lang::tr{'urlfilter dst'}</b></td>\n";
326 undef $attr1; undef $attr2;
328 ($date,$time,$pid,@loginfo) = split(/ /);
329 @ip = split(/\//,$loginfo[2]);
330 @category = split(/\//,$loginfo[0]);
331 $dsturl = $loginfo[1];
332 $loginfo[3] =~ s/\%5c/\\/;
333 if ($cgiparams{'LOGTYPE'} eq 'squidGuard') {
334 if (@loginfo[0] =~ /squidGuard/) { $attr1 .= "<b>"; $attr2 .= "</b>"; }
335 if (@loginfo[1] =~ /ready/) { $attr1 .= "<b><font color='$Header::colourgreen'>"; $attr2 .= "</font></b>"; }
336 if (@loginfo[2] =~ /emergency/) { $attr1 .= "<b><font color='$Header::colourerr'>"; $attr2 .= "</font></b>"; }
339 if ($lines % 2) { print "<tr bgcolor='$color{'color20'}'>\n"; } else { print "<tr bgcolor='$color{'color22'}'>\n"; }
341 if ($cgiparams{'LOGTYPE'} eq 'squidGuard') {
342 print "<td nowrap>$time $pid $attr1@loginfo$attr2</td>\n";
344 print "<td width='10%' align='center' nowrap>$time</td>\n";
345 print "<td width='11%' align='center' nowrap>$category[1]</td>\n";
346 print "<td width='15%' align='center' nowrap>$ip[0]</td>\n";
347 if ($filtersettings{'ENABLE_USERNAME_LOG'} eq 'on')
349 print "<td width='12%' align='center' nowrap>$loginfo[3]</td>\n";
350 $site = substr($dsturl,0,55);
351 if (length($dsturl) > 55) { $site .= "..."; }
353 $site = substr($dsturl,0,69);
354 if (length($dsturl) > 69) { $site .= "..."; }
356 #print "<td>$site</td>\n";
357 print "<td><a href='$dsturl' title='$dsturl' target='_blank'>$site</a></td>\n";
362 print "</table><br>\n";
370 &Header
::closebigbox
();
372 &Header
::closepage
();
374 # -------------------------------------------------------------------
381 if ($cgiparams{'LOGTYPE'} eq 'squidGuard')
383 $filestr = "$logdir/squidGuard.log";
384 foreach $logarch (<$filestr.*.gz
>)
386 open (LOG
,"gzip -dc $logarch |");
388 ($date,$time,$pid,@loginfo) = split(/ /);
389 ($logyear,$logmonth,$logday) = split(/-/,$date);
390 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
396 ($date,$time,$pid,@loginfo) = split(/ /);
397 ($logyear,$logmonth,$logday) = split(/-/,$date);
398 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
402 foreach $logarch (<$logdir/*.gz
>)
404 if ($logarch !~ /squidGuard\.log/) {
405 open (LOG
,"gzip -dc $logarch |");
407 ($date,$time,$pid,@loginfo) = split(/ /);
408 ($logyear,$logmonth,$logday) = split(/-/,$date);
409 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
414 foreach $filestr (<$logdir/*.log>)
416 if ($filestr !~ /squidGuard\.log/) {
419 ($date,$time,$pid,@loginfo) = split(/ /);
420 ($logyear,$logmonth,$logday) = split(/-/,$date);
421 if (($logyear == $year) && ($logmonth == $cgiparams{'MONTH'}+1) && ($logday == $day)) { push(@log,$_) }
426 @log = sort { substr($a,11,8) cmp substr($b,11,8) } @log;
431 # -------------------------------------------------------------------
435 print "<table width='100%'>";
438 print "<td align='center' width='50%'>";
440 print "<a href='$ENV{'SCRIPT_NAME'}?$prev,$cgiparams{'MONTH'},$cgiparams{'DAY'},$cgiparams{'LOGTYPE'}'>$Lang::tr{'older'}</a>"; }
442 print "$Lang::tr{'older'}"; }
445 print "<td align='center' width='50%'>";
447 print "<a href='$ENV{'SCRIPT_NAME'}?$next,$cgiparams{'MONTH'},$cgiparams{'DAY'},$cgiparams{'LOGTYPE'}'>$Lang::tr{'newer'}</a>"; }
449 print "$Lang::tr{'newer'}"; }
456 # -------------------------------------------------------------------