]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/proxy.cgi
Some little bugfixes to current codebase
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / proxy.cgi
index 1a4453a777c1dc12670dfe2be838c8aa238f14d7..137f528bfbc325805664b9bc0e95673432c48d60 100644 (file)
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2008  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2009  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # 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        #
 #                                                                             #
 ###############################################################################
 #
-# (c) 2004-2008 marco.s - http://www.advproxy.net
+# (c) 2004-2009 marco.s - http://www.advproxy.net
 #
 # This code is distributed under the terms of the GPL
 #
-# $Id: advproxy.cgi,v 3.0.0 2008/08/18 00:00:00 marco.s Exp $
+# $Id: advproxy.cgi,v 3.0.2 2009/02/04 00:00:00 marco.s Exp $
 #
 
 use strict;
@@ -192,6 +192,7 @@ $proxysettings{'TRANSPARENT_BLUE'} = 'off';
 $proxysettings{'PROXY_PORT'} = '800';
 $proxysettings{'VISIBLE_HOSTNAME'} = '';
 $proxysettings{'ADMIN_MAIL_ADDRESS'} = '';
+$proxysettings{'ADMIN_PASSWORD'} = '';
 $proxysettings{'ERR_LANGUAGE'} = 'German';
 $proxysettings{'ERR_DESIGN'} = 'ipfire';
 $proxysettings{'SUPPRESS_VERSION'} = 'off';
@@ -203,8 +204,10 @@ $proxysettings{'UPSTREAM_PROXY'} = '';
 $proxysettings{'UPSTREAM_USER'} = '';
 $proxysettings{'UPSTREAM_PASSWORD'} = '';
 $proxysettings{'LOGGING'} = 'off';
+$proxysettings{'CACHEMGR'} = 'off';
 $proxysettings{'LOGQUERY'} = 'off';
 $proxysettings{'LOGUSERAGENT'} = 'off';
+$proxysettings{'FILEDESCRIPTORS'} = '4096';
 $proxysettings{'CACHE_MEM'} = '2';
 $proxysettings{'CACHE_SIZE'} = '50';
 $proxysettings{'MAX_SIZE'} = '4096';
@@ -331,7 +334,7 @@ if ($proxysettings{'ACTION'} eq $Lang::tr{'edit'})
        $proxysettings{'NCSA_PASS_CONFIRM'} = $proxysettings{'NCSA_PASS'};
 }
 
-if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy save and restart'}))
+if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy save and restart'}) || ($proxysettings{'ACTION'} eq $Lang::tr{'proxy reconfigure'}))
 {
        if ($proxysettings{'ENABLE'} !~ /^(on|off)$/ ||
            $proxysettings{'TRANSPARENT'} !~ /^(on|off)$/ ||
@@ -354,6 +357,12 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'}
                        goto ERROR;
                }
        }
+       if (!($proxysettings{'FILEDESCRIPTORS'} =~ /^\d+/) ||
+               ($proxysettings{'FILEDESCRIPTORS'} < 1) || ($proxysettings{'FILEDESCRIPTORS'} > 16384))
+       {
+               $errormessage = $Lang::tr{'proxy errmsg filedescriptors'};
+               goto ERROR;
+       }
        if (!($proxysettings{'CACHE_MEM'} =~ /^\d+/) ||
                ($proxysettings{'CACHE_MEM'} < 1))
        {
@@ -625,6 +634,8 @@ ERROR:
                &writeconfig;
                &writepacfile;
 
+               if ($proxysettings{'CACHEMGR'} eq 'on'){&writecachemgr;}
+
                system ('/usr/local/bin/squidctrl', 'disable');
                unlink "${General::swroot}/proxy/enable";
                unlink "${General::swroot}/proxy/transparent";
@@ -643,7 +654,8 @@ ERROR:
                        system ('/usr/bin/touch', "${General::swroot}/proxy/transparent_blue"); }
 
                if ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy save and restart'}) { system('/usr/local/bin/squidctrl restart >/dev/null 2>&1'); }
-       }
+               if ($proxysettings{'ACTION'} eq $Lang::tr{'proxy reconfigure'}) { system('/usr/local/bin/squidctrl reconfigure >/dev/null 2>&1'); }     
+  }
 }
 
 if ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy clear cache'})
@@ -704,6 +716,9 @@ $checked{'OFFLINE_MODE'}{$proxysettings{'OFFLINE_MODE'}} = "checked='checked'";
 $checked{'LOGGING'}{'off'} = '';
 $checked{'LOGGING'}{'on'} = '';
 $checked{'LOGGING'}{$proxysettings{'LOGGING'}} = "checked='checked'";
+$checked{'CACHEMGR'}{'off'} = '';
+$checked{'CACHEMGR'}{'on'} = '';
+$checked{'CACHEMGR'}{$proxysettings{'CACHEMGR'}} = "checked='checked'";
 $checked{'LOGQUERY'}{'off'} = '';
 $checked{'LOGQUERY'}{'on'} = '';
 $checked{'LOGQUERY'}{$proxysettings{'LOGQUERY'}} = "checked='checked'";
@@ -915,8 +930,7 @@ if ($netsettings{'BLUE_DEV'}) {
        print "<td colspan='2'>&nbsp;</td>";
 }
 print <<END
-       <td class='base'>$Lang::tr{'advproxy admin mail'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
-       <td><input type='text' name='ADMIN_MAIL_ADDRESS' value='$proxysettings{'ADMIN_MAIL_ADDRESS'}' /></td>
+       <td colspan='2'>&nbsp;</td>
 </tr>
 <tr>
 END
@@ -969,8 +983,13 @@ my $count = `arp -a | wc -l`;
 if ( $count < 1 ){$count = 1;}
 if ( -e "/usr/bin/squidclamav" ) {
        print "<td class='base'><b>".$Lang::tr{'advproxy squidclamav'}."</b><br />";
-       print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_CLAMAV' ".$checked{'ENABLE_CLAMAV'}{'on'}." /><br />";
-       print "+ ".int(( $count**(1/3)) * 8);
+       if ( ! -e "/var/run/clamav/clamd.pid" ){
+               print "<font color='red'>clamav not running</font><br /><br />";
+               $proxysettings{'ENABLE_CLAMAV'} = 'off';
+               }
+       else {
+               print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_CLAMAV' ".$checked{'ENABLE_CLAMAV'}{'on'}." /><br />";
+               print "+ ".int(( $count**(1/3)) * 8);}
        print "</td>";
 } else {
        print "<td></td>";
@@ -1038,6 +1057,18 @@ print <<END
 <tr>
        <td colspan='4'><b>$Lang::tr{'advproxy cache management'}</b></td>
 </tr>
+<tr>
+       <td class='base'>$Lang::tr{'proxy cachemgr'}:</td>
+       <td><input type='checkbox' name='CACHEMGR' $checked{'CACHEMGR'}{'on'} /></td>
+       <td class='base'>$Lang::tr{'advproxy admin mail'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td><input type='text' name='ADMIN_MAIL_ADDRESS' value='$proxysettings{'ADMIN_MAIL_ADDRESS'}' /></td>
+</tr>
+<tr>
+       <td class='base'>$Lang::tr{'proxy filedescriptors'}:</td>
+       <td><input type='text' name='FILEDESCRIPTORS' value='$proxysettings{'FILEDESCRIPTORS'}' size='5' /></td>
+       <td class='base'>$Lang::tr{'proxy admin password'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
+       <td><input type='text' name='ADMIN_PASSWORD' value='$proxysettings{'ADMIN_PASSWORD'}' /></td>
+</tr>
 <tr>
        <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
 </tr>
@@ -2111,6 +2142,7 @@ print <<END
 <tr>
        <td>&nbsp;</td>
        <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}' /></td>
+       <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'proxy reconfigure'}' /></td>
        <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'advproxy save and restart'}' /></td>
        <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'advproxy clear cache'}' /></td>
        <td>&nbsp;</td>
@@ -2543,6 +2575,7 @@ sub check_acls
        }
 
        @temp = split(/\n/,$proxysettings{'DST_NOAUTH'});
+       undef $proxysettings{'DST_NOAUTH'};
        foreach (@temp)
        {
                s/^\s+//g;
@@ -3015,7 +3048,7 @@ END
                        print FILE "cache deny no_cache_domains\n";
                }
                if (!-z $acl_dst_nocache_net) {
-                       print FILE "acl no_cache_domains dst \"$acl_dst_nocache_net\"\n";
+                       print FILE "acl no_cache_ipaddr dst \"$acl_dst_nocache_net\"\n";
                        print FILE "cache deny no_cache_ipaddr\n";
                }
                if (!-z $acl_dst_nocache_url) {
@@ -3031,7 +3064,6 @@ cache_effective_group squid
 umask 022
 
 pid_filename /var/run/squid.pid
-max_filedescriptors 4096
 
 cache_mem $proxysettings{'CACHE_MEM'} MB
 END
@@ -3839,14 +3871,14 @@ END
        ;
        $replybodymaxsize = 1024 * $proxysettings{'MAX_INCOMING_SIZE'};
        if ($proxysettings{'MAX_INCOMING_SIZE'} > 0) {
-               if (!-z $acl_src_unrestricted_ip) { print FILE "reply_body_max_size 0 allow IPFire_unrestricted_ips\n"; }
-               if (!-z $acl_src_unrestricted_mac) { print FILE "reply_body_max_size 0 allow IPFire_unrestricted_mac\n"; }
+               if (!-z $acl_src_unrestricted_ip) { print FILE "reply_body_max_size 0 deny IPFire_unrestricted_ips\n"; }
+               if (!-z $acl_src_unrestricted_mac) { print FILE "reply_body_max_size 0 deny IPFire_unrestricted_mac\n"; }
                if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
                {
-                       if (!-z $extgrp) { print FILE "reply_body_max_size 0 allow for_extended_users\n"; }
+                       if (!-z $extgrp) { print FILE "reply_body_max_size 0 deny for_extended_users\n"; }
                }
        }
-       print FILE "reply_body_max_size $replybodymaxsize allow all\n\n";
+       print FILE "reply_body_max_size $replybodymaxsize deny all\n\n";
 
        print FILE "visible_hostname";
        if ($proxysettings{'VISIBLE_HOSTNAME'} eq '')
@@ -3856,7 +3888,11 @@ END
                print FILE " $proxysettings{'VISIBLE_HOSTNAME'}\n\n";
        }
 
-       if (!($proxysettings{'ADMIN_MAIL_ADDRESS'} eq '')) { print FILE "cache_mgr $proxysettings{'ADMIN_MAIL_ADDRESS'}\n\n"; }
+       if (!($proxysettings{'ADMIN_MAIL_ADDRESS'} eq '')) { print FILE "cache_mgr $proxysettings{'ADMIN_MAIL_ADDRESS'}\n"; }
+       if (!($proxysettings{'ADMIN_PASSWORD'} eq '')) { print FILE "cachemgr_passwd $proxysettings{'ADMIN_PASSWORD'} all\n"; }
+       print FILE "\n";
+
+       print FILE "max_filedescriptors $proxysettings{'FILEDESCRIPTORS'}\n\n";
 
        # Write the parent proxy info, if needed.
        if ($remotehost ne '')
@@ -3954,3 +3990,15 @@ sub deluser
 }
 
 # -------------------------------------------------------------------
+
+sub writecachemgr
+{
+       open(FILE, ">${General::swroot}/proxy/cachemgr.conf");
+       flock(FILE, 2);
+       print FILE "$netsettings{'GREEN_ADDRESS'}:$proxysettings{'PROXY_PORT'}\n";
+       print FILE "localhost";
+       close(FILE);
+  return;
+}
+
+# -------------------------------------------------------------------