]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - html/cgi-bin/urlfilter.cgi
Merge remote-tracking branch 'ms/dns-forwarding' into next
[ipfire-2.x.git] / html / cgi-bin / urlfilter.cgi
index 2d180e29292a5eedcd1a99e921351f4c506cc704..c3c327eec2a40096a3cd01ac42fdd6bc645919ca 100644 (file)
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2010  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2005-2010  IPFire Team                                        #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -59,15 +59,13 @@ my $tcfile = "${General::swroot}/urlfilter/timeconst";
 my $uqfile = "${General::swroot}/urlfilter/userquota";
 my $dbdir = "${General::swroot}/urlfilter/blacklists";
 my $editdir = "${General::swroot}/urlfilter/editor";
-my $repository = "/home/httpd/html/repository";
+my $templatedir = "/srv/web/ipfire/html/redirect-templates";
+my $repository = "/var/urlrepo";
 my $hintcolour = '#FFFFCC';
 
 my $sourceurlfile = "${General::swroot}/urlfilter/autoupdate/autoupdate.urls";
 my $updconffile = "${General::swroot}/urlfilter/autoupdate/autoupdate.conf";
 my $updflagfile = "${General::swroot}/urlfilter/blacklists/.autoupdate.last";
-my $upd_cron_dly = "${General::swroot}/urlfilter/autoupdate/cron.daily";
-my $upd_cron_wly = "${General::swroot}/urlfilter/autoupdate/cron.weekly";
-my $upd_cron_mly = "${General::swroot}/urlfilter/autoupdate/cron.monthly";
 
 my $errormessage='';
 my $updatemessage='';
@@ -145,6 +143,7 @@ $filtersettings{'ENABLE_LOG'} = 'off';
 $filtersettings{'ENABLE_USERNAME_LOG'} = 'off';
 $filtersettings{'ENABLE_CATEGORY_LOG'} = 'off';
 $filtersettings{'ENABLE_AUTOUPDATE'} = 'off';
+$filtersettings{'REDIRECT_TEMPLATE'} = 'legacy';
 
 $filtersettings{'ACTION'} = '';
 $filtersettings{'VALID'} = '';
@@ -936,7 +935,7 @@ if (($besettings{'ACTION'} eq $Lang::tr{'urlfilter install blacklist'}) && ($bes
                close FILE;
 
                system("rm -f $dbdir/$besettings{'BE_NAME'}/*.db");
-               system("/usr/sbin/squidGuard -c $editdir/install.conf -C all");
+               system("/usr/bin/squidGuard -c $editdir/install.conf -C all");
                system("chmod a+w $dbdir/$besettings{'BE_NAME'}/*.db");
 
                &readblockcategories;
@@ -965,29 +964,20 @@ if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save schedule'})
                print FILE "CUSTOM_UPDATE_URL=$filtersettings{'CUSTOM_UPDATE_URL'}\n";
                close FILE;
 
-               if (-e $upd_cron_dly) { unlink($upd_cron_dly); }
-               if (-e $upd_cron_wly) { unlink($upd_cron_wly); }
-               if (-e $upd_cron_mly) { unlink($upd_cron_mly); }
 
                if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'daily'))
                {
-                       symlink("../bin/autoupdate.pl",$upd_cron_dly)
-               } else {
-                       symlink("/bin/false",$upd_cron_dly)
+                       system('/usr/local/bin/urlfilterctrl cron daily >/dev/null 2>&1');
                }
 
                if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'weekly'))
                {
-                       symlink("../bin/autoupdate.pl",$upd_cron_wly)
-               } else {
-                       symlink("/bin/false",$upd_cron_wly)
+                       system('/usr/local/bin/urlfilterctrl cron weekly >/dev/null 2>&1');
                }
 
                if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'monthly'))
                {
-                       symlink("../bin/autoupdate.pl",$upd_cron_mly)
-               } else {
-                       symlink("/bin/false",$upd_cron_mly)
+                       system('/usr/local/bin/urlfilterctrl cron monthly >/dev/null 2>&1');
                }
        }
 }
@@ -1086,6 +1076,8 @@ foreach $category (@filtergroups) {
        $checked{$category}{$filtersettings{$category}} = "checked='checked'";
 }
 
+$selected{'REDIRECT_TEMPLATE'}{$filtersettings{'REDIRECT_TEMPLATE'}} = "selected='selected'";
+
 $selected{'DEFINITION'}{$tcsettings{'DEFINITION'}} = "selected='selected'";
 $selected{'FROM_HOUR'}{$tcsettings{'FROM_HOUR'}} = "selected='selected'";
 $selected{'FROM_MINUTE'}{$tcsettings{'FROM_MINUTE'}} = "selected='selected'";
@@ -1178,7 +1170,7 @@ if (!($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter manage repository'})) {
 
 print "<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>\n";
 
-&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter filter settings'}:");
+&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter filter settings'}");
 print <<END
 <table width='100%'>
 <tr>
@@ -1222,8 +1214,12 @@ print <<END
         <td>&nbsp;</td>
 </tr>
 <tr>
-       <td colspan='2'>$Lang::tr{'urlfilter blocked domains'}&nbsp;<img src='/blob.gif' alt='*' /></td>
-       <td colspan='2'>$Lang::tr{'urlfilter blocked urls'}&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td colspan='2'>$Lang::tr{'urlfilter blocked domains'}</td>
+       <td colspan='2'>$Lang::tr{'urlfilter blocked urls'}</td>
+</tr>
+<tr>
+       <td colspan='2'>$Lang::tr{'urlfilter example'}</td>
+       <td colspan='2'>$Lang::tr{'urlfilter example ads'}</td>
 </tr>
 <tr>
        <td colspan='2' width='50%'><textarea name='CUSTOM_BLACK_DOMAINS' cols='32' rows='6' wrap='off'>
@@ -1261,8 +1257,12 @@ print <<END
         <td>&nbsp;</td>
 </tr>
 <tr>
-       <td colspan='2'>$Lang::tr{'urlfilter allowed domains'}&nbsp;<img src='/blob.gif' alt='*' /></td>
-       <td colspan='2'>$Lang::tr{'urlfilter allowed urls'}&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td colspan='2'>$Lang::tr{'urlfilter allowed domains'}</td>
+       <td colspan='2'>$Lang::tr{'urlfilter allowed urls'}</td>
+</tr>
+<tr>
+       <td colspan='2'>$Lang::tr{'urlfilter example'}</td>
+       <td colspan='2'>$Lang::tr{'urlfilter example ads'}</td>
 </tr>
 <tr>
        <td colspan='2' width='50%'><textarea name='CUSTOM_WHITE_DOMAINS' cols='32' rows='6' wrap='off'>
@@ -1297,7 +1297,7 @@ print <<END
         <td colspan='4'><b>$Lang::tr{'urlfilter custom expression list'}</b></td>
 </tr>
 <tr>
-       <td colspan='4'>$Lang::tr{'urlfilter blocked expressions'}&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td colspan='4'>$Lang::tr{'urlfilter blocked expressions'}</td>
 </tr>
 <tr>
        <td colspan='4'><textarea name='CUSTOM_EXPRESSIONS' cols='70' rows='3' wrap='off'>
@@ -1360,8 +1360,8 @@ print <<END
         <td>&nbsp;</td>
 </tr>
 <tr>
-       <td colspan='2'>$Lang::tr{'urlfilter unfiltered clients'}&nbsp;<img src='/blob.gif' alt='*' /></td>
-       <td colspan='2'>$Lang::tr{'urlfilter banned clients'}&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td colspan='2'>$Lang::tr{'urlfilter unfiltered clients'}</td>
+       <td colspan='2'>$Lang::tr{'urlfilter banned clients'}</td>
 </tr>
 <tr>
        <td colspan='2' width='50%'><textarea name='UNFILTERED_CLIENTS' cols='32' rows='6' wrap='off'>
@@ -1419,28 +1419,46 @@ print <<END
 <tr>
         <td colspan='4'><b>$Lang::tr{'urlfilter block settings'}</b></td>
 </tr>
+<tr>
+       <td width='25%' class='base'>$Lang::tr{'urlfilter redirect template'}</td>
+       <td width='75%' colspan='2'>
+               <select name='REDIRECT_TEMPLATE'>
+END
+;
+
+       foreach (<$templatedir/*>) {
+               if ((-d "$_") && (-e "$_/template.html")) {
+                       my $template = substr($_,rindex($_,"/")+1);
+                       print "<option value='$template' $selected{'REDIRECT_TEMPLATE'}{$template}>$template</option>\n";
+               }
+       }
+
+print <<END
+               </select>
+       </td>
+</tr>
 <tr>
        <td width='25%' class='base'>$Lang::tr{'urlfilter show category'}:</td>
        <td width='12%'><input type='checkbox' name='SHOW_CATEGORY' $checked{'SHOW_CATEGORY'}{'on'} /></td>
-       <td width='25%' class='base'>$Lang::tr{'urlfilter redirectpage'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td width='25%' class='base'>$Lang::tr{'urlfilter redirectpage'}:</td>
        <td><input type='text' name='REDIRECT_PAGE' value='$filtersettings{'REDIRECT_PAGE'}' size='40' /></td>
 </tr>
 <tr>
        <td class='base'>$Lang::tr{'urlfilter show url'}:</td>
        <td><input type='checkbox' name='SHOW_URL' $checked{'SHOW_URL'}{'on'} /></td>
-       <td class='base'>$Lang::tr{'urlfilter msg text 1'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td class='base'>$Lang::tr{'urlfilter msg text 1'}:</td>
        <td><input type='text' name='MSG_TEXT_1' value='$filtersettings{'MSG_TEXT_1'}' size='40' /></td>
 </tr>
 <tr>
        <td class='base'>$Lang::tr{'urlfilter show ip'}:</td>
        <td><input type='checkbox' name='SHOW_IP' $checked{'SHOW_IP'}{'on'} /></td>
-       <td class='base'>$Lang::tr{'urlfilter msg text 2'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td class='base'>$Lang::tr{'urlfilter msg text 2'}:</td>
        <td><input type='text' name='MSG_TEXT_2' value='$filtersettings{'MSG_TEXT_2'}' size='40' /></td>
 </tr>
 <tr>
        <td class='base'>$Lang::tr{'urlfilter show dnserror'}:</td>
        <td><input type='checkbox' name='ENABLE_DNSERROR' $checked{'ENABLE_DNSERROR'}{'on'} /></td>
-       <td class='base'>$Lang::tr{'urlfilter msg text 3'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td class='base'>$Lang::tr{'urlfilter msg text 3'}:</td>
        <td><input type='text' name='MSG_TEXT_3' value='$filtersettings{'MSG_TEXT_3'}' size='40' /></td>
 </tr>
 </table>
@@ -1481,12 +1499,8 @@ print <<END
 <hr size='1'>
 <table width='100%'>
 <tr>
-       <td>
-       <img src='/blob.gif' align='top' alt='*' />&nbsp;
-       <font class='base'>$Lang::tr{'this field may be blank'}</font>
-       </td>
-       <td align='right'>&nbsp;
-       </td>
+       <td><img src='/blob.gif' align='top' alt='*' />&nbsp;<font class='base'>$Lang::tr{'required field'}</font></td>
+       <td align='right'>&nbsp;</td>
 </tr>
 </table>
 <table width='100%'>
@@ -1506,7 +1520,7 @@ print "</form>\n";
 
 print "<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>\n";
 
-&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter maintenance'}:");
+&Header::openbox('100%', 'left', "$Lang::tr{'urlfilter maintenance'}");
 
 print <<END
 <table width='100%'>
@@ -1862,9 +1876,9 @@ print <<END
 
 <table width='100%'>
        <tr>
-               <td width='5%'>$Lang::tr{'urlfilter source'}</td>
+               <td width='5%'>$Lang::tr{'urlfilter source'}&nbsp;<img src='/blob.gif' alt='*' /></td>
                <td width='1%'>&nbsp;&nbsp;</td>
-               <td width='5%'>$Lang::tr{'urlfilter dst'}&nbsp;<img src='/blob.gif' alt='*'><img src='/blob.gif' alt='*'></td>
+               <td width='5%'>$Lang::tr{'urlfilter dst'}&nbsp;<img src='/blob.gif' alt='*' /></td>
                <td width='1%'>&nbsp;&nbsp;</td>
                <td width='5%'>$Lang::tr{'urlfilter access'}</td>
                <td>&nbsp;</td>
@@ -1925,7 +1939,7 @@ print <<END
                <td>&nbsp;</td>
        </tr>
        <tr>
-               <td>$Lang::tr{'remark'}&nbsp;<img src='/blob.gif' alt='*'></td>
+               <td>$Lang::tr{'remark'}</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
@@ -1964,10 +1978,10 @@ print <<END
 <table width='100%'>
        <tr>
                <td width='1%' align='right'> <img src='/blob.gif' align='top' alt='*' />&nbsp;</td>
-               <td><font class='base'>$Lang::tr{'this field may be blank'}</font></td>
+               <td><font class='base'>$Lang::tr{'required field'}</font></td>
        </tr>
        <tr>
-               <td width='1%' align='right'><img src='/blob.gif' align='top' alt='*' /><img src='/blob.gif' align='top' alt='*' />&nbsp;</td>
+               <td width='1%' align='right'>&nbsp;</td>
                <td><font class='base'>$Lang::tr{'urlfilter select multi'}</font></td>
        </tr>
 </table>
@@ -2150,7 +2164,7 @@ print <<END
        <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
 </tr>
 <tr>
-        <td class='base'>$Lang::tr{'urlfilter user time quota'}:</td>
+        <td class='base'>$Lang::tr{'urlfilter user time quota'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
         <td><input type='text' name='TIME_QUOTA' value='$uqsettings{'TIME_QUOTA'}' size='5' /></td>
        <td colspan='2' rowspan= '5' valign='top' class='base'>
                <table cellpadding='0' cellspacing='0'>
@@ -2158,7 +2172,7 @@ print <<END
                                <!-- intentionally left empty -->
                        </tr>
                        <tr>
-                       <td>$Lang::tr{'urlfilter assigned quota users'}:</td>
+                       <td>$Lang::tr{'urlfilter assigned quota users'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
                        </tr>
                        <tr>
                                <!-- intentionally left empty -->
@@ -2356,7 +2370,7 @@ print <<END
                <td class='base'><b>$Lang::tr{'urlfilter blacklist name'}</b></td>
 </tr>
 <tr>
-               <td class='base'>$Lang::tr{'urlfilter blacklist category name'}:</td>
+               <td class='base'>$Lang::tr{'urlfilter blacklist category name'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
        <td><input type='text' name='BE_NAME' value='$besettings{'BE_NAME'}' size='12' /></td>
 </tr>
 </table>
@@ -2366,7 +2380,7 @@ print <<END
        <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='20%'></td>
 </tr>
 <tr>
-               <td class='base' colspan='4'><b>$Lang::tr{'urlfilter edit domains urls expressions'}</b></td>
+               <td class='base' colspan='4'><b>$Lang::tr{'urlfilter edit domains urls expressions'}</b>&nbsp;<img src='/blob.gif' alt='*' /></td>
 </tr>
 <tr>
        <td colspan='2'>$Lang::tr{'urlfilter domains'}</td>
@@ -2704,9 +2718,9 @@ sub setpermissions
 
 sub writeconfigfile
 {
-       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\)\$";
-       my $audiovideo = "\\.\(aiff|asf|avi|dif|divx|mov|movie|mp3|mpe?g?|mpv2|ogg|ra?m|snd|qt|wav|wma|wmf|wmv\)\$";
-       my $archives = "\\.\(bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$";
+       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\)\$";
+       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\)\$";
+       my $archives = "/[^/]*\\.\(7z|bin|bz2|cab|cdr|dmg|gz|hqx|rar|smi|sit|sea|tar|tgz|zip\)\$";
 
        my $ident = " anonymous";
 
@@ -2836,11 +2850,13 @@ sub writeconfigfile
                if ($filtersettings{'ENABLE_SAFESEARCH'} eq 'on')
                {
                        print FILE "    # rewrite safesearch\n";
-                       print FILE "    s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)(\\bsafe=\\w+)(.*)\@\\1\\3safe=strict\\5\@i\n";
-                       print FILE "    s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|frghp|froogle)\\?)(.*)\@\\1safe=strict\\\&\\3\@i\n";
+                       print FILE "    s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|nwshp|frghp|froogle)\\?)(.*)(\\bsafe=\\w+)(.*)\@\\1\\3safe=strict\\5\@i\n";
+                       print FILE "    s@(.*\\Wgoogle\\.\\w+/(webhp|search|imghp|images|grphp|groups|nwshp|frghp|froogle)\\?)(.*)\@\\1safe=strict\\\&\\3\@i\n";
                        print FILE "    s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W)(.*)(\\bvm=\\w+)(.*)\@\\1\\2vm=r\\4\@i\n";
                        print FILE "    s@(.*\\Wsearch\\.yahoo\\.\\w+/search\\W.*)\@\\1\\\&vm=r\@i\n";
                        print FILE "    s@(.*\\Walltheweb\\.com/customize\\?)(.*)(\\bcopt_offensive=\\w+)(.*)\@\\1\\2copt_offensive=on\\4\@i\n";
+                       print FILE "    s@(.*\\Wbing\\.\\w+/)(.*)(\\badlt=\\w+)(.*)\@\\1\\2adlt=strict\\4\@i\n";
+                       print FILE "    s@(.*\\Wbing\\.\\w+/.*)\@\\1\\\&adlt=strict\@i\n";
                }
 
                print FILE "}\n\n";