X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Fproxy.cgi;h=55d7ec9e82aead0b8bd2ac3ac0242385fb2eb3f4;hb=20c5535cf791d06c2ef2a0b49e6073fab182e810;hp=dc46ca56aeebb8310f8bbd3afded04a9e4c679d2;hpb=70df830214c97a68fcb7e89ae0d7df58c35590be;p=people%2Fpmueller%2Fipfire-2.x.git diff --git a/html/cgi-bin/proxy.cgi b/html/cgi-bin/proxy.cgi index dc46ca56ae..55d7ec9e82 100644 --- a/html/cgi-bin/proxy.cgi +++ b/html/cgi-bin/proxy.cgi @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007 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 # @@ -18,6 +18,13 @@ # along with this program. If not, see . # # # ############################################################################### +# +# (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.2 2009/02/04 00:00:00 marco.s Exp $ +# use strict; @@ -102,7 +109,7 @@ my $cre_svhosts = "${General::swroot}/proxy/advanced/cre/supervisors"; my $identhosts = "$identdir/hosts"; -my $authdir = "/usr/lib/squid/auth"; +my $authdir = "/usr/lib/squid/"; my $errordir = "/usr/lib/squid/errors"; my $acl_src_subnets = "$acldir/src_subnets.acl"; @@ -112,8 +119,14 @@ my $acl_src_unrestricted_ip = "$acldir/src_unrestricted_ip.acl"; my $acl_src_unrestricted_mac = "$acldir/src_unrestricted_mac.acl"; my $acl_src_noaccess_ip = "$acldir/src_noaccess_ip.acl"; my $acl_src_noaccess_mac = "$acldir/src_noaccess_mac.acl"; -my $acl_dst_nocache = "$acldir/dst_nocache.acl"; my $acl_dst_noauth = "$acldir/dst_noauth.acl"; +my $acl_dst_noauth_dom = "$acldir/dst_noauth_dom.acl"; +my $acl_dst_noauth_net = "$acldir/dst_noauth_net.acl"; +my $acl_dst_noauth_url = "$acldir/dst_noauth_url.acl"; +my $acl_dst_nocache = "$acldir/dst_nocache.acl"; +my $acl_dst_nocache_dom = "$acldir/dst_nocache_dom.acl"; +my $acl_dst_nocache_net = "$acldir/dst_nocache_net.acl"; +my $acl_dst_nocache_url = "$acldir/dst_nocache_url.acl"; my $acl_dst_throttle = "$acldir/dst_throttle.acl"; my $acl_ports_safe = "$acldir/ports_safe.acl"; my $acl_ports_ssl = "$acldir/ports_ssl.acl"; @@ -144,8 +157,14 @@ unless (-e $acl_src_unrestricted_ip) { system("touch $acl_src_unrestricted_ip") unless (-e $acl_src_unrestricted_mac) { system("touch $acl_src_unrestricted_mac"); } unless (-e $acl_src_noaccess_ip) { system("touch $acl_src_noaccess_ip"); } unless (-e $acl_src_noaccess_mac) { system("touch $acl_src_noaccess_mac"); } -unless (-e $acl_dst_nocache) { system("touch $acl_dst_nocache"); } -unless (-e $acl_dst_noauth) { system("touch $acl_dst_noauth"); } +unless (-e $acl_dst_noauth) { system("touch $acl_dst_noauth"); } +unless (-e $acl_dst_noauth_dom) { system("touch $acl_dst_noauth_dom"); } +unless (-e $acl_dst_noauth_net) { system("touch $acl_dst_noauth_net"); } +unless (-e $acl_dst_noauth_url) { system("touch $acl_dst_noauth_url"); } +unless (-e $acl_dst_nocache) { system("touch $acl_dst_nocache"); } +unless (-e $acl_dst_nocache_dom) { system("touch $acl_dst_nocache_dom"); } +unless (-e $acl_dst_nocache_net) { system("touch $acl_dst_nocache_net"); } +unless (-e $acl_dst_nocache_url) { system("touch $acl_dst_nocache_url"); } unless (-e $acl_dst_throttle) { system("touch $acl_dst_throttle"); } unless (-e $acl_ports_safe) { system("touch $acl_ports_safe"); } unless (-e $acl_ports_ssl) { system("touch $acl_ports_ssl"); } @@ -161,14 +180,10 @@ close(FILE); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); &General::readhash("${General::swroot}/main/settings", \%mainsettings); -$filtersettings{'CHILDREN'} = '5'; -if (-e "${General::swroot}/urlfilter/settings") { - &General::readhash("${General::swroot}/urlfilter/settings", \%filtersettings); -} - -$xlratorsettings{'CHILDREN'} = '5'; -if (-e "${General::swroot}/updatexlrator/settings") { - &General::readhash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); +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(); @@ -183,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'; @@ -194,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'; @@ -262,6 +280,8 @@ $proxysettings{'IDENT_ENABLE_ACL'} = 'off'; $proxysettings{'IDENT_USER_ACL'} = 'positive'; $proxysettings{'ENABLE_FILTER'} = 'off'; $proxysettings{'ENABLE_UPDXLRATOR'} = 'off'; +$proxysettings{'ENABLE_CLAMAV'} = 'off'; +$proxysettings{'CHILDREN'} = '10'; $ncsa_buttontext = $Lang::tr{'advproxy NCSA create user'}; @@ -320,15 +340,15 @@ 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{'ENABLE'} !~ /^(on|off)$/ || - $proxysettings{'TRANSPARENT'} !~ /^(on|off)$/ || - $proxysettings{'ENABLE_BLUE'} !~ /^(on|off)$/ || +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)$/ || + $proxysettings{'ENABLE_BLUE'} !~ /^(on|off)$/ || $proxysettings{'TRANSPARENT_BLUE'} !~ /^(on|off)$/ ) { $errormessage = $Lang::tr{'invalid input'}; goto ERROR; - } + } if (!(&General::validport($proxysettings{'PROXY_PORT'}))) { $errormessage = $Lang::tr{'advproxy errmsg invalid proxy port'}; @@ -337,7 +357,16 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'} if (!($proxysettings{'CACHE_SIZE'} =~ /^\d+/) || ($proxysettings{'CACHE_SIZE'} < 10)) { - $errormessage = $Lang::tr{'advproxy errmsg hdd cache size'}; + if (!($proxysettings{'CACHE_SIZE'} eq '0')) + { + $errormessage = $Lang::tr{'advproxy errmsg hdd cache size'}; + 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+/) || @@ -345,7 +374,7 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'} { $errormessage = $Lang::tr{'advproxy errmsg mem cache size'}; goto ERROR; - } + } my @free = `/usr/bin/free`; $free[1] =~ m/(\d+)/; $cachemem = int $1 / 2048; @@ -376,6 +405,11 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'} { $errormessage = $Lang::tr{'invalid maximum incoming size'}; goto ERROR; + } + if (!($proxysettings{'CHILDREN'} =~ /^\d+$/) || ($proxysettings{'CHILDREN'} < 1)) + { + $errormessage = $Lang::tr{'advproxy invalid num of children'}; + goto ERROR; } if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') { @@ -415,8 +449,8 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'} } } } - if ((!($proxysettings{'AUTH_MAX_USERIP'} eq '')) && - ((!($proxysettings{'AUTH_MAX_USERIP'} =~ /^\d+/)) || ($proxysettings{'AUTH_MAX_USERIP'} < 1) || ($proxysettings{'AUTH_MAX_USERIP'} > 255))) + if ((!($proxysettings{'AUTH_MAX_USERIP'} eq '')) && + ((!($proxysettings{'AUTH_MAX_USERIP'} =~ /^\d+/)) || ($proxysettings{'AUTH_MAX_USERIP'} < 1) || ($proxysettings{'AUTH_MAX_USERIP'} > 255))) { $errormessage = $Lang::tr{'advproxy errmsg max userip'}; goto ERROR; @@ -506,6 +540,10 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'} $errormessage = $Lang::tr{'advproxy errmsg invalid bdc'}; goto ERROR; } + + $proxysettings{'NTLM_DOMAIN'} = lc($proxysettings{'NTLM_DOMAIN'}); + $proxysettings{'NTLM_PDC'} = lc($proxysettings{'NTLM_PDC'}); + $proxysettings{'NTLM_BDC'} = lc($proxysettings{'NTLM_BDC'}); } if ($proxysettings{'AUTH_METHOD'} eq 'radius') { @@ -591,13 +629,19 @@ ERROR: if (-e "${General::swroot}/proxy/settings") { &General::readhash("${General::swroot}/proxy/settings", \%stdproxysettings); } $stdproxysettings{'PROXY_PORT'} = $proxysettings{'PROXY_PORT'}; + $stdproxysettings{'UPSTREAM_PROXY'} = $proxysettings{'UPSTREAM_PROXY'}; + $stdproxysettings{'UPSTREAM_USER'} = $proxysettings{'UPSTREAM_USER'}; + $stdproxysettings{'UPSTREAM_PASSWORD'} = $proxysettings{'UPSTREAM_PASSWORD'}; $stdproxysettings{'ENABLE_FILTER'} = $proxysettings{'ENABLE_FILTER'}; $stdproxysettings{'ENABLE_UPDXLRATOR'} = $proxysettings{'ENABLE_UPDXLRATOR'}; + $stdproxysettings{'ENABLE_CLAMAV'} = $proxysettings{'ENABLE_CLAMAV'}; &General::writehash("${General::swroot}/proxy/settings", \%stdproxysettings); &writeconfig; &writepacfile; + if ($proxysettings{'CACHEMGR'} eq 'on'){&writecachemgr;} + system ('/usr/local/bin/squidctrl', 'disable'); unlink "${General::swroot}/proxy/enable"; unlink "${General::swroot}/proxy/transparent"; @@ -607,16 +651,17 @@ ERROR: if ($proxysettings{'ENABLE'} eq 'on') { system ('/usr/bin/touch', "${General::swroot}/proxy/enable"); system ('/usr/local/bin/squidctrl', 'enable'); } - if ($proxysettings{'TRANSPARENT'} eq 'on') { + if ($proxysettings{'TRANSPARENT'} eq 'on' && $proxysettings{'ENABLE'} eq 'on') { system ('/usr/bin/touch', "${General::swroot}/proxy/transparent"); } if ($proxysettings{'ENABLE_BLUE'} eq 'on') { system ('/usr/bin/touch', "${General::swroot}/proxy/enable_blue"); system ('/usr/local/bin/squidctrl', 'enable'); } - if ($proxysettings{'TRANSPARENT_BLUE'} eq 'on') { + if ($proxysettings{'TRANSPARENT_BLUE'} eq 'on' && $proxysettings{'ENABLE_BLUE'} eq 'on') { 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'}) @@ -677,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'"; @@ -828,6 +876,10 @@ $checked{'ENABLE_UPDXLRATOR'}{'off'} = ''; $checked{'ENABLE_UPDXLRATOR'}{'on'} = ''; $checked{'ENABLE_UPDXLRATOR'}{$proxysettings{'ENABLE_UPDXLRATOR'}} = "checked='checked'"; +$checked{'ENABLE_CLAMAV'}{'off'} = ''; +$checked{'ENABLE_CLAMAV'}{'on'} = ''; +$checked{'ENABLE_CLAMAV'}{$proxysettings{'ENABLE_CLAMAV'}} = "checked='checked'"; + &Header::openpage($Lang::tr{'advproxy advanced web proxy configuration'}, 1, ''); &Header::openbigbox('100%', 'left', '', $errormessage); @@ -884,8 +936,7 @@ if ($netsettings{'BLUE_DEV'}) { print " "; } print <$Lang::tr{'advproxy admin mail'}: * - +   END @@ -930,10 +981,34 @@ print <
- - - - + + +END +; +my $count = `arp -a | wc -l`; +if ( $count < 1 ){$count = 1;} +if ( -e "/usr/bin/squidclamav" ) { + print ""; +} else { + print ""; +} +print ""; +print ""; +print <
$Lang::tr{'advproxy url filter'} $Lang::tr{'advproxy enabled'}$Lang::tr{'advproxy update accelerator'} $Lang::tr{'advproxy enabled'}
$Lang::tr{'advproxy redirector children'}
$Lang::tr{'processes'}".$Lang::tr{'advproxy squidclamav'}."
"; + if ( ! -e "/var/run/clamav/clamd.pid" ){ + print "clamav not running

"; + $proxysettings{'ENABLE_CLAMAV'} = 'off'; + } + else { + print $Lang::tr{'advproxy enabled'}."
"; + print "+ ".int(( $count**(1/3)) * 8);} + print "
".$Lang::tr{'advproxy url filter'}."
"; +print $Lang::tr{'advproxy enabled'}."
"; +print "+ ".int(($count**(1/3)) * 6); +print "
".$Lang::tr{'advproxy update accelerator'}."
"; +print $Lang::tr{'advproxy enabled'}."
"; +print "+ ".int(($count**(1/3)) * 5); +print "
@@ -941,19 +1016,28 @@ print <$Lang::tr{'advproxy upstream proxy'} - - + + + + - - + + + + - + + + + - + + + +
$Lang::tr{'advproxy via forwarding'}:$Lang::tr{'advproxy upstream proxy host:port'}*$Lang::tr{'advproxy via forwarding'}:$Lang::tr{'advproxy upstream proxy host:port'} *
$Lang::tr{'advproxy client IP forwarding'}:$Lang::tr{'advproxy upstream username'}*$Lang::tr{'advproxy client IP forwarding'}:$Lang::tr{'advproxy upstream username'}: *
$Lang::tr{'advproxy username forwarding'}: - $Lang::tr{'advproxy upstream password'}:*$Lang::tr{'advproxy username forwarding'}:$Lang::tr{'advproxy upstream password'}: *
$Lang::tr{'advproxy no connection auth'}:$Lang::tr{'advproxy no connection auth'}:  

@@ -962,9 +1046,16 @@ print <$Lang::tr{'advproxy log settings'} - $Lang::tr{'advproxy log enabled'}: - $Lang::tr{'advproxy log query'}: - $Lang::tr{'advproxy log useragent'}: + $Lang::tr{'advproxy log enabled'}: + + $Lang::tr{'advproxy log query'}: + + + +   +   + $Lang::tr{'advproxy log useragent'}: +
@@ -973,7 +1064,19 @@ print <$Lang::tr{'advproxy cache management'} - + $Lang::tr{'proxy cachemgr'}: + + $Lang::tr{'advproxy admin mail'}: * + + + + $Lang::tr{'proxy filedescriptors'}: + + $Lang::tr{'proxy admin password'}: * + + + + $Lang::tr{'advproxy ram cache size'}: @@ -1011,7 +1114,7 @@ print < -