X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Fproxy.cgi;h=aaaec87b02dd328a8cf10e63c1c71dbd282663eb;hb=30793ae111f24fccea798759e87b72487fc23531;hp=bf90062378bc37e7040a5fa0694d34dc7e769a04;hpb=ac1cfefab236b73ed52909e14f43eaffc8d6914e;p=ipfire-2.x.git diff --git a/html/cgi-bin/proxy.cgi b/html/cgi-bin/proxy.cgi index bf90062378..aaaec87b02 100644 --- a/html/cgi-bin/proxy.cgi +++ b/html/cgi-bin/proxy.cgi @@ -1,12 +1,29 @@ #!/usr/bin/perl +############################################################################### +# # +# IPFire.org - A linux based firewall # +# 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 # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### # -# SmoothWall CGIs +# (c) 2004-2009 marco.s - http://www.advproxy.net # # This code is distributed under the terms of the GPL # -# (c) The SmoothWall Team -# -# $Id: proxy.cgi,v 1.13.2.23 2006/01/29 09:29:47 eoberlander Exp $ +# $Id: advproxy.cgi,v 3.0.2 2009/02/04 00:00:00 marco.s Exp $ # use strict; @@ -15,15 +32,150 @@ use strict; #use warnings; #use CGI::Carp 'fatalsToBrowser'; -require 'CONFIG_ROOT/general-functions.pl'; +require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; +my @squidversion = `/usr/sbin/squid -v`; +my $http_port='81'; +my $https_port='444'; + +my %color = (); +my %mainsettings = (); +&General::readhash("${General::swroot}/main/settings", \%mainsettings); +&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); + my %proxysettings=(); my %netsettings=(); +my %filtersettings=(); +my %xlratorsettings=(); +my %stdproxysettings=(); my %mainsettings=(); -my $errormessage = ''; -my $NeedDoHTML = 1; + +my %checked=(); +my %selected=(); + +my @throttle_limits=(64,128,256,384,512,1024,2048,3072,5120); +my $throttle_binary="bin|cab|exe|gz|rar|sea|tar|tgz|zip"; +my $throttle_dskimg="b5t|bin|bwt|ccd|cdi|cue|gho|img|iso|mds|nrg|pqi"; +my $throttle_mmedia="aiff?|asf|avi|divx|mov|mp3|mpe?g|qt|ra?m"; + +my $def_ports_safe="80 # http\n21 # ftp\n443 # https\n563 # snews\n70 # gopher\n210 # wais\n1025-65535 # unregistered ports\n280 # http-mgmt\n488 # gss-http\n591 # filemaker\n777 # multiling http\n800 # Squids port (for icons)\n"; +my $def_ports_ssl="443 # https\n563 # snews\n"; + +my @useragent=(); +my @useragentlist=(); + +my $hintcolour='#FFFFCC'; +my $ncsa_buttontext=''; +my $language=''; +my $i=0; +my $n=0; +my $id=0; +my $line=''; +my $user=''; +my @userlist=(); +my @grouplist=(); +my @temp=(); +my @templist=(); + +my $cachemem=0; +my $proxy1=''; +my $proxy2=''; +my $replybodymaxsize=0; +my $browser_regexp=''; +my $needhup = 0; +my $errormessage=''; + +my $acldir = "${General::swroot}/proxy/advanced/acls"; +my $ncsadir = "${General::swroot}/proxy/advanced/ncsa"; +my $ntlmdir = "${General::swroot}/proxy/advanced/ntlm"; +my $raddir = "${General::swroot}/proxy/advanced/radius"; +my $identdir = "${General::swroot}/proxy/advanced/ident"; +my $credir = "${General::swroot}/proxy/advanced/cre"; + +my $userdb = "$ncsadir/passwd"; +my $stdgrp = "$ncsadir/standard.grp"; +my $extgrp = "$ncsadir/extended.grp"; +my $disgrp = "$ncsadir/disabled.grp"; + +my $browserdb = "${General::swroot}/proxy/advanced/useragents"; +my $mimetypes = "${General::swroot}/proxy/advanced/mimetypes"; +my $throttled_urls = "${General::swroot}/proxy/advanced/throttle"; + +my $cre_enabled = "${General::swroot}/proxy/advanced/cre/enable"; +my $cre_groups = "${General::swroot}/proxy/advanced/cre/classrooms"; +my $cre_svhosts = "${General::swroot}/proxy/advanced/cre/supervisors"; + +my $identhosts = "$identdir/hosts"; + +my $authdir = "/usr/lib/squid/"; +my $errordir = "/usr/lib/squid/errors"; + +my $acl_src_subnets = "$acldir/src_subnets.acl"; +my $acl_src_banned_ip = "$acldir/src_banned_ip.acl"; +my $acl_src_banned_mac = "$acldir/src_banned_mac.acl"; +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_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"; +my $acl_include = "$acldir/include.acl"; + +my $updaccelversion = 'n/a'; +my $urlfilterversion = 'n/a'; + +unless (-d "$acldir") { mkdir("$acldir"); } +unless (-d "$ncsadir") { mkdir("$ncsadir"); } +unless (-d "$ntlmdir") { mkdir("$ntlmdir"); } +unless (-d "$raddir") { mkdir("$raddir"); } +unless (-d "$identdir") { mkdir("$identdir"); } +unless (-d "$credir") { mkdir("$credir"); } + +unless (-e $cre_groups) { system("touch $cre_groups"); } +unless (-e $cre_svhosts) { system("touch $cre_svhosts"); } + +unless (-e $userdb) { system("touch $userdb"); } +unless (-e $stdgrp) { system("touch $stdgrp"); } +unless (-e $extgrp) { system("touch $extgrp"); } +unless (-e $disgrp) { system("touch $disgrp"); } + +unless (-e $acl_src_subnets) { system("touch $acl_src_subnets"); } +unless (-e $acl_src_banned_ip) { system("touch $acl_src_banned_ip"); } +unless (-e $acl_src_banned_mac) { system("touch $acl_src_banned_mac"); } +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_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"); } +unless (-e $acl_include) { system("touch $acl_include"); } + +unless (-e $browserdb) { system("touch $browserdb"); } +unless (-e $mimetypes) { system("touch $mimetypes"); } + +open FILE, $browserdb; +@useragentlist = sort { reverse(substr(reverse(substr($a,index($a,',')+1)),index(reverse(substr($a,index($a,','))),',')+1)) cmp reverse(substr(reverse(substr($b,index($b,',')+1)),index(reverse(substr($b,index($b,','))),',')+1))} grep !/(^$)|(^\s*#)/,; +close(FILE); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); &General::readhash("${General::swroot}/main/settings", \%mainsettings); @@ -33,46 +185,196 @@ my $NeedDoHTML = 1; $proxysettings{'ACTION'} = ''; $proxysettings{'VALID'} = ''; -$proxysettings{'UPSTREAM_PROXY'} = ''; -$proxysettings{'UPSTREAM_USER'} = ''; -$proxysettings{'UPSTREAM_PASSWORD'} = ''; $proxysettings{'ENABLE'} = 'off'; $proxysettings{'ENABLE_BLUE'} = 'off'; -$proxysettings{'CACHE_SIZE'} = '50'; $proxysettings{'TRANSPARENT'} = 'off'; $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'; +$proxysettings{'FORWARD_VIA'} = 'off'; +$proxysettings{'FORWARD_IPADDRESS'} = 'off'; +$proxysettings{'FORWARD_USERNAME'} = 'off'; +$proxysettings{'NO_CONNECTION_AUTH'} = 'off'; +$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'; $proxysettings{'MIN_SIZE'} = '0'; +$proxysettings{'MEM_POLICY'} = 'LRU'; +$proxysettings{'CACHE_POLICY'} = 'LRU'; +$proxysettings{'L1_DIRS'} = '16'; +$proxysettings{'OFFLINE_MODE'} = 'off'; +$proxysettings{'CLASSROOM_EXT'} = 'off'; +$proxysettings{'SUPERVISOR_PASSWORD'} = ''; +$proxysettings{'NO_PROXY_LOCAL'} = 'off'; +$proxysettings{'NO_PROXY_LOCAL_BLUE'} = 'off'; +$proxysettings{'TIME_ACCESS_MODE'} = 'allow'; +$proxysettings{'TIME_FROM_HOUR'} = '00'; +$proxysettings{'TIME_FROM_MINUTE'} = '00'; +$proxysettings{'TIME_TO_HOUR'} = '24'; +$proxysettings{'TIME_TO_MINUTE'} = '00'; $proxysettings{'MAX_OUTGOING_SIZE'} = '0'; $proxysettings{'MAX_INCOMING_SIZE'} = '0'; -$proxysettings{'LOGGING'} = 'off'; -$proxysettings{'PROXY_PORT'} = '800'; -$proxysettings{'EXTENSION_METHODS'} = ''; +$proxysettings{'THROTTLING_GREEN_TOTAL'} = 'unlimited'; +$proxysettings{'THROTTLING_GREEN_HOST'} = 'unlimited'; +$proxysettings{'THROTTLING_BLUE_TOTAL'} = 'unlimited'; +$proxysettings{'THROTTLING_BLUE_HOST'} = 'unlimited'; +$proxysettings{'THROTTLE_BINARY'} = 'off'; +$proxysettings{'THROTTLE_DSKIMG'} = 'off'; +$proxysettings{'THROTTLE_MMEDIA'} = 'off'; +$proxysettings{'ENABLE_MIME_FILTER'} = 'off'; +$proxysettings{'ENABLE_BROWSER_CHECK'} = 'off'; +$proxysettings{'FAKE_USERAGENT'} = ''; +$proxysettings{'FAKE_REFERER'} = ''; +$proxysettings{'AUTH_METHOD'} = 'none'; +$proxysettings{'AUTH_REALM'} = ''; +$proxysettings{'AUTH_MAX_USERIP'} = ''; +$proxysettings{'AUTH_CACHE_TTL'} = '60'; +$proxysettings{'AUTH_IPCACHE_TTL'} = '0'; +$proxysettings{'AUTH_CHILDREN'} = '5'; +$proxysettings{'NCSA_MIN_PASS_LEN'} = '6'; +$proxysettings{'NCSA_BYPASS_REDIR'} = 'off'; +$proxysettings{'NCSA_USERNAME'} = ''; +$proxysettings{'NCSA_GROUP'} = ''; +$proxysettings{'NCSA_PASS'} = ''; +$proxysettings{'NCSA_PASS_CONFIRM'} = ''; +$proxysettings{'LDAP_BASEDN'} = ''; +$proxysettings{'LDAP_TYPE'} = 'ADS'; +$proxysettings{'LDAP_SERVER'} = ''; +$proxysettings{'LDAP_PORT'} = '389'; +$proxysettings{'LDAP_BINDDN_USER'} = ''; +$proxysettings{'LDAP_BINDDN_PASS'} = ''; +$proxysettings{'LDAP_GROUP'} = ''; +$proxysettings{'NTLM_DOMAIN'} = ''; +$proxysettings{'NTLM_PDC'} = ''; +$proxysettings{'NTLM_BDC'} = ''; +$proxysettings{'NTLM_ENABLE_ACL'} = 'off'; +$proxysettings{'NTLM_USER_ACL'} = 'positive'; +$proxysettings{'RADIUS_SERVER'} = ''; +$proxysettings{'RADIUS_PORT'} = '1812'; +$proxysettings{'RADIUS_IDENTIFIER'} = ''; +$proxysettings{'RADIUS_SECRET'} = ''; +$proxysettings{'RADIUS_ENABLE_ACL'} = 'off'; +$proxysettings{'RADIUS_USER_ACL'} = 'positive'; +$proxysettings{'IDENT_REQUIRED'} = 'off'; +$proxysettings{'IDENT_TIMEOUT'} = '10'; +$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'}; &Header::getcgihash(\%proxysettings); -my $needhup = 0; -my $cachemem = ''; +if ($proxysettings{'THROTTLING_GREEN_TOTAL'} eq 0) {$proxysettings{'THROTTLING_GREEN_TOTAL'} = 'unlimited';} +if ($proxysettings{'THROTTLING_GREEN_HOST'} eq 0) {$proxysettings{'THROTTLING_GREEN_HOST'} = 'unlimited';} +if ($proxysettings{'THROTTLING_BLUE_TOTAL'} eq 0) {$proxysettings{'THROTTLING_BLUE_TOTAL'} = 'unlimited';} +if ($proxysettings{'THROTTLING_BLUE_HOST'} eq 0) {$proxysettings{'THROTTLING_BLUE_HOST'} = 'unlimited';} + +if ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy NCSA user management'}) +{ + $proxysettings{'NCSA_EDIT_MODE'} = 'yes'; +} + +if ($proxysettings{'ACTION'} eq $Lang::tr{'add'}) +{ + $proxysettings{'NCSA_EDIT_MODE'} = 'yes'; + if (length($proxysettings{'NCSA_PASS'}) < $proxysettings{'NCSA_MIN_PASS_LEN'}) { + $errormessage = $Lang::tr{'advproxy errmsg password length 1'}.$proxysettings{'NCSA_MIN_PASS_LEN'}.$Lang::tr{'advproxy errmsg password length 2'}; + } + if (!($proxysettings{'NCSA_PASS'} eq $proxysettings{'NCSA_PASS_CONFIRM'})) { + $errormessage = $Lang::tr{'advproxy errmsg passwords different'}; + } + if ($proxysettings{'NCSA_USERNAME'} eq '') { + $errormessage = $Lang::tr{'advproxy errmsg no username'}; + } + if (!$errormessage) { + $proxysettings{'NCSA_USERNAME'} =~ tr/A-Z/a-z/; + &adduser($proxysettings{'NCSA_USERNAME'}, $proxysettings{'NCSA_PASS'}, $proxysettings{'NCSA_GROUP'}); + } + $proxysettings{'NCSA_USERNAME'} = ''; + $proxysettings{'NCSA_GROUP'} = ''; + $proxysettings{'NCSA_PASS'} = ''; + $proxysettings{'NCSA_PASS_CONFIRM'} = ''; +} + +if ($proxysettings{'ACTION'} eq $Lang::tr{'remove'}) +{ + $proxysettings{'NCSA_EDIT_MODE'} = 'yes'; + &deluser($proxysettings{'ID'}); +} + +$checked{'ENABLE_UPDXLRATOR'}{'off'} = ''; +$checked{'ENABLE_UPDXLRATOR'}{'on'} = ''; +$checked{'ENABLE_UPDXLRATOR'}{$proxysettings{'ENABLE_UPDXLRATOR'}} = "checked='checked'"; -if ($proxysettings{'ACTION'} eq $Lang::tr{'save'}) +if ($proxysettings{'ACTION'} eq $Lang::tr{'edit'}) { - - #assume error - my $configerror = 1; + $proxysettings{'NCSA_EDIT_MODE'} = 'yes'; + $ncsa_buttontext = $Lang::tr{'advproxy NCSA update user'}; + @temp = split(/:/,$proxysettings{'ID'}); + $proxysettings{'NCSA_USERNAME'} = $temp[0]; + $proxysettings{'NCSA_GROUP'} = $temp[1]; + $proxysettings{'NCSA_PASS'} = "lEaVeAlOnE"; + $proxysettings{'NCSA_PASS_CONFIRM'} = $proxysettings{'NCSA_PASS'}; +} - 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'}; + goto ERROR; + } if (!($proxysettings{'CACHE_SIZE'} =~ /^\d+/) || ($proxysettings{'CACHE_SIZE'} < 10)) { - $errormessage = $Lang::tr{'invalid 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+/) || + ($proxysettings{'CACHE_MEM'} < 1)) + { + $errormessage = $Lang::tr{'advproxy errmsg mem cache size'}; goto ERROR; - } + } + my @free = `/usr/bin/free`; + $free[1] =~ m/(\d+)/; + $cachemem = int $1 / 2048; + if ($proxysettings{'CACHE_MEM'} > $cachemem) { + $proxysettings{'CACHE_MEM'} = $cachemem; + } if (!($proxysettings{'MAX_SIZE'} =~ /^\d+/)) { $errormessage = $Lang::tr{'invalid maximum object size'}; @@ -88,206 +390,288 @@ if ($proxysettings{'ACTION'} eq $Lang::tr{'save'}) $errormessage = $Lang::tr{'invalid maximum outgoing size'}; goto ERROR; } + if (!($proxysettings{'TIME_TO_HOUR'}.$proxysettings{'TIME_TO_MINUTE'} gt $proxysettings{'TIME_FROM_HOUR'}.$proxysettings{'TIME_FROM_MINUTE'})) + { + $errormessage = $Lang::tr{'advproxy errmsg time restriction'}; + goto ERROR; + } if (!($proxysettings{'MAX_INCOMING_SIZE'} =~ /^\d+/)) { $errormessage = $Lang::tr{'invalid maximum incoming size'}; goto ERROR; } - - if (!($proxysettings{'EXTENSION_METHODS'} =~ /^(|[A-Z0-9 _-]+)$/)) + if (!($proxysettings{'CHILDREN'} =~ /^\d+$/) || ($proxysettings{'CHILDREN'} < 1)) { - $errormessage = $Lang::tr{'squid extension methods invalid'}; + $errormessage = $Lang::tr{'advproxy invalid num of children'}; goto ERROR; } - - # Quick parent proxy error checking of username and password info. If username password don't both exist give an error. - my $proxy1 = 'YES'; - my $proxy2 = 'YES'; - if (($proxysettings{'UPSTREAM_USER'} eq '')) {$proxy1 = '';} - if (($proxysettings{'UPSTREAM_PASSWORD'} eq '')) {$proxy2 = '';} - if (($proxy1 ne $proxy2)) - { - $errormessage = $Lang::tr{'invalid upstream proxy username or password setting'}; - goto ERROR; - } - - $_ = $proxysettings{'UPSTREAM_PROXY'}; - my ($remotehost, $remoteport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/); - $remoteport = 80 if ($remoteport eq ''); - - $proxysettings{'VALID'} = 'yes'; - &General::writehash("${General::swroot}/proxy/settings", \%proxysettings); - - # - # NAH, 03-Jan-2004 - # - my @free = `/usr/bin/free`; - $free[1] =~ m/(\d+)/; - $cachemem = int $1 / 10; - if ($cachemem < 4096) { - $cachemem = 4096; + if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') + { + $browser_regexp = ''; + foreach (@useragentlist) + { + chomp; + @useragent = split(/,/); + if ($proxysettings{'UA_'.$useragent[0]} eq 'on') { $browser_regexp .= "$useragent[2]|"; } + } + chop($browser_regexp); + if (!$browser_regexp) + { + $errormessage = $Lang::tr{'advproxy errmsg no browser'}; + goto ERROR; + } } - if ($cachemem > $proxysettings{'CACHE_SIZE'} * 40) { - $cachemem = ( $proxysettings{'CACHE_SIZE'} * 40 ); + if (!($proxysettings{'AUTH_METHOD'} eq 'none')) + { + unless (($proxysettings{'AUTH_METHOD'} eq 'ident') && + ($proxysettings{'IDENT_REQUIRED'} eq 'off') && + ($proxysettings{'IDENT_ENABLE_ACL'} eq 'off')) + { + if ($netsettings{'BLUE_DEV'}) + { + if ((($proxysettings{'ENABLE'} eq 'off') || ($proxysettings{'TRANSPARENT'} eq 'on')) && + (($proxysettings{'ENABLE_BLUE'} eq 'off') || ($proxysettings{'TRANSPARENT_BLUE'} eq 'on'))) + { + $errormessage = $Lang::tr{'advproxy errmsg non-transparent proxy required'}; + goto ERROR; + } + } else { + if (($proxysettings{'ENABLE'} eq 'off') || ($proxysettings{'TRANSPARENT'} eq 'on')) + { + $errormessage = $Lang::tr{'advproxy errmsg non-transparent proxy required'}; + goto ERROR; + } + } + } + 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; + } + if (!($proxysettings{'AUTH_CACHE_TTL'} =~ /^\d+/)) + { + $errormessage = $Lang::tr{'advproxy errmsg auth cache ttl'}; + goto ERROR; + } + if (!($proxysettings{'AUTH_IPCACHE_TTL'} =~ /^\d+/)) + { + $errormessage = $Lang::tr{'advproxy errmsg auth ipcache ttl'}; + goto ERROR; + } + if ((!($proxysettings{'AUTH_MAX_USERIP'} eq '')) && ($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) + { + $errormessage = $Lang::tr{'advproxy errmsg auth ipcache may not be null'}; + goto ERROR; + } + if ((!($proxysettings{'AUTH_CHILDREN'} =~ /^\d+/)) || ($proxysettings{'AUTH_CHILDREN'} < 1) || ($proxysettings{'AUTH_CHILDREN'} > 255)) + { + $errormessage = $Lang::tr{'advproxy errmsg auth children'}; + goto ERROR; + } } - - open(FILE, ">/${General::swroot}/proxy/squid.conf") or die "Unable to write squid.conf file"; - flock(FILE, 2); - print FILE < 255)) + { + $errormessage = $Lang::tr{'advproxy errmsg password length'}; + goto ERROR; + } } - print FILE <) { - $_ =~ s/__GREEN_IP__/$netsettings{'GREEN_ADDRESS'}/; - $_ =~ s/__GREEN_NET__/$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}/; - $_ =~ s/__BLUE_IP__/$blue_ip/; - $_ =~ s/__BLUE_NET__/$blue_net/; - $_ =~ s/__PROXY_PORT__/$proxysettings{'PROXY_PORT'}/; - print FILE $_; - } - close (ACL); + if ($errormessage) { + $proxysettings{'VALID'} = 'no'; } + else { + $proxysettings{'VALID'} = 'yes'; } - # This value is in bytes, so we must turn it from KB into bytes - my $max_incoming_size = $proxysettings{'MAX_INCOMING_SIZE'} * 1024; + if ($proxysettings{'VALID'} eq 'yes') + { + &write_acls; - print FILE </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{'clear cache'}) +if ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy clear cache'}) { - &DoHTML; - system('/usr/local/bin/restartsquid','-f'); + system('/usr/local/bin/squidctrl flush >/dev/null 2>&1'); } -&DoHTML if $NeedDoHTML; - - -sub DoHTML { - -$NeedDoHTML = 0; -&General::readhash("${General::swroot}/proxy/settings", \%proxysettings); - -my %checked=(); +if (!$errormessage) +{ + if (-e "${General::swroot}/proxy/advanced/settings") { + &General::readhash("${General::swroot}/proxy/advanced/settings", \%proxysettings); + } elsif (-e "${General::swroot}/proxy/settings") { + &General::readhash("${General::swroot}/proxy/settings", \%proxysettings); + } + &read_acls; +} $checked{'ENABLE'}{'off'} = ''; $checked{'ENABLE'}{'on'} = ''; @@ -305,11 +689,192 @@ $checked{'TRANSPARENT_BLUE'}{'off'} = ''; $checked{'TRANSPARENT_BLUE'}{'on'} = ''; $checked{'TRANSPARENT_BLUE'}{$proxysettings{'TRANSPARENT_BLUE'}} = "checked='checked'"; +$checked{'SUPPRESS_VERSION'}{'off'} = ''; +$checked{'SUPPRESS_VERSION'}{'on'} = ''; +$checked{'SUPPRESS_VERSION'}{$proxysettings{'SUPPRESS_VERSION'}} = "checked='checked'"; + +$checked{'FORWARD_IPADDRESS'}{'off'} = ''; +$checked{'FORWARD_IPADDRESS'}{'on'} = ''; +$checked{'FORWARD_IPADDRESS'}{$proxysettings{'FORWARD_IPADDRESS'}} = "checked='checked'"; +$checked{'FORWARD_USERNAME'}{'off'} = ''; +$checked{'FORWARD_USERNAME'}{'on'} = ''; +$checked{'FORWARD_USERNAME'}{$proxysettings{'FORWARD_USERNAME'}} = "checked='checked'"; +$checked{'FORWARD_VIA'}{'off'} = ''; +$checked{'FORWARD_VIA'}{'on'} = ''; +$checked{'FORWARD_VIA'}{$proxysettings{'FORWARD_VIA'}} = "checked='checked'"; +$checked{'NO_CONNECTION_AUTH'}{'off'} = ''; +$checked{'NO_CONNECTION_AUTH'}{'on'} = ''; +$checked{'NO_CONNECTION_AUTH'}{$proxysettings{'NO_CONNECTION_AUTH'}} = "checked='checked'"; + +$selected{'MEM_POLICY'}{$proxysettings{'MEM_POLICY'}} = "selected='selected'"; +$selected{'CACHE_POLICY'}{$proxysettings{'CACHE_POLICY'}} = "selected='selected'"; +$selected{'L1_DIRS'}{$proxysettings{'L1_DIRS'}} = "selected='selected'"; +$checked{'OFFLINE_MODE'}{'off'} = ''; +$checked{'OFFLINE_MODE'}{'on'} = ''; +$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'"; +$checked{'LOGUSERAGENT'}{'off'} = ''; +$checked{'LOGUSERAGENT'}{'on'} = ''; +$checked{'LOGUSERAGENT'}{$proxysettings{'LOGUSERAGENT'}} = "checked='checked'"; + +$selected{'ERR_LANGUAGE'}{$proxysettings{'ERR_LANGUAGE'}} = "selected='selected'"; +$selected{'ERR_DESIGN'}{$proxysettings{'ERR_DESIGN'}} = "selected='selected'"; + +$checked{'NO_PROXY_LOCAL'}{'off'} = ''; +$checked{'NO_PROXY_LOCAL'}{'on'} = ''; +$checked{'NO_PROXY_LOCAL'}{$proxysettings{'NO_PROXY_LOCAL'}} = "checked='checked'"; +$checked{'NO_PROXY_LOCAL_BLUE'}{'off'} = ''; +$checked{'NO_PROXY_LOCAL_BLUE'}{'on'} = ''; +$checked{'NO_PROXY_LOCAL_BLUE'}{$proxysettings{'NO_PROXY_LOCAL_BLUE'}} = "checked='checked'"; + +$checked{'CLASSROOM_EXT'}{'off'} = ''; +$checked{'CLASSROOM_EXT'}{'on'} = ''; +$checked{'CLASSROOM_EXT'}{$proxysettings{'CLASSROOM_EXT'}} = "checked='checked'"; + +$selected{'TIME_ACCESS_MODE'}{$proxysettings{'TIME_ACCESS_MODE'}} = "selected='selected'"; +$selected{'TIME_FROM_HOUR'}{$proxysettings{'TIME_FROM_HOUR'}} = "selected='selected'"; +$selected{'TIME_FROM_MINUTE'}{$proxysettings{'TIME_FROM_MINUTE'}} = "selected='selected'"; +$selected{'TIME_TO_HOUR'}{$proxysettings{'TIME_TO_HOUR'}} = "selected='selected'"; +$selected{'TIME_TO_MINUTE'}{$proxysettings{'TIME_TO_MINUTE'}} = "selected='selected'"; + +$proxysettings{'TIME_MON'} = 'on' unless exists $proxysettings{'TIME_MON'}; +$proxysettings{'TIME_TUE'} = 'on' unless exists $proxysettings{'TIME_TUE'}; +$proxysettings{'TIME_WED'} = 'on' unless exists $proxysettings{'TIME_WED'}; +$proxysettings{'TIME_THU'} = 'on' unless exists $proxysettings{'TIME_THU'}; +$proxysettings{'TIME_FRI'} = 'on' unless exists $proxysettings{'TIME_FRI'}; +$proxysettings{'TIME_SAT'} = 'on' unless exists $proxysettings{'TIME_SAT'}; +$proxysettings{'TIME_SUN'} = 'on' unless exists $proxysettings{'TIME_SUN'}; + +$checked{'TIME_MON'}{'off'} = ''; +$checked{'TIME_MON'}{'on'} = ''; +$checked{'TIME_MON'}{$proxysettings{'TIME_MON'}} = "checked='checked'"; +$checked{'TIME_TUE'}{'off'} = ''; +$checked{'TIME_TUE'}{'on'} = ''; +$checked{'TIME_TUE'}{$proxysettings{'TIME_TUE'}} = "checked='checked'"; +$checked{'TIME_WED'}{'off'} = ''; +$checked{'TIME_WED'}{'on'} = ''; +$checked{'TIME_WED'}{$proxysettings{'TIME_WED'}} = "checked='checked'"; +$checked{'TIME_THU'}{'off'} = ''; +$checked{'TIME_THU'}{'on'} = ''; +$checked{'TIME_THU'}{$proxysettings{'TIME_THU'}} = "checked='checked'"; +$checked{'TIME_FRI'}{'off'} = ''; +$checked{'TIME_FRI'}{'on'} = ''; +$checked{'TIME_FRI'}{$proxysettings{'TIME_FRI'}} = "checked='checked'"; +$checked{'TIME_SAT'}{'off'} = ''; +$checked{'TIME_SAT'}{'on'} = ''; +$checked{'TIME_SAT'}{$proxysettings{'TIME_SAT'}} = "checked='checked'"; +$checked{'TIME_SUN'}{'off'} = ''; +$checked{'TIME_SUN'}{'on'} = ''; +$checked{'TIME_SUN'}{$proxysettings{'TIME_SUN'}} = "checked='checked'"; + +$selected{'THROTTLING_GREEN_TOTAL'}{$proxysettings{'THROTTLING_GREEN_TOTAL'}} = "selected='selected'"; +$selected{'THROTTLING_GREEN_HOST'}{$proxysettings{'THROTTLING_GREEN_HOST'}} = "selected='selected'"; +$selected{'THROTTLING_BLUE_TOTAL'}{$proxysettings{'THROTTLING_BLUE_TOTAL'}} = "selected='selected'"; +$selected{'THROTTLING_BLUE_HOST'}{$proxysettings{'THROTTLING_BLUE_HOST'}} = "selected='selected'"; + +$checked{'THROTTLE_BINARY'}{'off'} = ''; +$checked{'THROTTLE_BINARY'}{'on'} = ''; +$checked{'THROTTLE_BINARY'}{$proxysettings{'THROTTLE_BINARY'}} = "checked='checked'"; +$checked{'THROTTLE_DSKIMG'}{'off'} = ''; +$checked{'THROTTLE_DSKIMG'}{'on'} = ''; +$checked{'THROTTLE_DSKIMG'}{$proxysettings{'THROTTLE_DSKIMG'}} = "checked='checked'"; +$checked{'THROTTLE_MMEDIA'}{'off'} = ''; +$checked{'THROTTLE_MMEDIA'}{'on'} = ''; +$checked{'THROTTLE_MMEDIA'}{$proxysettings{'THROTTLE_MMEDIA'}} = "checked='checked'"; + +$checked{'ENABLE_MIME_FILTER'}{'off'} = ''; +$checked{'ENABLE_MIME_FILTER'}{'on'} = ''; +$checked{'ENABLE_MIME_FILTER'}{$proxysettings{'ENABLE_MIME_FILTER'}} = "checked='checked'"; + +$checked{'ENABLE_BROWSER_CHECK'}{'off'} = ''; +$checked{'ENABLE_BROWSER_CHECK'}{'on'} = ''; +$checked{'ENABLE_BROWSER_CHECK'}{$proxysettings{'ENABLE_BROWSER_CHECK'}} = "checked='checked'"; + +foreach (@useragentlist) { + @useragent = split(/,/); + $checked{'UA_'.$useragent[0]}{'off'} = ''; + $checked{'UA_'.$useragent[0]}{'on'} = ''; + $checked{'UA_'.$useragent[0]}{$proxysettings{'UA_'.$useragent[0]}} = "checked='checked'"; +} + +$checked{'AUTH_METHOD'}{'none'} = ''; +$checked{'AUTH_METHOD'}{'ncsa'} = ''; +$checked{'AUTH_METHOD'}{'ident'} = ''; +$checked{'AUTH_METHOD'}{'ldap'} = ''; +$checked{'AUTH_METHOD'}{'ntlm'} = ''; +$checked{'AUTH_METHOD'}{'radius'} = ''; +$checked{'AUTH_METHOD'}{$proxysettings{'AUTH_METHOD'}} = "checked='checked'"; + +$proxysettings{'AUTH_ALWAYS_REQUIRED'} = 'on' unless exists $proxysettings{'AUTH_ALWAYS_REQUIRED'}; + +$checked{'AUTH_ALWAYS_REQUIRED'}{'off'} = ''; +$checked{'AUTH_ALWAYS_REQUIRED'}{'on'} = ''; +$checked{'AUTH_ALWAYS_REQUIRED'}{$proxysettings{'AUTH_ALWAYS_REQUIRED'}} = "checked='checked'"; + +$checked{'NCSA_BYPASS_REDIR'}{'off'} = ''; +$checked{'NCSA_BYPASS_REDIR'}{'on'} = ''; +$checked{'NCSA_BYPASS_REDIR'}{$proxysettings{'NCSA_BYPASS_REDIR'}} = "checked='checked'"; + +$selected{'NCSA_GROUP'}{$proxysettings{'NCSA_GROUP'}} = "selected='selected'"; + +$selected{'LDAP_TYPE'}{$proxysettings{'LDAP_TYPE'}} = "selected='selected'"; + +$proxysettings{'NTLM_ENABLE_INT_AUTH'} = 'on' unless exists $proxysettings{'NTLM_ENABLE_INT_AUTH'}; + +$checked{'NTLM_ENABLE_INT_AUTH'}{'off'} = ''; +$checked{'NTLM_ENABLE_INT_AUTH'}{'on'} = ''; +$checked{'NTLM_ENABLE_INT_AUTH'}{$proxysettings{'NTLM_ENABLE_INT_AUTH'}} = "checked='checked'"; + +$checked{'NTLM_ENABLE_ACL'}{'off'} = ''; +$checked{'NTLM_ENABLE_ACL'}{'on'} = ''; +$checked{'NTLM_ENABLE_ACL'}{$proxysettings{'NTLM_ENABLE_ACL'}} = "checked='checked'"; + +$checked{'NTLM_USER_ACL'}{'positive'} = ''; +$checked{'NTLM_USER_ACL'}{'negative'} = ''; +$checked{'NTLM_USER_ACL'}{$proxysettings{'NTLM_USER_ACL'}} = "checked='checked'"; + +$checked{'RADIUS_ENABLE_ACL'}{'off'} = ''; +$checked{'RADIUS_ENABLE_ACL'}{'on'} = ''; +$checked{'RADIUS_ENABLE_ACL'}{$proxysettings{'RADIUS_ENABLE_ACL'}} = "checked='checked'"; + +$checked{'RADIUS_USER_ACL'}{'positive'} = ''; +$checked{'RADIUS_USER_ACL'}{'negative'} = ''; +$checked{'RADIUS_USER_ACL'}{$proxysettings{'RADIUS_USER_ACL'}} = "checked='checked'"; + +$checked{'IDENT_REQUIRED'}{'off'} = ''; +$checked{'IDENT_REQUIRED'}{'on'} = ''; +$checked{'IDENT_REQUIRED'}{$proxysettings{'IDENT_REQUIRED'}} = "checked='checked'"; + +$checked{'IDENT_ENABLE_ACL'}{'off'} = ''; +$checked{'IDENT_ENABLE_ACL'}{'on'} = ''; +$checked{'IDENT_ENABLE_ACL'}{$proxysettings{'IDENT_ENABLE_ACL'}} = "checked='checked'"; + +$checked{'IDENT_USER_ACL'}{'positive'} = ''; +$checked{'IDENT_USER_ACL'}{'negative'} = ''; +$checked{'IDENT_USER_ACL'}{$proxysettings{'IDENT_USER_ACL'}} = "checked='checked'"; + +$checked{'ENABLE_FILTER'}{'off'} = ''; +$checked{'ENABLE_FILTER'}{'on'} = ''; +$checked{'ENABLE_FILTER'}{$proxysettings{'ENABLE_FILTER'}} = "checked='checked'"; + +$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{'web proxy configuration'}, 1, ''); +&Header::openpage($Lang::tr{'advproxy advanced web proxy configuration'}, 1, ''); &Header::openbigbox('100%', 'left', '', $errormessage); @@ -319,103 +884,3125 @@ if ($errormessage) { &Header::closebox(); } +if ($squidversion[0] =~ /^Squid\sCache:\sVersion\s/i) +{ + $squidversion[0] =~ s/^Squid\sCache:\sVersion//i; + $squidversion[0] =~ s/^\s+//g; + $squidversion[0] =~ s/\s+$//g; +} else { + $squidversion[0] = $Lang::tr{'advproxy unknown'}; +} + +# =================================================================== +# Main settings +# =================================================================== + +unless ($proxysettings{'NCSA_EDIT_MODE'} eq 'yes') { + print "
\n"; -&Header::openbox('100%', 'left', "$Lang::tr{'web proxy'}:"); +&Header::openbox('100%', 'left', "$Lang::tr{'advproxy advanced web proxy'}"); + print < - $Lang::tr{'enabled on'} Green: - - $Lang::tr{'upstream proxy host:port'}: * - + $Lang::tr{'advproxy common settings'} - $Lang::tr{'transparent on'} Green: + $Lang::tr{'advproxy enabled on'} Green: + + $Lang::tr{'advproxy proxy port'}: + + + + $Lang::tr{'advproxy transparent on'} Green: - $Lang::tr{'upstream username'} * - + $Lang::tr{'advproxy visible hostname'}: * + END ; if ($netsettings{'BLUE_DEV'}) { - print "$Lang::tr{'enabled on'} Blue:"; + print "$Lang::tr{'advproxy enabled on'} Blue:"; print ""; } else { print " "; } print <$Lang::tr{'upstream password'} * - +   END ; if ($netsettings{'BLUE_DEV'}) { - print "$Lang::tr{'transparent on'} Blue:"; + print "$Lang::tr{'advproxy transparent on'} Blue:"; print ""; } else { print " "; } print <$Lang::tr{'proxy port'}: - + $Lang::tr{'advproxy error language'}: + + - $Lang::tr{'squid extension methods'}: * - + $Lang::tr{'advproxy suppress version'}: + + $Lang::tr{'advproxy error design'}: + - -
$Lang::tr{'cache management'} + $Lang::tr{'advproxy squid version'}: +  [ $squidversion[0] ] +   +   + +
+ + + +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 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 "
- - + - - - - + + + + - + + + + + + + + + + + + + + + + + +
$Lang::tr{'cache size'}$Lang::tr{'advproxy upstream proxy'}
$Lang::tr{'min size'}$Lang::tr{'max size'}$Lang::tr{'advproxy via forwarding'}:$Lang::tr{'advproxy upstream proxy host:port'} *

$Lang::tr{'transfer limits'}
$Lang::tr{'advproxy client IP forwarding'}:$Lang::tr{'advproxy upstream username'}: *
$Lang::tr{'advproxy username forwarding'}:$Lang::tr{'advproxy upstream password'}: *
$Lang::tr{'advproxy no connection auth'}:  
+
+ + + + + + + + + - - - - + + + +
$Lang::tr{'advproxy log settings'}
$Lang::tr{'advproxy log enabled'}:$Lang::tr{'advproxy log query'}:
$Lang::tr{'max incoming size'}$Lang::tr{'max outgoing size'}  $Lang::tr{'advproxy log useragent'}:
+
-
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + +
- *  - $Lang::tr{'this field may be blank'} + $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'}:$Lang::tr{'advproxy hdd cache size'}:
$Lang::tr{'advproxy min size'}:$Lang::tr{'advproxy max size'}:
$Lang::tr{'advproxy number of L1 dirs'}: + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy no cache sites'}: *
- -
$Lang::tr{'advproxy memory replacement policy'}:
$Lang::tr{'advproxy cache replacement policy'}:
 
$Lang::tr{'advproxy offline mode'}:
+
+ + + + + + + + + + + + + + + +
$Lang::tr{'advproxy destination ports'}
$Lang::tr{'advproxy standard ports'}:$Lang::tr{'advproxy ssl ports'}:
+
+ + + + + + + + + + + + +END +; + +$line = $Lang::tr{'advproxy no internal proxy on green'}; +$line =~ s/Green/Green<\/font>/i; +print "\n"; +print < + +END +; +if ($netsettings{'BLUE_DEV'}) { + $line = $Lang::tr{'advproxy no internal proxy on blue'}; + $line =~ s/Blue/Blue<\/font>/i; + print "\n"; + print "\n"; + print < + +END +; +} +print < + + + + + +
$Lang::tr{'advproxy network based access'}
$Lang::tr{'advproxy allowed subnets'}:
$line:
$line:
 
 
+ + + + + + + + + + + +
$Lang::tr{'advproxy unrestricted ip clients'}: *$Lang::tr{'advproxy unrestricted mac clients'}: *
+ + + + + + + + + + + + +
$Lang::tr{'advproxy banned ip clients'}: *$Lang::tr{'advproxy banned mac clients'}: *
+ +
+ +END +; +# ------------------------------------------------------------------- +# CRE GUI - optional +# ------------------------------------------------------------------- + +if (-e $cre_enabled) { print < + + + $Lang::tr{'advproxy classroom extensions'} $Lang::tr{'advproxy enabled'}: + + + + + + +END +; +if ($proxysettings{'CLASSROOM_EXT'} eq 'on'){ +print <$Lang::tr{'advproxy supervisor password'}: * + + + + $Lang::tr{'advproxy cre group definitions'}: + $Lang::tr{'advproxy cre supervisors'}: * +END +; +} +print ""; +if ($proxysettings{'CLASSROOM_EXT'} eq 'on'){ +print < + + + +END +; +} +print "
"; + +} else { + print < + + +END +; +} + +# ------------------------------------------------------------------- + +print < + + $Lang::tr{'advproxy time restrictions'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy access'} $Lang::tr{'advproxy monday'}$Lang::tr{'advproxy tuesday'}$Lang::tr{'advproxy wednesday'}$Lang::tr{'advproxy thursday'}$Lang::tr{'advproxy friday'}$Lang::tr{'advproxy saturday'}$Lang::tr{'advproxy sunday'}  $Lang::tr{'advproxy from'} $Lang::tr{'advproxy to'} 
+ +    + : + - + : +
+
+ + + + + + + + + + +
$Lang::tr{'advproxy transfer limits'}
$Lang::tr{'advproxy max download size'}:$Lang::tr{'advproxy max upload size'}:
+
+ + + + + + + + + + +END +; + +if ($netsettings{'BLUE_DEV'}) { + print < + + + + + +END +; +} + +print < +
$Lang::tr{'advproxy download throttling'}
$Lang::tr{'advproxy throttling total on'} Green: + + $Lang::tr{'advproxy throttling per host on'} Green: + +
$Lang::tr{'advproxy throttling total on'} Blue: + + $Lang::tr{'advproxy throttling per host on'} Blue: + +
+ + + + + + + + + + + + + +
$Lang::tr{'advproxy content based throttling'}:
$Lang::tr{'advproxy throttle binary'}:$Lang::tr{'advproxy throttle dskimg'}:$Lang::tr{'advproxy throttle mmedia'}:  
+
+ + + + +END +; +if ( $proxysettings{'ENABLE_MIME_FILTER'} eq 'on' ){ +print < + + + + + + + + + +END +; +} +print < + +
+
$Lang::tr{'advproxy MIME filter'} $Lang::tr{'advproxy enabled'}:
$Lang::tr{'advproxy MIME block types'}: *  
  
+ + + +END +; +if ( $proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on' ){ +print < + + +
$Lang::tr{'advproxy web browser'} $Lang::tr{'advproxy UA enable filter'}:
+END +; +if (@useragentlist) { print "$Lang::tr{'advproxy allowed web browsers'}:"; } else { print "$Lang::tr{'advproxy no clients defined'}"; } +print <
+ +END +; + +for ($n=0; $n<=@useragentlist; $n = $n + $i) { + for ($i=0; $i<=3; $i++) { + if ($i eq 0) { print "\n"; } + if (($n+$i) < @useragentlist) { + @useragent = split(/,/,@useragentlist[$n+$i]); + print "\n"; + } + if ($i eq 3) { print "<\/tr>\n"; } + } +} +} +print < +
+
$useragent[1]:<\/td>\n"; + print "
+ + + + + + + + + + + +
$Lang::tr{'advproxy privacy'}
$Lang::tr{'advproxy fake useragent'}: *$Lang::tr{'advproxy fake referer'}: *
+
+END +; + +print < + + $Lang::tr{'advproxy AUTH method'} + + + $Lang::tr{'advproxy AUTH method none'} + $Lang::tr{'advproxy AUTH method ncsa'} + $Lang::tr{'advproxy AUTH method ident'} + $Lang::tr{'advproxy AUTH method ldap'} + $Lang::tr{'advproxy AUTH method ntlm'} + $Lang::tr{'advproxy AUTH method radius'} + + +END +; + +if (!($proxysettings{'AUTH_METHOD'} eq 'none')) { if (!($proxysettings{'AUTH_METHOD'} eq 'ident')) { print < + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy AUTH global settings'}
$Lang::tr{'advproxy AUTH number of auth processes'}: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy AUTH realm'}: *
$Lang::tr{'advproxy AUTH no auth'}: *
+
$Lang::tr{'advproxy AUTH auth cache TTL'}:
$Lang::tr{'advproxy AUTH limit of IP addresses'}: *
$Lang::tr{'advproxy AUTH user IP cache TTL'}:
$Lang::tr{'advproxy AUTH always required'}:
 
+END +; +} + +# =================================================================== +# NCSA auth settings +# =================================================================== + +if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') { +print < + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy NCSA auth'}
$Lang::tr{'advproxy NCSA min password length'}:$Lang::tr{'advproxy NCSA redirector bypass'} \'$Lang::tr{'advproxy NCSA grp extended'}\':

 
  
+END +; } + +# =================================================================== +# IDENTD auth settings +# =================================================================== + +if ($proxysettings{'AUTH_METHOD'} eq 'ident') { +print < + + + + + + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy IDENT identd settings'}
$Lang::tr{'advproxy IDENT required'}:$Lang::tr{'advproxy AUTH always required'}:
$Lang::tr{'advproxy IDENT timeout'}:  
$Lang::tr{'advproxy IDENT aware hosts'}:$Lang::tr{'advproxy AUTH no auth'}: *
+
+ + + + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy IDENT user based access restrictions'}
$Lang::tr{'advproxy enabled'}:  
+ $Lang::tr{'advproxy IDENT use positive access list'}: + $Lang::tr{'advproxy IDENT use negative access list'}:
$Lang::tr{'advproxy IDENT authorized users'}$Lang::tr{'advproxy IDENT unauthorized users'}
+END +; } + +# =================================================================== +# NTLM auth settings +# =================================================================== + +if ($proxysettings{'AUTH_METHOD'} eq 'ntlm') { +print < + + + + + + + + + + + + +
$Lang::tr{'advproxy NTLM domain settings'}
$Lang::tr{'advproxy NTLM domain'}:$Lang::tr{'advproxy NTLM PDC hostname'}:$Lang::tr{'advproxy NTLM BDC hostname'}: *
+
+ + + + + + + + + +
$Lang::tr{'advproxy NTLM auth mode'}
$Lang::tr{'advproxy NTLM use integrated auth'}: 
+
+ + + + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy NTLM user based access restrictions'}
$Lang::tr{'advproxy enabled'}:  
+ $Lang::tr{'advproxy NTLM use positive access list'}: + $Lang::tr{'advproxy NTLM use negative access list'}:
$Lang::tr{'advproxy NTLM authorized users'}$Lang::tr{'advproxy NTLM unauthorized users'}
+END +; } + +# =================================================================== +# LDAP auth settings +# =================================================================== + +if ($proxysettings{'AUTH_METHOD'} eq 'ldap') { +print < + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy LDAP common settings'}
$Lang::tr{'advproxy LDAP basedn'}:$Lang::tr{'advproxy LDAP type'}:
$Lang::tr{'advproxy LDAP server'}:$Lang::tr{'advproxy LDAP port'}:
+
+ + + + + + + + + + +
$Lang::tr{'advproxy LDAP binddn settings'}
$Lang::tr{'advproxy LDAP binddn username'}:$Lang::tr{'advproxy LDAP binddn password'}:
+
+ + + + + + + + + + +
$Lang::tr{'advproxy LDAP group access control'}
$Lang::tr{'advproxy LDAP group required'}: *  
+END +; } + +# =================================================================== +# RADIUS auth settings +# =================================================================== + +if ($proxysettings{'AUTH_METHOD'} eq 'radius') { +print < + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy RADIUS radius settings'}
$Lang::tr{'advproxy RADIUS server'}:$Lang::tr{'advproxy RADIUS port'}:
$Lang::tr{'advproxy RADIUS identifier'}: *$Lang::tr{'advproxy RADIUS secret'}:
+
+ + + + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy RADIUS user based access restrictions'}
$Lang::tr{'advproxy enabled'}:  
+ $Lang::tr{'advproxy RADIUS use positive access list'}: + $Lang::tr{'advproxy RADIUS use negative access list'}:
$Lang::tr{'advproxy RADIUS authorized users'}$Lang::tr{'advproxy RADIUS unauthorized users'}
+END +; } + +# =================================================================== + +} + +print "\n"; + +if ($proxysettings{'AUTH_METHOD'} eq 'none') { +print < + + + + + + +END +; } + +if ($proxysettings{'AUTH_METHOD'} eq 'ident') { +print < + + + + +END +; } + +if (!($proxysettings{'AUTH_METHOD'} eq 'ncsa')) { +print < + +END +; } + +if (!($proxysettings{'AUTH_METHOD'} eq 'ident')) { +print < + + + + + + +END +; } + +if (!($proxysettings{'AUTH_METHOD'} eq 'ldap')) { +print < + + + + + + +END +; } + +if (!($proxysettings{'AUTH_METHOD'} eq 'ntlm')) { +print < + + + + + + + +END +; } + +if (!($proxysettings{'AUTH_METHOD'} eq 'radius')) { +print < + + + + + + + +END +; } + +print "
\n"; + +print < +END +; + +print < + +   + + + + +   + + + +
+ + + + + +
*  + $Lang::tr{'this field may be blank'} +  
+ +END +; + +&Header::closebox(); + +} else { + +# =================================================================== +# NCSA user management +# =================================================================== + +&Header::openbox('100%', 'left', "$Lang::tr{'advproxy NCSA auth'}"); +print < + + + + + + + + + + + + + + + + + +
$Lang::tr{'advproxy NCSA user management'}
$Lang::tr{'advproxy NCSA username'}:$Lang::tr{'advproxy NCSA group'}: + +
$Lang::tr{'advproxy NCSA password'}:$Lang::tr{'advproxy NCSA password confirm'}:
+
+ + + + + + +END +; + if ($proxysettings{'ACTION'} eq $Lang::tr{'edit'}) { + print "\n"; + } + +print <  + + + +
  
+ +
+ + + + +
$Lang::tr{'advproxy NCSA user accounts'}:
+ +END +; + +if (-e $extgrp) +{ + open(FILE, $extgrp); @grouplist = ; close(FILE); + foreach $user (@grouplist) { chomp($user); push(@userlist,$user.":extended"); } +} +if (-e $stdgrp) +{ + open(FILE, $stdgrp); @grouplist = ; close(FILE); + foreach $user (@grouplist) { chomp($user); push(@userlist,$user.":standard"); } +} +if (-e $disgrp) +{ + open(FILE, $disgrp); @grouplist = ; close(FILE); + foreach $user (@grouplist) { chomp($user); push(@userlist,$user.":disabled"); } +} + +@userlist = sort(@userlist); + +# If the password file contains entries, print entries and action icons + +if ( ! -z "$userdb" ) { + print < + + + + +END +; + $id = 0; + foreach $line (@userlist) + { + $id++; + chomp($line); + @temp = split(/:/,$line); + if($proxysettings{'ACTION'} eq $Lang::tr{'edit'} && $proxysettings{'ID'} eq $line) { + print "\n"; } + elsif ($id % 2) { + print "\n"; } + else { + print "\n"; } + + print <$temp[0] + + + + +END +; + } + +print < +
+
$Lang::tr{'advproxy NCSA username'}$Lang::tr{'advproxy NCSA group membership'} 
+END +; + if ($temp[1] eq 'standard') { + print $Lang::tr{'advproxy NCSA grp standard'}; + } elsif ($temp[1] eq 'extended') { + print $Lang::tr{'advproxy NCSA grp extended'}; + } elsif ($temp[1] eq 'disabled') { + print $Lang::tr{'advproxy NCSA grp disabled'}; } + print < + +
+ + + +
+
+
+ + + +
+
+ + + + + + + +END +; +} else { + print < + + +END +; +} + +print < +END +; + +&Header::closebox(); + +} + +# =================================================================== + +&Header::closebigbox(); + +&Header::closepage(); + +# ------------------------------------------------------------------- + +sub read_acls +{ + if (-e "$acl_src_subnets") { + open(FILE,"$acl_src_subnets"); + delete $proxysettings{'SRC_SUBNETS'}; + while () { $proxysettings{'SRC_SUBNETS'} .= $_ }; + close(FILE); + } + if (-e "$acl_src_banned_ip") { + open(FILE,"$acl_src_banned_ip"); + delete $proxysettings{'SRC_BANNED_IP'}; + while () { $proxysettings{'SRC_BANNED_IP'} .= $_ }; + close(FILE); + } + if (-e "$acl_src_banned_mac") { + open(FILE,"$acl_src_banned_mac"); + delete $proxysettings{'SRC_BANNED_MAC'}; + while () { $proxysettings{'SRC_BANNED_MAC'} .= $_ }; + close(FILE); + } + if (-e "$acl_src_unrestricted_ip") { + open(FILE,"$acl_src_unrestricted_ip"); + delete $proxysettings{'SRC_UNRESTRICTED_IP'}; + while () { $proxysettings{'SRC_UNRESTRICTED_IP'} .= $_ }; + close(FILE); + } + if (-e "$acl_src_unrestricted_mac") { + open(FILE,"$acl_src_unrestricted_mac"); + delete $proxysettings{'SRC_UNRESTRICTED_MAC'}; + while () { $proxysettings{'SRC_UNRESTRICTED_MAC'} .= $_ }; + close(FILE); + } + if (-e "$acl_dst_nocache") { + open(FILE,"$acl_dst_nocache"); + delete $proxysettings{'DST_NOCACHE'}; + while () { $proxysettings{'DST_NOCACHE'} .= $_ }; + close(FILE); + } + if (-e "$acl_dst_noauth") { + open(FILE,"$acl_dst_noauth"); + delete $proxysettings{'DST_NOAUTH'}; + while () { $proxysettings{'DST_NOAUTH'} .= $_ }; + close(FILE); + } + if (-e "$acl_ports_safe") { + open(FILE,"$acl_ports_safe"); + delete $proxysettings{'PORTS_SAFE'}; + while () { $proxysettings{'PORTS_SAFE'} .= $_ }; + close(FILE); + } + if (-e "$acl_ports_ssl") { + open(FILE,"$acl_ports_ssl"); + delete $proxysettings{'PORTS_SSL'}; + while () { $proxysettings{'PORTS_SSL'} .= $_ }; + close(FILE); + } + if (-e "$mimetypes") { + open(FILE,"$mimetypes"); + delete $proxysettings{'MIME_TYPES'}; + while () { $proxysettings{'MIME_TYPES'} .= $_ }; + close(FILE); + } + if (-e "$ntlmdir/msntauth.allowusers") { + open(FILE,"$ntlmdir/msntauth.allowusers"); + delete $proxysettings{'NTLM_ALLOW_USERS'}; + while () { $proxysettings{'NTLM_ALLOW_USERS'} .= $_ }; + close(FILE); + } + if (-e "$ntlmdir/msntauth.denyusers") { + open(FILE,"$ntlmdir/msntauth.denyusers"); + delete $proxysettings{'NTLM_DENY_USERS'}; + while () { $proxysettings{'NTLM_DENY_USERS'} .= $_ }; + close(FILE); + } + if (-e "$raddir/radauth.allowusers") { + open(FILE,"$raddir/radauth.allowusers"); + delete $proxysettings{'RADIUS_ALLOW_USERS'}; + while () { $proxysettings{'RADIUS_ALLOW_USERS'} .= $_ }; + close(FILE); + } + if (-e "$raddir/radauth.denyusers") { + open(FILE,"$raddir/radauth.denyusers"); + delete $proxysettings{'RADIUS_DENY_USERS'}; + while () { $proxysettings{'RADIUS_DENY_USERS'} .= $_ }; + close(FILE); + } + if (-e "$identdir/identauth.allowusers") { + open(FILE,"$identdir/identauth.allowusers"); + delete $proxysettings{'IDENT_ALLOW_USERS'}; + while () { $proxysettings{'IDENT_ALLOW_USERS'} .= $_ }; + close(FILE); + } + if (-e "$identdir/identauth.denyusers") { + open(FILE,"$identdir/identauth.denyusers"); + delete $proxysettings{'IDENT_DENY_USERS'}; + while () { $proxysettings{'IDENT_DENY_USERS'} .= $_ }; + close(FILE); + } + if (-e "$identhosts") { + open(FILE,"$identhosts"); + delete $proxysettings{'IDENT_HOSTS'}; + while () { $proxysettings{'IDENT_HOSTS'} .= $_ }; + close(FILE); + } + if (-e "$cre_groups") { + open(FILE,"$cre_groups"); + delete $proxysettings{'CRE_GROUPS'}; + while () { $proxysettings{'CRE_GROUPS'} .= $_ }; + close(FILE); + } + if (-e "$cre_svhosts") { + open(FILE,"$cre_svhosts"); + delete $proxysettings{'CRE_SVHOSTS'}; + while () { $proxysettings{'CRE_SVHOSTS'} .= $_ }; + close(FILE); + } +} + +# ------------------------------------------------------------------- + +sub check_acls +{ + @temp = split(/\n/,$proxysettings{'PORTS_SAFE'}); + undef $proxysettings{'PORTS_SAFE'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) + { + $line = $_; + if (/^[^#]+\s+#\sSquids\sport/) { s/(^[^#]+)(\s+#\sSquids\sport)/$proxysettings{'PROXY_PORT'}\2/; $line=$_; } + s/#.*//g; s/\s+//g; + if (/.*-.*-.*/) { $errormessage = $Lang::tr{'advproxy errmsg invalid destination port'}; } + @templist = split(/-/); + foreach (@templist) { unless (&General::validport($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid destination port'}; } } + $proxysettings{'PORTS_SAFE'} .= $line."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'PORTS_SSL'}); + undef $proxysettings{'PORTS_SSL'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) + { + $line = $_; + s/#.*//g; s/\s+//g; + if (/.*-.*-.*/) { $errormessage = $Lang::tr{'advproxy errmsg invalid destination port'}; } + @templist = split(/-/); + foreach (@templist) { unless (&General::validport($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid destination port'}; } } + $proxysettings{'PORTS_SSL'} .= $line."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'DST_NOCACHE'}); + undef $proxysettings{'DST_NOCACHE'}; + foreach (@temp) + { + s/^\s+//g; + unless (/^#/) { s/\s+//g; } + if ($_) + { + if (/^\./) { $_ = '*'.$_; } + $proxysettings{'DST_NOCACHE'} .= $_."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'SRC_SUBNETS'}); + undef $proxysettings{'SRC_SUBNETS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) + { + unless (&General::validipandmask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; } + $proxysettings{'SRC_SUBNETS'} .= $_."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'SRC_BANNED_IP'}); + undef $proxysettings{'SRC_BANNED_IP'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) + { + unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; } + $proxysettings{'SRC_BANNED_IP'} .= $_."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'SRC_BANNED_MAC'}); + undef $proxysettings{'SRC_BANNED_MAC'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; s/-/:/g; + if ($_) + { + unless (&General::validmac($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid mac'}; } + $proxysettings{'SRC_BANNED_MAC'} .= $_."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'SRC_UNRESTRICTED_IP'}); + undef $proxysettings{'SRC_UNRESTRICTED_IP'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) + { + unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; } + $proxysettings{'SRC_UNRESTRICTED_IP'} .= $_."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'SRC_UNRESTRICTED_MAC'}); + undef $proxysettings{'SRC_UNRESTRICTED_MAC'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; s/-/:/g; + if ($_) + { + unless (&General::validmac($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid mac'}; } + $proxysettings{'SRC_UNRESTRICTED_MAC'} .= $_."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'DST_NOAUTH'}); + undef $proxysettings{'DST_NOAUTH'}; + foreach (@temp) + { + s/^\s+//g; + unless (/^#/) { s/\s+//g; } + if ($_) + { + if (/^\./) { $_ = '*'.$_; } + $proxysettings{'DST_NOAUTH'} .= $_."\n"; + } + } + + if (($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') && ($proxysettings{'NTLM_USER_ACL'} eq 'positive')) + { + @temp = split(/\n/,$proxysettings{'NTLM_ALLOW_USERS'}); + undef $proxysettings{'NTLM_ALLOW_USERS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) { $proxysettings{'NTLM_ALLOW_USERS'} .= $_."\n"; } + } + if ($proxysettings{'NTLM_ALLOW_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; } + } + + if (($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') && ($proxysettings{'NTLM_USER_ACL'} eq 'negative')) + { + @temp = split(/\n/,$proxysettings{'NTLM_DENY_USERS'}); + undef $proxysettings{'NTLM_DENY_USERS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) { $proxysettings{'NTLM_DENY_USERS'} .= $_."\n"; } + } + if ($proxysettings{'NTLM_DENY_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; } + } + + if (($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') && ($proxysettings{'IDENT_USER_ACL'} eq 'positive')) + { + @temp = split(/\n/,$proxysettings{'IDENT_ALLOW_USERS'}); + undef $proxysettings{'IDENT_ALLOW_USERS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) { $proxysettings{'IDENT_ALLOW_USERS'} .= $_."\n"; } + } + if ($proxysettings{'IDENT_ALLOW_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; } + } + + if (($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') && ($proxysettings{'IDENT_USER_ACL'} eq 'negative')) + { + @temp = split(/\n/,$proxysettings{'IDENT_DENY_USERS'}); + undef $proxysettings{'IDENT_DENY_USERS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) { $proxysettings{'IDENT_DENY_USERS'} .= $_."\n"; } + } + if ($proxysettings{'IDENT_DENY_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; } + } + + if (($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') && ($proxysettings{'RADIUS_USER_ACL'} eq 'positive')) + { + @temp = split(/\n/,$proxysettings{'RADIUS_ALLOW_USERS'}); + undef $proxysettings{'RADIUS_ALLOW_USERS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) { $proxysettings{'RADIUS_ALLOW_USERS'} .= $_."\n"; } + } + if ($proxysettings{'RADIUS_ALLOW_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; } + } + + if (($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') && ($proxysettings{'RADIUS_USER_ACL'} eq 'negative')) + { + @temp = split(/\n/,$proxysettings{'RADIUS_DENY_USERS'}); + undef $proxysettings{'RADIUS_DENY_USERS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) { $proxysettings{'RADIUS_DENY_USERS'} .= $_."\n"; } + } + if ($proxysettings{'RADIUS_DENY_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; } + } + + @temp = split(/\n/,$proxysettings{'IDENT_HOSTS'}); + undef $proxysettings{'IDENT_HOSTS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) + { + unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; } + $proxysettings{'IDENT_HOSTS'} .= $_."\n"; + } + } + + @temp = split(/\n/,$proxysettings{'CRE_SVHOSTS'}); + undef $proxysettings{'CRE_SVHOSTS'}; + foreach (@temp) + { + s/^\s+//g; s/\s+$//g; + if ($_) + { + unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; } + $proxysettings{'CRE_SVHOSTS'} .= $_."\n"; + } + } +} + +# ------------------------------------------------------------------- + +sub write_acls +{ + open(FILE, ">$acl_src_subnets"); + flock(FILE, 2); + if (!$proxysettings{'SRC_SUBNETS'}) + { + print FILE "$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}\n"; + if ($netsettings{'BLUE_DEV'}) + { + print FILE "$netsettings{'BLUE_NETADDRESS'}\/$netsettings{'BLUE_NETMASK'}\n"; + } + } else { print FILE $proxysettings{'SRC_SUBNETS'}; } + close(FILE); + + open(FILE, ">$acl_src_banned_ip"); + flock(FILE, 2); + print FILE $proxysettings{'SRC_BANNED_IP'}; + close(FILE); + + open(FILE, ">$acl_src_banned_mac"); + flock(FILE, 2); + print FILE $proxysettings{'SRC_BANNED_MAC'}; + close(FILE); + + open(FILE, ">$acl_src_unrestricted_ip"); + flock(FILE, 2); + print FILE $proxysettings{'SRC_UNRESTRICTED_IP'}; + close(FILE); + + open(FILE, ">$acl_src_unrestricted_mac"); + flock(FILE, 2); + print FILE $proxysettings{'SRC_UNRESTRICTED_MAC'}; + close(FILE); + + open(FILE, ">$acl_dst_noauth"); + flock(FILE, 2); + print FILE $proxysettings{'DST_NOAUTH'}; + close(FILE); + + open(FILE, ">$acl_dst_noauth_net"); + close(FILE); + open(FILE, ">$acl_dst_noauth_dom"); + close(FILE); + open(FILE, ">$acl_dst_noauth_url"); + close(FILE); + + @temp = split(/\n/,$proxysettings{'DST_NOAUTH'}); + foreach(@temp) + { + unless (/^#/) + { + if (/^\*\.\w/) + { + s/^\*//; + open(FILE, ">>$acl_dst_noauth_dom"); + flock(FILE, 2); + print FILE "$_\n"; + close(FILE); + } + elsif (&General::validipormask($_)) + { + open(FILE, ">>$acl_dst_noauth_net"); + flock(FILE, 2); + print FILE "$_\n"; + close(FILE); + } + elsif (/\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?-\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?/) + { + open(FILE, ">>$acl_dst_noauth_net"); + flock(FILE, 2); + print FILE "$_\n"; + close(FILE); + } + else + { + open(FILE, ">>$acl_dst_noauth_url"); + flock(FILE, 2); + if (/^[fh]tt?ps?:\/\//) { print FILE "$_\n"; } else { print FILE "^[fh]tt?ps?://$_\n"; } + close(FILE); + } + } + } + + open(FILE, ">$acl_dst_nocache"); + flock(FILE, 2); + print FILE $proxysettings{'DST_NOCACHE'}; + close(FILE); + + open(FILE, ">$acl_dst_nocache_net"); + close(FILE); + open(FILE, ">$acl_dst_nocache_dom"); + close(FILE); + open(FILE, ">$acl_dst_nocache_url"); + close(FILE); + + @temp = split(/\n/,$proxysettings{'DST_NOCACHE'}); + foreach(@temp) + { + unless (/^#/) + { + if (/^\*\.\w/) + { + s/^\*//; + open(FILE, ">>$acl_dst_nocache_dom"); + flock(FILE, 2); + print FILE "$_\n"; + close(FILE); + } + elsif (&General::validipormask($_)) + { + open(FILE, ">>$acl_dst_nocache_net"); + flock(FILE, 2); + print FILE "$_\n"; + close(FILE); + } + elsif (/\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?-\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?/) + { + open(FILE, ">>$acl_dst_nocache_net"); + flock(FILE, 2); + print FILE "$_\n"; + close(FILE); + } + else + { + open(FILE, ">>$acl_dst_nocache_url"); + flock(FILE, 2); + if (/^[fh]tt?ps?:\/\//) { print FILE "$_\n"; } else { print FILE "^[fh]tt?ps?://$_\n"; } + close(FILE); + } + } + } + + open(FILE, ">$acl_ports_safe"); + flock(FILE, 2); + if (!$proxysettings{'PORTS_SAFE'}) { print FILE $def_ports_safe; } else { print FILE $proxysettings{'PORTS_SAFE'}; } + close(FILE); + + open(FILE, ">$acl_ports_ssl"); + flock(FILE, 2); + if (!$proxysettings{'PORTS_SSL'}) { print FILE $def_ports_ssl; } else { print FILE $proxysettings{'PORTS_SSL'}; } + close(FILE); + + open(FILE, ">$acl_dst_throttle"); + flock(FILE, 2); + if ($proxysettings{'THROTTLE_BINARY'} eq 'on') + { + @temp = split(/\|/,$throttle_binary); + foreach (@temp) { print FILE "\\.$_\$\n"; } + } + if ($proxysettings{'THROTTLE_DSKIMG'} eq 'on') + { + @temp = split(/\|/,$throttle_dskimg); + foreach (@temp) { print FILE "\\.$_\$\n"; } + } + if ($proxysettings{'THROTTLE_MMEDIA'} eq 'on') + { + @temp = split(/\|/,$throttle_mmedia); + foreach (@temp) { print FILE "\\.$_\$\n"; } + } + if (-s $throttled_urls) + { + open(URLFILE, $throttled_urls); + @temp = ; + close(URLFILE); + foreach (@temp) { print FILE; } + } + close(FILE); + + open(FILE, ">$mimetypes"); + flock(FILE, 2); + print FILE $proxysettings{'MIME_TYPES'}; + close(FILE); + + open(FILE, ">$ntlmdir/msntauth.allowusers"); + flock(FILE, 2); + print FILE $proxysettings{'NTLM_ALLOW_USERS'}; + close(FILE); + + open(FILE, ">$ntlmdir/msntauth.denyusers"); + flock(FILE, 2); + print FILE $proxysettings{'NTLM_DENY_USERS'}; + close(FILE); + + open(FILE, ">$raddir/radauth.allowusers"); + flock(FILE, 2); + print FILE $proxysettings{'RADIUS_ALLOW_USERS'}; + close(FILE); + + open(FILE, ">$raddir/radauth.denyusers"); + flock(FILE, 2); + print FILE $proxysettings{'RADIUS_DENY_USERS'}; + close(FILE); + + open(FILE, ">$identdir/identauth.allowusers"); + flock(FILE, 2); + print FILE $proxysettings{'IDENT_ALLOW_USERS'}; + close(FILE); + + open(FILE, ">$identdir/identauth.denyusers"); + flock(FILE, 2); + print FILE $proxysettings{'IDENT_DENY_USERS'}; + close(FILE); + + open(FILE, ">$identhosts"); + flock(FILE, 2); + print FILE $proxysettings{'IDENT_HOSTS'}; + close(FILE); + + open(FILE, ">$cre_groups"); + flock(FILE, 2); + print FILE $proxysettings{'CRE_GROUPS'}; + close(FILE); + + open(FILE, ">$cre_svhosts"); + flock(FILE, 2); + print FILE $proxysettings{'CRE_SVHOSTS'}; + close(FILE); +} + +# ------------------------------------------------------------------- + +sub writepacfile +{ + open(FILE, ">/srv/web/ipfire/html/proxy.pac"); + flock(FILE, 2); + print FILE "function FindProxyForURL(url, host)\n"; + print FILE "{\n"; + if (($proxysettings{'ENABLE'} eq 'on') || ($proxysettings{'ENABLE_BLUE'} eq 'on')) + { + print FILE <; + close(SUBNETS); + } + + foreach (@templist) + { + @temp = split(/\//); + if ( + ($temp[0] ne $netsettings{'GREEN_NETADDRESS'}) && ($temp[1] ne $netsettings{'GREEN_NETMASK'}) && + ($temp[0] ne $netsettings{'BLUE_NETADDRESS'}) && ($temp[1] ne $netsettings{'BLUE_NETMASK'}) + ) + { + chomp $temp[1]; + print FILE " ||\n (isInNet(myIpAddress(), \"$temp[0]\", \"$temp[1]\"))"; + } + } + + print FILE "\n"; + + print FILE <${General::swroot}/proxy/squid.conf"); + flock(FILE, 2); + print FILE < 0) + { + print FILE "\n"; + + if (!-z $acl_dst_nocache_dom) { + print FILE "acl no_cache_domains dstdomain \"$acl_dst_nocache_dom\"\n"; + print FILE "cache deny no_cache_domains\n"; + } + if (!-z $acl_dst_nocache_net) { + 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) { + print FILE "acl no_cache_hosts url_regex -i \"$acl_dst_nocache_url\"\n"; + print FILE "cache deny no_cache_hosts\n"; + } + } + + print FILE <$ntlmdir/msntauth.conf"); + flock(MSNTCONF,2); + print MSNTCONF "server $proxysettings{'NTLM_PDC'}"; + if ($proxysettings{'NTLM_BDC'} eq '') { print MSNTCONF " $proxysettings{'NTLM_PDC'}"; } else { print MSNTCONF " $proxysettings{'NTLM_BDC'}"; } + print MSNTCONF " $proxysettings{'NTLM_DOMAIN'}\n"; + if ($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') + { + if ($proxysettings{'NTLM_USER_ACL'} eq 'positive') + { + print MSNTCONF "allowusers $ntlmdir/msntauth.allowusers\n"; + } else { + print MSNTCONF "denyusers $ntlmdir/msntauth.denyusers\n"; + } + } + close(MSNTCONF); + } + } + + if ($proxysettings{'AUTH_METHOD'} eq 'radius') + { + print FILE "auth_param basic program $authdir/squid_radius_auth -h $proxysettings{'RADIUS_SERVER'} -p $proxysettings{'RADIUS_PORT'} "; + if (!($proxysettings{'RADIUS_IDENTIFIER'} eq '')) { print FILE "-i $proxysettings{'RADIUS_IDENTIFIER'} "; } + print FILE "-w $proxysettings{'RADIUS_SECRET'}\n"; + print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n"; + print FILE "auth_param basic realm $authrealm\n"; + print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n"; + if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; } + } + + print FILE "\n"; + print FILE "acl for_inetusers proxy_auth REQUIRED\n"; + if (($proxysettings{'AUTH_METHOD'} eq 'ntlm') && ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'on') && ($proxysettings{'NTLM_ENABLE_ACL'} eq 'on')) + { + if ((!-z "$ntlmdir/msntauth.allowusers") && ($proxysettings{'NTLM_USER_ACL'} eq 'positive')) + { + print FILE "acl for_acl_users proxy_auth \"$ntlmdir/msntauth.allowusers\"\n"; + } + if ((!-z "$ntlmdir/msntauth.denyusers") && ($proxysettings{'NTLM_USER_ACL'} eq 'negative')) + { + print FILE "acl for_acl_users proxy_auth \"$ntlmdir/msntauth.denyusers\"\n"; + } + } + if (($proxysettings{'AUTH_METHOD'} eq 'radius') && ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on')) + { + if ((!-z "$raddir/radauth.allowusers") && ($proxysettings{'RADIUS_USER_ACL'} eq 'positive')) + { + print FILE "acl for_acl_users proxy_auth \"$raddir/radauth.allowusers\"\n"; + } + if ((!-z "$raddir/radauth.denyusers") && ($proxysettings{'RADIUS_USER_ACL'} eq 'negative')) + { + print FILE "acl for_acl_users proxy_auth \"$raddir/radauth.denyusers\"\n"; + } + } + if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') + { + print FILE "\n"; + if (!-z $extgrp) { print FILE "acl for_extended_users proxy_auth \"$extgrp\"\n"; } + if (!-z $disgrp) { print FILE "acl for_disabled_users proxy_auth \"$disgrp\"\n"; } + } + if (!($proxysettings{'AUTH_MAX_USERIP'} eq '')) { print FILE "\nacl concurrent max_user_ip -s $proxysettings{'AUTH_MAX_USERIP'}\n"; } + print FILE "\n"; + + if (!-z $acl_dst_noauth_net) { print FILE "acl to_ipaddr_without_auth dst \"$acl_dst_noauth_net\"\n"; } + if (!-z $acl_dst_noauth_dom) { print FILE "acl to_domains_without_auth dstdomain \"$acl_dst_noauth_dom\"\n"; } + if (!-z $acl_dst_noauth_url) { print FILE "acl to_hosts_without_auth url_regex -i \"$acl_dst_noauth_url\"\n"; } + print FILE "\n"; + + } + + if ($proxysettings{'AUTH_METHOD'} eq 'ident') + { + if ($proxysettings{'IDENT_REQUIRED'} eq 'on') + { + print FILE "acl for_inetusers ident REQUIRED\n"; + } + if ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') + { + if ((!-z "$identdir/identauth.allowusers") && ($proxysettings{'IDENT_USER_ACL'} eq 'positive')) + { + print FILE "acl for_acl_users ident_regex -i \"$identdir/identauth.allowusers\"\n\n"; + } + if ((!-z "$identdir/identauth.denyusers") && ($proxysettings{'IDENT_USER_ACL'} eq 'negative')) + { + print FILE "acl for_acl_users ident_regex -i \"$identdir/identauth.denyusers\"\n\n"; + } + } + if (!-z $acl_dst_noauth_net) { print FILE "acl to_ipaddr_without_auth dst \"$acl_dst_noauth_net\"\n"; } + if (!-z $acl_dst_noauth_dom) { print FILE "acl to_domains_without_auth dstdomain \"$acl_dst_noauth_dom\"\n"; } + if (!-z $acl_dst_noauth_url) { print FILE "acl to_hosts_without_auth url_regex -i \"$acl_dst_noauth_url\"\n"; } + print FILE "\n"; + } + + if (($delaypools) && (!-z $acl_dst_throttle)) { print FILE "acl for_throttled_urls url_regex -i \"$acl_dst_throttle\"\n\n"; } + + if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') { print FILE "acl with_allowed_useragents browser $browser_regexp\n\n"; } + + print FILE "acl within_timeframe time "; + if ($proxysettings{'TIME_MON'} eq 'on') { print FILE "M"; } + if ($proxysettings{'TIME_TUE'} eq 'on') { print FILE "T"; } + if ($proxysettings{'TIME_WED'} eq 'on') { print FILE "W"; } + if ($proxysettings{'TIME_THU'} eq 'on') { print FILE "H"; } + if ($proxysettings{'TIME_FRI'} eq 'on') { print FILE "F"; } + if ($proxysettings{'TIME_SAT'} eq 'on') { print FILE "A"; } + if ($proxysettings{'TIME_SUN'} eq 'on') { print FILE "S"; } + print FILE " $proxysettings{'TIME_FROM_HOUR'}:"; + print FILE "$proxysettings{'TIME_FROM_MINUTE'}-"; + print FILE "$proxysettings{'TIME_TO_HOUR'}:"; + print FILE "$proxysettings{'TIME_TO_MINUTE'}\n\n"; + + if ((!-z $mimetypes) && ($proxysettings{'ENABLE_MIME_FILTER'} eq 'on')) { + print FILE "acl blocked_mimetypes rep_mime_type \"$mimetypes\"\n\n"; + } + + print FILE <; +close PORTS; +if (@temp) +{ + foreach (@temp) { print FILE "acl SSL_ports port $_"; } +} +open (PORTS,"$acl_ports_safe"); +@temp = ; +close PORTS; +if (@temp) +{ + foreach (@temp) { print FILE "acl Safe_ports port $_"; } +} + print FILE <) { + $_ =~ s/__GREEN_IP__/$netsettings{'GREEN_ADDRESS'}/; + $_ =~ s/__GREEN_NET__/$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}/; + $_ =~ s/__BLUE_IP__/$blue_ip/; + $_ =~ s/__BLUE_NET__/$blue_net/; + $_ =~ s/__PROXY_PORT__/$proxysettings{'PROXY_PORT'}/; + print FILE $_; + } + print FILE "\n#End of custom includes\n"; + close (ACL); + } + if ((!-z $extgrp) && ($proxysettings{'AUTH_METHOD'} eq 'ncsa') && ($proxysettings{'NCSA_BYPASS_REDIR'} eq 'on')) { print FILE "\nredirector_access deny for_extended_users\n"; } + print FILE < 0) + { + print FILE < 0) { + 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 deny for_extended_users\n"; } + } + } +#FIX ME print FILE "reply_body_max_size $replybodymaxsize deny all\n\n"; + + print FILE "visible_hostname"; + if ($proxysettings{'VISIBLE_HOSTNAME'} eq '') + { + print FILE " $mainsettings{'HOSTNAME'}.$mainsettings{'DOMAINNAME'}\n\n"; + } else { + print FILE " $proxysettings{'VISIBLE_HOSTNAME'}\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 '') + { + print FILE "cache_peer $remotehost parent $remoteport 3130 default no-query"; + + # Enter authentication for the parent cache. Option format is + # login=user:password ($proxy1='YES') + # login=PASS ($proxy1='PASS') + # login=*:password ($proxysettings{'FORWARD_USERNAME'} eq 'on') + if (($proxy1 eq 'YES') || ($proxy1 eq 'PASS')) + { + print FILE " login=$proxysettings{'UPSTREAM_USER'}"; + if ($proxy1 eq 'YES') { print FILE ":$proxysettings{'UPSTREAM_PASSWORD'}"; } + } + elsif ($proxysettings{'FORWARD_USERNAME'} eq 'on') { print FILE " login=*:password"; } + + print FILE "\nalways_direct allow IPFire_ips\n"; + print FILE "never_direct allow all\n\n"; + } + if (($proxysettings{'ENABLE_FILTER'} eq 'on') || ($proxysettings{'ENABLE_UPDXLRATOR'} eq 'on') || ($proxysettings{'ENABLE_CLAMAV'} eq 'on')) + { + print FILE "url_rewrite_program /usr/sbin/redirect_wrapper\n"; + print FILE "url_rewrite_children $proxysettings{'CHILDREN'}\n\n"; + } + close FILE; +} + +# ------------------------------------------------------------------- + +sub adduser +{ + my ($str_user, $str_pass, $str_group) = @_; + my @groupmembers=(); + + if ($str_pass eq 'lEaVeAlOnE') + { + open(FILE, "$userdb"); + @groupmembers = ; + close(FILE); + foreach $line (@groupmembers) { if ($line =~ /^$str_user:/i) { $str_pass = substr($line,index($line,":")); } } + &deluser($str_user); + open(FILE, ">>$userdb"); + flock FILE,2; + print FILE "$str_user$str_pass"; + close(FILE); + } else { + &deluser($str_user); + system("/usr/sbin/htpasswd -b $userdb $str_user $str_pass"); + } + + if ($str_group eq 'standard') { open(FILE, ">>$stdgrp"); + } elsif ($str_group eq 'extended') { open(FILE, ">>$extgrp"); + } elsif ($str_group eq 'disabled') { open(FILE, ">>$disgrp"); } + flock FILE, 2; + print FILE "$str_user\n"; + close(FILE); + + return; +} + +# ------------------------------------------------------------------- + +sub deluser +{ + my ($str_user) = @_; + my $groupfile=''; + my @groupmembers=(); + my @templist=(); + + foreach $groupfile ($stdgrp, $extgrp, $disgrp) + { + undef @templist; + open(FILE, "$groupfile"); + @groupmembers = ; + close(FILE); + foreach $line (@groupmembers) { if (!($line =~ /^$str_user$/i)) { push(@templist, $line); } } + open(FILE, ">$groupfile"); + flock FILE, 2; + print FILE @templist; + close(FILE); + } + + undef @templist; + open(FILE, "$userdb"); + @groupmembers = ; + close(FILE); + foreach $line (@groupmembers) { if (!($line =~ /^$str_user:/i)) { push(@templist, $line); } } + open(FILE, ">$userdb"); + flock FILE, 2; + print FILE @templist; + close(FILE); + + return; +} + +# ------------------------------------------------------------------- + +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; +} -} # end sub DoHTML -1 +# -------------------------------------------------------------------
  $Lang::tr{'legend'}:    $Lang::tr{$Lang::tr{'edit'}    $Lang::tr{$Lang::tr{'remove'}
$Lang::tr{'advproxy NCSA no accounts'}