]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/proxy.cgi
Removed mldonkey and ocaml.
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / proxy.cgi
index 1a4453a777c1dc12670dfe2be838c8aa238f14d7..a387d3e75f8b7042dc4c6bd195608995b7802557 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;
@@ -180,6 +180,12 @@ close(FILE);
 &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
 &General::readhash("${General::swroot}/main/settings", \%mainsettings);
 
+my $green_cidr = &General::ipcidr("$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}");
+my $blue_cidr = "# Blue not defined";
+if ($netsettings{'BLUE_DEV'}) {
+       $blue_cidr = &General::ipcidr("$netsettings{'BLUE_NETADDRESS'}\/$netsettings{'BLUE_NETMASK'}");
+}
+
 &Header::showhttpheaders();
 
 $proxysettings{'ACTION'} = '';
@@ -192,6 +198,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 +210,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 +340,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 +363,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 +640,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 +660,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 +722,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 +936,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 +989,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 +1063,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>
@@ -1162,10 +1199,10 @@ END
 
 if (!$proxysettings{'SRC_SUBNETS'})
 {
-       print "$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}\n";
+       print "$green_cidr\n";
        if ($netsettings{'BLUE_DEV'})
        {
-               print "$netsettings{'BLUE_NETADDRESS'}\/$netsettings{'BLUE_NETMASK'}\n";
+               print "$blue_cidr\n";
        }
 } else { print $proxysettings{'SRC_SUBNETS'}; }
 
@@ -1754,9 +1791,9 @@ print <<END
 END
 ;
 if (!$proxysettings{'IDENT_HOSTS'}) {
-       print "$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}\n";
+       print "$green_cidr\n";
        if ($netsettings{'BLUE_DEV'}) {
-               print "$netsettings{'BLUE_NETADDRESS'}\/$netsettings{'BLUE_NETMASK'}\n";
+               print "$blue_cidr\n";
        }
 } else {
        print $proxysettings{'IDENT_HOSTS'};
@@ -2111,6 +2148,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 +2581,7 @@ sub check_acls
        }
 
        @temp = split(/\n/,$proxysettings{'DST_NOAUTH'});
+       undef $proxysettings{'DST_NOAUTH'};
        foreach (@temp)
        {
                s/^\s+//g;
@@ -2659,10 +2698,10 @@ sub write_acls
        flock(FILE, 2);
        if (!$proxysettings{'SRC_SUBNETS'})
        {
-               print FILE "$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}\n";
+               print FILE "$green_cidr\n";
                if ($netsettings{'BLUE_DEV'})
                {
-                       print FILE "$netsettings{'BLUE_NETADDRESS'}\/$netsettings{'BLUE_NETMASK'}\n";
+                       print FILE "$blue_cidr\n";
                }
        } else { print FILE $proxysettings{'SRC_SUBNETS'}; }
        close(FILE);
@@ -3015,7 +3054,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 +3070,6 @@ cache_effective_group squid
 umask 022
 
 pid_filename /var/run/squid.pid
-max_filedescriptors 4096
 
 cache_mem $proxysettings{'CACHE_MEM'} MB
 END
@@ -3287,8 +3325,8 @@ END
        }
 
        print FILE <<END
-acl all src 0.0.0.0/0.0.0.0
-acl localhost src 127.0.0.1/255.255.255.255
+#acl all src all
+acl localhost src 127.0.0.1/32
 END
 ;
 open (PORTS,"$acl_ports_ssl");
@@ -3312,12 +3350,12 @@ acl IPFire_https port $https_port
 acl IPFire_ips              dst $netsettings{'GREEN_ADDRESS'}
 acl IPFire_networks         src "$acl_src_subnets"
 acl IPFire_servers          dst "$acl_src_subnets"
-acl IPFire_green_network    src $netsettings{'GREEN_NETADDRESS'}/$netsettings{'GREEN_NETMASK'}
-acl IPFire_green_servers    dst $netsettings{'GREEN_NETADDRESS'}/$netsettings{'GREEN_NETMASK'}
+acl IPFire_green_network    src $green_cidr
+acl IPFire_green_servers    dst $green_cidr
 END
        ;
-       if ($netsettings{'BLUE_DEV'}) { print FILE "acl IPFire_blue_network     src $netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}\n"; }
-       if ($netsettings{'BLUE_DEV'}) { print FILE "acl IPFire_blue_servers     dst $netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}\n"; }
+       if ($netsettings{'BLUE_DEV'}) { print FILE "acl IPFire_blue_network     src $blue_cidr\n"; }
+       if ($netsettings{'BLUE_DEV'}) { print FILE "acl IPFire_blue_servers     dst $blue_cidr\n"; }
        if (!-z $acl_src_banned_ip) { print FILE "acl IPFire_banned_ips       src \"$acl_src_banned_ip\"\n"; }
        if (!-z $acl_src_banned_mac) { print FILE "acl IPFire_banned_mac       arp \"$acl_src_banned_mac\"\n"; }
        if (!-z $acl_src_unrestricted_ip) { print FILE "acl IPFire_unrestricted_ips src \"$acl_src_unrestricted_ip\"\n"; }
@@ -3365,7 +3403,7 @@ END
        my $blue_net = ''; #BLUE empty by default
        my $blue_ip = '';
        if ($netsettings{'BLUE_DEV'} && $proxysettings{'ENABLE_BLUE'} eq 'on') {
-               $blue_net = "$netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}";
+               $blue_net = "$blue_cidr";
                $blue_ip  = "$netsettings{'BLUE_ADDRESS'}";
        }
        if (!-z $acl_include)
@@ -3374,7 +3412,7 @@ END
                print FILE "\n#Start of custom includes\n\n";
                while (<ACL>) {
                        $_ =~ s/__GREEN_IP__/$netsettings{'GREEN_ADDRESS'}/;
-                       $_ =~ s/__GREEN_NET__/$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}/;
+                       $_ =~ s/__GREEN_NET__/$green_cidr/;
                        $_ =~ s/__BLUE_IP__/$blue_ip/;
                        $_ =~ s/__BLUE_NET__/$blue_net/;
                        $_ =~ s/__PROXY_PORT__/$proxysettings{'PROXY_PORT'}/;
@@ -3779,19 +3817,23 @@ END
 
                if ($proxysettings{'FORWARD_IPADDRESS'} eq 'off')
                {
-                       print FILE "header_access X-Forwarded-For deny all\n";
+                       print FILE "request_header_access X-Forwarded-For deny all\n";
+                       print FILE "reply_header_access X-Forwarded-For deny all\n";
                }
                if ($proxysettings{'FORWARD_VIA'} eq 'off')
                {
-                       print FILE "header_access Via deny all\n";
+                       print FILE "request_header_access Via deny all\n";
+                       print FILE "reply_header_access Via deny all\n";
                }
                if (!($proxysettings{'FAKE_USERAGENT'} eq ''))
                {
-                       print FILE "header_access User-Agent deny all\n";
+                       print FILE "request_header_access User-Agent deny all\n";
+                       print FILE "reply_header_access User-Agent deny all\n";
                }
                if (!($proxysettings{'FAKE_REFERER'} eq ''))
                {
-                       print FILE "header_access Referer deny all\n";
+                       print FILE "request_header_access Referer deny all\n";
+                       print FILE "reply_header_access Referer deny all\n";
                }
 
                print FILE "\n";
@@ -3839,14 +3881,18 @@ 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";
+       
+       if ( $replybodymaxsize != '0' )
+       {
+               print FILE "reply_body_max_size $replybodymaxsize deny all\n\n";
+       }
 
        print FILE "visible_hostname";
        if ($proxysettings{'VISIBLE_HOSTNAME'} eq '')
@@ -3856,7 +3902,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 +4004,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;
+}
+
+# -------------------------------------------------------------------