#!/usr/bin/perl ############################################################################### # # # IPFire.org - A linux based firewall # # Copyright (C) 2007-2012 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # 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 . # # # ############################################################################### # # (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; # enable only the following on debugging purpose #use warnings; #use CGI::Carp 'fatalsToBrowser'; 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 %checked=(); my %selected=(); my @throttle_limits=(64,128,256,384,512,768,1024,1280,1536,1792,2048,2560,3072,3584,4096,5120,6144,7168,8192,10240,12288,16384,20480); my $throttle_binary="7z|arj|bin|bz2|cab|exe|gz|lzh|rar|sea|tar|tgz|xz|zip"; my $throttle_dskimg="b5t|bin|bwt|ccd|cdi|cue|gho|img|iso|mds|nrg|pqi|vmdk"; my $throttle_mmedia="aiff?|asf|avi|divx|mov|mp3|mpe?g|ogg|qt|ra?m|ts|vob"; 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 $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); 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'} = ''; $proxysettings{'VALID'} = ''; $proxysettings{'ENABLE'} = 'off'; $proxysettings{'ENABLE_BLUE'} = 'off'; $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{'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); 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{'edit'}) { $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{'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{'UPSTREAM_PROXY'} eq '')) { my @temp = split(/:/,$proxysettings{'UPSTREAM_PROXY'}); if (!(&General::validip($temp[0]))) { $errormessage = $Lang::tr{'advproxy errmsg invalid upstream proxy'}; goto ERROR; } } if (!($proxysettings{'CACHE_SIZE'} =~ /^\d+/) || ($proxysettings{'CACHE_SIZE'} < 10)) { 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'}; goto ERROR; } if (!($proxysettings{'MIN_SIZE'} =~ /^\d+/)) { $errormessage = $Lang::tr{'invalid minimum object size'}; goto ERROR; } if (!($proxysettings{'MAX_OUTGOING_SIZE'} =~ /^\d+/)) { $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{'CHILDREN'} =~ /^\d+$/) || ($proxysettings{'CHILDREN'} < 1)) { $errormessage = $Lang::tr{'advproxy invalid num of children'}; goto ERROR; } 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 (!($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; } } if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') { if ((!($proxysettings{'NCSA_MIN_PASS_LEN'} =~ /^\d+/)) || ($proxysettings{'NCSA_MIN_PASS_LEN'} < 1) || ($proxysettings{'NCSA_MIN_PASS_LEN'} > 255)) { $errormessage = $Lang::tr{'advproxy errmsg password length'}; goto ERROR; } } if ($proxysettings{'AUTH_METHOD'} eq 'ident') { if ((!($proxysettings{'IDENT_TIMEOUT'} =~ /^\d+/)) || ($proxysettings{'IDENT_TIMEOUT'} < 1)) { $errormessage = $Lang::tr{'advproxy errmsg ident timeout'}; goto ERROR; } } if ($proxysettings{'AUTH_METHOD'} eq 'ldap') { if ($proxysettings{'LDAP_BASEDN'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg ldap base dn'}; goto ERROR; } if (!&General::validip($proxysettings{'LDAP_SERVER'})) { $errormessage = $Lang::tr{'advproxy errmsg ldap server'}; goto ERROR; } if (!&General::validport($proxysettings{'LDAP_PORT'})) { $errormessage = $Lang::tr{'advproxy errmsg ldap port'}; goto ERROR; } if (($proxysettings{'LDAP_TYPE'} eq 'ADS') || ($proxysettings{'LDAP_TYPE'} eq 'NDS')) { if (($proxysettings{'LDAP_BINDDN_USER'} eq '') || ($proxysettings{'LDAP_BINDDN_PASS'} eq '')) { $errormessage = $Lang::tr{'advproxy errmsg ldap bind dn'}; goto ERROR; } } } if ($proxysettings{'AUTH_METHOD'} eq 'ntlm') { if ($proxysettings{'NTLM_DOMAIN'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg ntlm domain'}; goto ERROR; } if ($proxysettings{'NTLM_PDC'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg ntlm pdc'}; goto ERROR; } if (!&General::validhostname($proxysettings{'NTLM_PDC'})) { $errormessage = $Lang::tr{'advproxy errmsg invalid pdc'}; goto ERROR; } if ((!($proxysettings{'NTLM_BDC'} eq '')) && (!&General::validhostname($proxysettings{'NTLM_BDC'}))) { $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') { if (!&General::validip($proxysettings{'RADIUS_SERVER'})) { $errormessage = $Lang::tr{'advproxy errmsg radius server'}; goto ERROR; } if (!&General::validport($proxysettings{'RADIUS_PORT'})) { $errormessage = $Lang::tr{'advproxy errmsg radius port'}; goto ERROR; } if ($proxysettings{'RADIUS_SECRET'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg radius secret'}; goto ERROR; } } # Quick parent proxy error checking of username and password info. If username password don't both exist give an error. $proxy1 = 'YES'; $proxy2 = 'YES'; if (($proxysettings{'UPSTREAM_USER'} eq '')) {$proxy1 = '';} if (($proxysettings{'UPSTREAM_PASSWORD'} eq '')) {$proxy2 = '';} if ($proxysettings{'UPSTREAM_USER'} eq 'PASS') {$proxy1=$proxy2='PASS'; $proxysettings{'UPSTREAM_PASSWORD'} = '';} if (($proxy1 ne $proxy2)) { $errormessage = $Lang::tr{'advproxy errmsg invalid upstream proxy username or password setting'}; goto ERROR; } ERROR: &check_acls; if ($errormessage) { $proxysettings{'VALID'} = 'no'; } else { $proxysettings{'VALID'} = 'yes'; } if ($proxysettings{'VALID'} eq 'yes') { &write_acls; delete $proxysettings{'SRC_SUBNETS'}; delete $proxysettings{'SRC_BANNED_IP'}; delete $proxysettings{'SRC_BANNED_MAC'}; delete $proxysettings{'SRC_UNRESTRICTED_IP'}; delete $proxysettings{'SRC_UNRESTRICTED_MAC'}; delete $proxysettings{'DST_NOCACHE'}; delete $proxysettings{'DST_NOAUTH'}; delete $proxysettings{'PORTS_SAFE'}; delete $proxysettings{'PORTS_SSL'}; delete $proxysettings{'MIME_TYPES'}; delete $proxysettings{'NTLM_ALLOW_USERS'}; delete $proxysettings{'NTLM_DENY_USERS'}; delete $proxysettings{'RADIUS_ALLOW_USERS'}; delete $proxysettings{'RADIUS_DENY_USERS'}; delete $proxysettings{'IDENT_HOSTS'}; delete $proxysettings{'IDENT_ALLOW_USERS'}; delete $proxysettings{'IDENT_DENY_USERS'}; delete $proxysettings{'CRE_GROUPS'}; delete $proxysettings{'CRE_SVHOSTS'}; delete $proxysettings{'NCSA_USERNAME'}; delete $proxysettings{'NCSA_GROUP'}; delete $proxysettings{'NCSA_PASS'}; delete $proxysettings{'NCSA_PASS_CONFIRM'}; $proxysettings{'TIME_MON'} = 'off' unless exists $proxysettings{'TIME_MON'}; $proxysettings{'TIME_TUE'} = 'off' unless exists $proxysettings{'TIME_TUE'}; $proxysettings{'TIME_WED'} = 'off' unless exists $proxysettings{'TIME_WED'}; $proxysettings{'TIME_THU'} = 'off' unless exists $proxysettings{'TIME_THU'}; $proxysettings{'TIME_FRI'} = 'off' unless exists $proxysettings{'TIME_FRI'}; $proxysettings{'TIME_SAT'} = 'off' unless exists $proxysettings{'TIME_SAT'}; $proxysettings{'TIME_SUN'} = 'off' unless exists $proxysettings{'TIME_SUN'}; $proxysettings{'AUTH_ALWAYS_REQUIRED'} = 'off' unless exists $proxysettings{'AUTH_ALWAYS_REQUIRED'}; $proxysettings{'NTLM_ENABLE_INT_AUTH'} = 'off' unless exists $proxysettings{'NTLM_ENABLE_INT_AUTH'}; &General::writehash("${General::swroot}/proxy/advanced/settings", \%proxysettings); 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"; unlink "${General::swroot}/proxy/enable_blue"; unlink "${General::swroot}/proxy/transparent_blue"; if ($proxysettings{'ENABLE'} eq 'on') { system ('/usr/bin/touch', "${General::swroot}/proxy/enable"); system ('/usr/local/bin/squidctrl', 'enable'); } 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' && $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'}) { system('/usr/local/bin/squidctrl flush >/dev/null 2>&1'); } 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'} = ''; $checked{'ENABLE'}{$proxysettings{'ENABLE'}} = "checked='checked'"; $checked{'TRANSPARENT'}{'off'} = ''; $checked{'TRANSPARENT'}{'on'} = ''; $checked{'TRANSPARENT'}{$proxysettings{'TRANSPARENT'}} = "checked='checked'"; $checked{'ENABLE_BLUE'}{'off'} = ''; $checked{'ENABLE_BLUE'}{'on'} = ''; $checked{'ENABLE_BLUE'}{$proxysettings{'ENABLE_BLUE'}} = "checked='checked'"; $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{'advproxy advanced web proxy configuration'}, 1, ''); &Header::openbigbox('100%', 'left', '', $errormessage); if ($errormessage) { &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); print "$errormessage \n"; &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{'advproxy advanced web proxy'}"); print < $Lang::tr{'advproxy common settings'} $Lang::tr{'advproxy enabled on'} Green: $Lang::tr{'advproxy proxy port'}: $Lang::tr{'advproxy transparent on'} Green: $Lang::tr{'advproxy visible hostname'}: * END ; if ($netsettings{'BLUE_DEV'}) { print "$Lang::tr{'advproxy enabled on'} Blue:"; print ""; } else { print " "; } print <  END ; if ($netsettings{'BLUE_DEV'}) { print "$Lang::tr{'advproxy transparent on'} Blue:"; print ""; } else { print " "; } print <$Lang::tr{'advproxy error language'}: $Lang::tr{'advproxy error design'}: $Lang::tr{'advproxy squid version'}:  [ $squidversion[0] ]    
END ; my $count = `ip n| 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{'advproxy upstream proxy'}
$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 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{'advproxy log useragent'}:

$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 "$green_cidr\n"; if ($netsettings{'BLUE_DEV'}) { print FILE "$blue_cidr\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__/$green_cidr/; $_ =~ 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 none IPFire_unrestricted_ips\n"; } if (!-z $acl_src_unrestricted_mac) { print FILE "reply_body_max_size none IPFire_unrestricted_mac\n"; } if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') { if (!-z $extgrp) { print FILE "reply_body_max_size none for_extended_users\n"; } } } if ( $proxysettings{'MAX_INCOMING_SIZE'} != '0' ) { print FILE "reply_body_max_size $proxysettings{'MAX_INCOMING_SIZE'} KB 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"; } # Include file with user defined settings. if (-e "/etc/squid/squid.conf.local") { print FILE "include /etc/squid/squid.conf.local\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; } # -------------------------------------------------------------------
  $Lang::tr{'legend'}:     $Lang::tr{ $Lang::tr{'edit'}     $Lang::tr{ $Lang::tr{'remove'}
$Lang::tr{'advproxy NCSA no accounts'}