]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - html/cgi-bin/proxy.cgi
proxy.cgi: Suppress Squid version by default
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / proxy.cgi
CommitLineData
ac1cfefa 1#!/usr/bin/perl
70df8302
MT
2###############################################################################
3# #
4# IPFire.org - A linux based firewall #
6323e908 5# Copyright (C) 2007-2021 IPFire Team <info@ipfire.org> #
70df8302
MT
6# #
7# This program is free software: you can redistribute it and/or modify #
8# it under the terms of the GNU General Public License as published by #
9# the Free Software Foundation, either version 3 of the License, or #
10# (at your option) any later version. #
11# #
12# This program is distributed in the hope that it will be useful, #
13# but WITHOUT ANY WARRANTY; without even the implied warranty of #
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15# GNU General Public License for more details. #
16# #
17# You should have received a copy of the GNU General Public License #
18# along with this program. If not, see <http://www.gnu.org/licenses/>. #
19# #
20###############################################################################
ac1cfefa
MT
21
22use strict;
0aff7b81 23use Apache::Htpasswd;
ac1cfefa
MT
24
25# enable only the following on debugging purpose
cb5e9c6c
CS
26#use warnings;
27#use CGI::Carp 'fatalsToBrowser';
ac1cfefa 28
ed38f89d 29require '/var/ipfire/general-functions.pl';
ac1cfefa
MT
30require "${General::swroot}/lang.pl";
31require "${General::swroot}/header.pl";
32
e698090e
SS
33require "${General::swroot}/ids-functions.pl";
34
87504199 35my @squidversion = &General::system_output("/usr/sbin/squid", "-v");
363fb6af
MT
36my $http_port='81';
37my $https_port='444';
38
18322edf
CS
39my %color = ();
40my %mainsettings = ();
41&General::readhash("${General::swroot}/main/settings", \%mainsettings);
8186b372 42&General::readhash("/srv/web/ipfire/html/themes/ipfire/include/colors.txt", \%color);
18322edf 43
ac1cfefa
MT
44my %proxysettings=();
45my %netsettings=();
ed38f89d 46my %filtersettings=();
9fb25b1c 47my %xlratorsettings=();
ed38f89d 48my %stdproxysettings=();
ac1cfefa 49my %mainsettings=();
ed38f89d
MT
50
51my %checked=();
52my %selected=();
53
ce1f04ee 54my @throttle_limits=(64,128,256,512,1024,1536,2048,3072,4096,5120,6144,7168,8192,10240,16384,20480,51200,102400);
ed38f89d 55
363fb6af
MT
56my $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";
57my $def_ports_ssl="443 # https\n563 # snews\n";
58
ed38f89d
MT
59my $hintcolour='#FFFFCC';
60my $ncsa_buttontext='';
61my $language='';
62my $i=0;
63my $n=0;
64my $id=0;
65my $line='';
66my $user='';
67my @userlist=();
68my @grouplist=();
69my @temp=();
70my @templist=();
71
72my $cachemem=0;
73my $proxy1='';
74my $proxy2='';
ed38f89d
MT
75my $browser_regexp='';
76my $needhup = 0;
77my $errormessage='';
78
79my $acldir = "${General::swroot}/proxy/advanced/acls";
80my $ncsadir = "${General::swroot}/proxy/advanced/ncsa";
ed38f89d
MT
81my $raddir = "${General::swroot}/proxy/advanced/radius";
82my $identdir = "${General::swroot}/proxy/advanced/ident";
83my $credir = "${General::swroot}/proxy/advanced/cre";
84
85my $userdb = "$ncsadir/passwd";
86my $stdgrp = "$ncsadir/standard.grp";
87my $extgrp = "$ncsadir/extended.grp";
88my $disgrp = "$ncsadir/disabled.grp";
89
ed38f89d
MT
90my $mimetypes = "${General::swroot}/proxy/advanced/mimetypes";
91my $throttled_urls = "${General::swroot}/proxy/advanced/throttle";
92
93my $cre_enabled = "${General::swroot}/proxy/advanced/cre/enable";
94my $cre_groups = "${General::swroot}/proxy/advanced/cre/classrooms";
95my $cre_svhosts = "${General::swroot}/proxy/advanced/cre/supervisors";
96
97my $identhosts = "$identdir/hosts";
98
d50a7822 99my $authdir = "/usr/lib/squid";
f1baee3e 100my $errordir = "/usr/lib/squid/errors";
ed38f89d
MT
101
102my $acl_src_subnets = "$acldir/src_subnets.acl";
103my $acl_src_banned_ip = "$acldir/src_banned_ip.acl";
104my $acl_src_banned_mac = "$acldir/src_banned_mac.acl";
105my $acl_src_unrestricted_ip = "$acldir/src_unrestricted_ip.acl";
106my $acl_src_unrestricted_mac = "$acldir/src_unrestricted_mac.acl";
107my $acl_src_noaccess_ip = "$acldir/src_noaccess_ip.acl";
108my $acl_src_noaccess_mac = "$acldir/src_noaccess_mac.acl";
ed38f89d 109my $acl_dst_noauth = "$acldir/dst_noauth.acl";
488d1b7c
CS
110my $acl_dst_noauth_dom = "$acldir/dst_noauth_dom.acl";
111my $acl_dst_noauth_net = "$acldir/dst_noauth_net.acl";
112my $acl_dst_noauth_url = "$acldir/dst_noauth_url.acl";
113my $acl_dst_nocache = "$acldir/dst_nocache.acl";
114my $acl_dst_nocache_dom = "$acldir/dst_nocache_dom.acl";
115my $acl_dst_nocache_net = "$acldir/dst_nocache_net.acl";
116my $acl_dst_nocache_url = "$acldir/dst_nocache_url.acl";
ed38f89d 117my $acl_dst_throttle = "$acldir/dst_throttle.acl";
363fb6af
MT
118my $acl_ports_safe = "$acldir/ports_safe.acl";
119my $acl_ports_ssl = "$acldir/ports_ssl.acl";
ed38f89d
MT
120my $acl_include = "$acldir/include.acl";
121
ddc5602a
AK
122my $acl_dst_noproxy_url = "$acldir/dst_noproxy_url.acl";
123my $acl_dst_noproxy_ip = "$acldir/dst_noproxy_ip.acl";
124
363fb6af
MT
125my $updaccelversion = 'n/a';
126my $urlfilterversion = 'n/a';
127
ed38f89d
MT
128unless (-d "$acldir") { mkdir("$acldir"); }
129unless (-d "$ncsadir") { mkdir("$ncsadir"); }
ed38f89d
MT
130unless (-d "$raddir") { mkdir("$raddir"); }
131unless (-d "$identdir") { mkdir("$identdir"); }
132unless (-d "$credir") { mkdir("$credir"); }
133
66191888
MT
134unless (-e $cre_groups) { &General::system("touch", "$cre_groups"); }
135unless (-e $cre_svhosts) { &General::system("touch $cre_svhosts"); }
136
137unless (-e $userdb) { &General::system("touch", "$userdb"); }
138unless (-e $stdgrp) { &General::system("touch", "$stdgrp"); }
139unless (-e $extgrp) { &General::system("touch", "$extgrp"); }
140unless (-e $disgrp) { &General::system("touch", "$disgrp"); }
141
142unless (-e $acl_src_subnets) { &General::system("touch", "$acl_src_subnets"); }
143unless (-e $acl_src_banned_ip) { &General::system("touch", "$acl_src_banned_ip"); }
144unless (-e $acl_src_banned_mac) { &General::system("touch", "$acl_src_banned_mac"); }
145unless (-e $acl_src_unrestricted_ip) { &General::system("touch", "$acl_src_unrestricted_ip"); }
146unless (-e $acl_src_unrestricted_mac) { &General::system("touch", "$acl_src_unrestricted_mac"); }
147unless (-e $acl_src_noaccess_ip) { &General::system("touch", "$acl_src_noaccess_ip"); }
148unless (-e $acl_src_noaccess_mac) { &General::system("touch", "$acl_src_noaccess_mac"); }
149unless (-e $acl_dst_noauth) { &General::system("touch", "$acl_dst_noauth"); }
150unless (-e $acl_dst_noauth_dom) { &General::system("touch", "$acl_dst_noauth_dom"); }
151unless (-e $acl_dst_noauth_net) { &General::system("touch", "$acl_dst_noauth_net"); }
152unless (-e $acl_dst_noauth_url) { &General::system("touch", "$acl_dst_noauth_url"); }
153unless (-e $acl_dst_nocache) { &General::system("touch", "$acl_dst_nocache"); }
154unless (-e $acl_dst_nocache_dom) { &General::system("touch", "$acl_dst_nocache_dom"); }
155unless (-e $acl_dst_nocache_net) { &General::system("touch", "$acl_dst_nocache_net"); }
156unless (-e $acl_dst_nocache_url) { &General::system("touch", "$acl_dst_nocache_url"); }
157unless (-e $acl_dst_throttle) { &General::system("touch", "$acl_dst_throttle"); }
158unless (-e $acl_ports_safe) { &General::system("touch", "$acl_ports_safe"); }
159unless (-e $acl_ports_ssl) { &General::system("touch", "$acl_ports_ssl"); }
160unless (-e $acl_include) { &General::system("touch", "$acl_include"); }
161
162unless (-e $mimetypes) { &General::system("touch", "$mimetypes"); }
ed38f89d 163
603248db
MT
164my $HAVE_NTLM_AUTH = (-e "/usr/bin/ntlm_auth");
165
ac1cfefa
MT
166&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
167&General::readhash("${General::swroot}/main/settings", \%mainsettings);
168
f09a0af5 169my $green_cidr = &General::ipcidr("$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}");
d3527a38
MT
170my $blue_cidr = "";
171if (&Header::blue_used() && $netsettings{'BLUE_DEV'}) {
f09a0af5
AF
172 $blue_cidr = &General::ipcidr("$netsettings{'BLUE_NETADDRESS'}\/$netsettings{'BLUE_NETMASK'}");
173}
174
ac1cfefa
MT
175&Header::showhttpheaders();
176
177$proxysettings{'ACTION'} = '';
178$proxysettings{'VALID'} = '';
179
ac1cfefa
MT
180$proxysettings{'ENABLE'} = 'off';
181$proxysettings{'ENABLE_BLUE'} = 'off';
ac1cfefa
MT
182$proxysettings{'TRANSPARENT'} = 'off';
183$proxysettings{'TRANSPARENT_BLUE'} = 'off';
ed38f89d 184$proxysettings{'PROXY_PORT'} = '800';
0f6b6067 185$proxysettings{'TRANSPARENT_PORT'} = '3128';
ed38f89d
MT
186$proxysettings{'VISIBLE_HOSTNAME'} = '';
187$proxysettings{'ADMIN_MAIL_ADDRESS'} = '';
fe1656d2 188$proxysettings{'ADMIN_PASSWORD'} = '';
7ec83993 189$proxysettings{'ERR_LANGUAGE'} = 'en';
0d948999 190$proxysettings{'ERR_DESIGN'} = 'ipfire';
e981b751 191$proxysettings{'SUPPRESS_VERSION'} = 'on';
ed38f89d
MT
192$proxysettings{'FORWARD_VIA'} = 'off';
193$proxysettings{'FORWARD_IPADDRESS'} = 'off';
194$proxysettings{'FORWARD_USERNAME'} = 'off';
363fb6af 195$proxysettings{'NO_CONNECTION_AUTH'} = 'off';
ed38f89d
MT
196$proxysettings{'UPSTREAM_PROXY'} = '';
197$proxysettings{'UPSTREAM_USER'} = '';
198$proxysettings{'UPSTREAM_PASSWORD'} = '';
199$proxysettings{'LOGGING'} = 'off';
fe1656d2 200$proxysettings{'CACHEMGR'} = 'off';
ed38f89d
MT
201$proxysettings{'LOGQUERY'} = 'off';
202$proxysettings{'LOGUSERAGENT'} = 'off';
8dc17705 203$proxysettings{'FILEDESCRIPTORS'} = '16384';
c2f1b818
MT
204$proxysettings{'CACHE_MEM'} = '128';
205$proxysettings{'CACHE_SIZE'} = '0';
ac1cfefa
MT
206$proxysettings{'MAX_SIZE'} = '4096';
207$proxysettings{'MIN_SIZE'} = '0';
ed38f89d
MT
208$proxysettings{'MEM_POLICY'} = 'LRU';
209$proxysettings{'CACHE_POLICY'} = 'LRU';
210$proxysettings{'L1_DIRS'} = '16';
211$proxysettings{'OFFLINE_MODE'} = 'off';
6bea848d 212$proxysettings{'CACHE_DIGESTS'} = 'off';
ed38f89d
MT
213$proxysettings{'CLASSROOM_EXT'} = 'off';
214$proxysettings{'SUPERVISOR_PASSWORD'} = '';
9fb25b1c
MT
215$proxysettings{'NO_PROXY_LOCAL'} = 'off';
216$proxysettings{'NO_PROXY_LOCAL_BLUE'} = 'off';
ed38f89d
MT
217$proxysettings{'TIME_ACCESS_MODE'} = 'allow';
218$proxysettings{'TIME_FROM_HOUR'} = '00';
219$proxysettings{'TIME_FROM_MINUTE'} = '00';
220$proxysettings{'TIME_TO_HOUR'} = '24';
221$proxysettings{'TIME_TO_MINUTE'} = '00';
ac1cfefa
MT
222$proxysettings{'MAX_OUTGOING_SIZE'} = '0';
223$proxysettings{'MAX_INCOMING_SIZE'} = '0';
ed38f89d
MT
224$proxysettings{'THROTTLING_GREEN_TOTAL'} = 'unlimited';
225$proxysettings{'THROTTLING_GREEN_HOST'} = 'unlimited';
226$proxysettings{'THROTTLING_BLUE_TOTAL'} = 'unlimited';
227$proxysettings{'THROTTLING_BLUE_HOST'} = 'unlimited';
ed38f89d 228$proxysettings{'ENABLE_MIME_FILTER'} = 'off';
ed38f89d
MT
229$proxysettings{'AUTH_METHOD'} = 'none';
230$proxysettings{'AUTH_REALM'} = '';
231$proxysettings{'AUTH_MAX_USERIP'} = '';
232$proxysettings{'AUTH_CACHE_TTL'} = '60';
0f8251fe 233$proxysettings{'AUTH_IPCACHE_TTL'} = '0';
ed38f89d
MT
234$proxysettings{'AUTH_CHILDREN'} = '5';
235$proxysettings{'NCSA_MIN_PASS_LEN'} = '6';
236$proxysettings{'NCSA_BYPASS_REDIR'} = 'off';
237$proxysettings{'NCSA_USERNAME'} = '';
238$proxysettings{'NCSA_GROUP'} = '';
239$proxysettings{'NCSA_PASS'} = '';
240$proxysettings{'NCSA_PASS_CONFIRM'} = '';
241$proxysettings{'LDAP_BASEDN'} = '';
242$proxysettings{'LDAP_TYPE'} = 'ADS';
243$proxysettings{'LDAP_SERVER'} = '';
244$proxysettings{'LDAP_PORT'} = '389';
245$proxysettings{'LDAP_BINDDN_USER'} = '';
246$proxysettings{'LDAP_BINDDN_PASS'} = '';
247$proxysettings{'LDAP_GROUP'} = '';
b5674643 248$proxysettings{'NTLM_AUTH_GROUP'} = '';
2fc5124b 249$proxysettings{'NTLM_AUTH_BASIC'} = 'off';
ed38f89d
MT
250$proxysettings{'NTLM_DOMAIN'} = '';
251$proxysettings{'NTLM_PDC'} = '';
252$proxysettings{'NTLM_BDC'} = '';
253$proxysettings{'NTLM_ENABLE_ACL'} = 'off';
254$proxysettings{'NTLM_USER_ACL'} = 'positive';
255$proxysettings{'RADIUS_SERVER'} = '';
363fb6af 256$proxysettings{'RADIUS_PORT'} = '1812';
ed38f89d
MT
257$proxysettings{'RADIUS_IDENTIFIER'} = '';
258$proxysettings{'RADIUS_SECRET'} = '';
259$proxysettings{'RADIUS_ENABLE_ACL'} = 'off';
260$proxysettings{'RADIUS_USER_ACL'} = 'positive';
261$proxysettings{'IDENT_REQUIRED'} = 'off';
262$proxysettings{'IDENT_TIMEOUT'} = '10';
263$proxysettings{'IDENT_ENABLE_ACL'} = 'off';
264$proxysettings{'IDENT_USER_ACL'} = 'positive';
9fb25b1c
MT
265$proxysettings{'ENABLE_FILTER'} = 'off';
266$proxysettings{'ENABLE_UPDXLRATOR'} = 'off';
d12aede7 267$proxysettings{'ENABLE_CLAMAV'} = 'off';
ed38f89d
MT
268
269$ncsa_buttontext = $Lang::tr{'advproxy NCSA create user'};
ac1cfefa
MT
270
271&Header::getcgihash(\%proxysettings);
272
ed38f89d
MT
273if ($proxysettings{'THROTTLING_GREEN_TOTAL'} eq 0) {$proxysettings{'THROTTLING_GREEN_TOTAL'} = 'unlimited';}
274if ($proxysettings{'THROTTLING_GREEN_HOST'} eq 0) {$proxysettings{'THROTTLING_GREEN_HOST'} = 'unlimited';}
275if ($proxysettings{'THROTTLING_BLUE_TOTAL'} eq 0) {$proxysettings{'THROTTLING_BLUE_TOTAL'} = 'unlimited';}
276if ($proxysettings{'THROTTLING_BLUE_HOST'} eq 0) {$proxysettings{'THROTTLING_BLUE_HOST'} = 'unlimited';}
ac1cfefa 277
ed38f89d 278if ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy NCSA user management'})
ac1cfefa 279{
ed38f89d
MT
280 $proxysettings{'NCSA_EDIT_MODE'} = 'yes';
281}
282
283if ($proxysettings{'ACTION'} eq $Lang::tr{'add'})
284{
285 $proxysettings{'NCSA_EDIT_MODE'} = 'yes';
286 if (length($proxysettings{'NCSA_PASS'}) < $proxysettings{'NCSA_MIN_PASS_LEN'}) {
287 $errormessage = $Lang::tr{'advproxy errmsg password length 1'}.$proxysettings{'NCSA_MIN_PASS_LEN'}.$Lang::tr{'advproxy errmsg password length 2'};
288 }
289 if (!($proxysettings{'NCSA_PASS'} eq $proxysettings{'NCSA_PASS_CONFIRM'})) {
290 $errormessage = $Lang::tr{'advproxy errmsg passwords different'};
291 }
292 if ($proxysettings{'NCSA_USERNAME'} eq '') {
293 $errormessage = $Lang::tr{'advproxy errmsg no username'};
294 }
295 if (!$errormessage) {
296 $proxysettings{'NCSA_USERNAME'} =~ tr/A-Z/a-z/;
297 &adduser($proxysettings{'NCSA_USERNAME'}, $proxysettings{'NCSA_PASS'}, $proxysettings{'NCSA_GROUP'});
298 }
299 $proxysettings{'NCSA_USERNAME'} = '';
300 $proxysettings{'NCSA_GROUP'} = '';
301 $proxysettings{'NCSA_PASS'} = '';
302 $proxysettings{'NCSA_PASS_CONFIRM'} = '';
303}
ac1cfefa 304
ed38f89d
MT
305if ($proxysettings{'ACTION'} eq $Lang::tr{'remove'})
306{
307 $proxysettings{'NCSA_EDIT_MODE'} = 'yes';
308 &deluser($proxysettings{'ID'});
309}
310
9fb25b1c
MT
311$checked{'ENABLE_UPDXLRATOR'}{'off'} = '';
312$checked{'ENABLE_UPDXLRATOR'}{'on'} = '';
313$checked{'ENABLE_UPDXLRATOR'}{$proxysettings{'ENABLE_UPDXLRATOR'}} = "checked='checked'";
314
ed38f89d
MT
315if ($proxysettings{'ACTION'} eq $Lang::tr{'edit'})
316{
317 $proxysettings{'NCSA_EDIT_MODE'} = 'yes';
318 $ncsa_buttontext = $Lang::tr{'advproxy NCSA update user'};
319 @temp = split(/:/,$proxysettings{'ID'});
320 $proxysettings{'NCSA_USERNAME'} = $temp[0];
321 $proxysettings{'NCSA_GROUP'} = $temp[1];
322 $proxysettings{'NCSA_PASS'} = "lEaVeAlOnE";
323 $proxysettings{'NCSA_PASS_CONFIRM'} = $proxysettings{'NCSA_PASS'};
324}
325
fe1656d2 326if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy save and restart'}) || ($proxysettings{'ACTION'} eq $Lang::tr{'proxy reconfigure'}))
28c9dec6
CS
327{
328 if ($proxysettings{'ENABLE'} !~ /^(on|off)$/ ||
329 $proxysettings{'TRANSPARENT'} !~ /^(on|off)$/ ||
330 $proxysettings{'ENABLE_BLUE'} !~ /^(on|off)$/ ||
ac1cfefa
MT
331 $proxysettings{'TRANSPARENT_BLUE'} !~ /^(on|off)$/ ) {
332 $errormessage = $Lang::tr{'invalid input'};
333 goto ERROR;
28c9dec6 334 }
8b6f424c 335 if($proxysettings{'CACHE_MEM'} > $proxysettings{'CACHE_SIZE'} && $proxysettings{'CACHE_SIZE'} > 0){
d5a7ff95
AM
336 $errormessage = $Lang::tr{'advproxy errmsg cache'}." ".$proxysettings{'CACHE_MEM'}." > ".$proxysettings{'CACHE_SIZE'};
337 goto ERROR;
338 }
c4b12981 339
f2fdd0c1 340 if (!(&General::validport($proxysettings{'PROXY_PORT'})))
363fb6af
MT
341 {
342 $errormessage = $Lang::tr{'advproxy errmsg invalid proxy port'};
343 goto ERROR;
344 }
0f6b6067
MT
345 if (!(&General::validport($proxysettings{'TRANSPARENT_PORT'})))
346 {
347 $errormessage = $Lang::tr{'advproxy errmsg invalid proxy port'};
348 goto ERROR;
349 }
350 if ($proxysettings{'PROXY_PORT'} eq $proxysettings{'TRANSPARENT_PORT'}) {
351 $errormessage = $Lang::tr{'advproxy errmsg proxy ports equal'};
352 goto ERROR;
353 }
dcfc6334
SS
354 if (!($proxysettings{'UPSTREAM_PROXY'} eq ''))
355 {
356 my @temp = split(/:/,$proxysettings{'UPSTREAM_PROXY'});
357 if (!(&General::validip($temp[0])))
358 {
359 if (!(&General::validdomainname($temp[0])))
360 {
361 $errormessage = $Lang::tr{'advproxy errmsg invalid upstream proxy'};
362 goto ERROR;
363 }
364 }
69491545 365 }
ac1cfefa
MT
366 if (!($proxysettings{'CACHE_SIZE'} =~ /^\d+/) ||
367 ($proxysettings{'CACHE_SIZE'} < 10))
368 {
488d1b7c
CS
369 if (!($proxysettings{'CACHE_SIZE'} eq '0'))
370 {
371 $errormessage = $Lang::tr{'advproxy errmsg hdd cache size'};
372 goto ERROR;
373 }
ed38f89d 374 }
fe1656d2 375 if (!($proxysettings{'FILEDESCRIPTORS'} =~ /^\d+/) ||
4f160f04 376 ($proxysettings{'FILEDESCRIPTORS'} < 1) || ($proxysettings{'FILEDESCRIPTORS'} > 1048576))
fe1656d2
CS
377 {
378 $errormessage = $Lang::tr{'proxy errmsg filedescriptors'};
379 goto ERROR;
380 }
53d67554 381 if (!($proxysettings{'CACHE_MEM'} =~ /^\d+/))
ed38f89d
MT
382 {
383 $errormessage = $Lang::tr{'advproxy errmsg mem cache size'};
ac1cfefa 384 goto ERROR;
28c9dec6 385 }
87504199 386 my @free = &General::system_output("/usr/bin/free");
ed38f89d
MT
387 $free[1] =~ m/(\d+)/;
388 $cachemem = int $1 / 2048;
389 if ($proxysettings{'CACHE_MEM'} > $cachemem) {
390 $proxysettings{'CACHE_MEM'} = $cachemem;
391 }
ac1cfefa
MT
392 if (!($proxysettings{'MAX_SIZE'} =~ /^\d+/))
393 {
394 $errormessage = $Lang::tr{'invalid maximum object size'};
395 goto ERROR;
396 }
397 if (!($proxysettings{'MIN_SIZE'} =~ /^\d+/))
398 {
399 $errormessage = $Lang::tr{'invalid minimum object size'};
400 goto ERROR;
401 }
402 if (!($proxysettings{'MAX_OUTGOING_SIZE'} =~ /^\d+/))
403 {
404 $errormessage = $Lang::tr{'invalid maximum outgoing size'};
405 goto ERROR;
406 }
ed38f89d
MT
407 if (!($proxysettings{'TIME_TO_HOUR'}.$proxysettings{'TIME_TO_MINUTE'} gt $proxysettings{'TIME_FROM_HOUR'}.$proxysettings{'TIME_FROM_MINUTE'}))
408 {
409 $errormessage = $Lang::tr{'advproxy errmsg time restriction'};
410 goto ERROR;
411 }
ac1cfefa
MT
412 if (!($proxysettings{'MAX_INCOMING_SIZE'} =~ /^\d+/))
413 {
414 $errormessage = $Lang::tr{'invalid maximum incoming size'};
415 goto ERROR;
416 }
ed38f89d
MT
417 if (!($proxysettings{'AUTH_METHOD'} eq 'none'))
418 {
363fb6af 419 unless (($proxysettings{'AUTH_METHOD'} eq 'ident') &&
ed38f89d
MT
420 ($proxysettings{'IDENT_REQUIRED'} eq 'off') &&
421 ($proxysettings{'IDENT_ENABLE_ACL'} eq 'off'))
422 {
423 if ($netsettings{'BLUE_DEV'})
363fb6af 424 {
ed38f89d
MT
425 if ((($proxysettings{'ENABLE'} eq 'off') || ($proxysettings{'TRANSPARENT'} eq 'on')) &&
426 (($proxysettings{'ENABLE_BLUE'} eq 'off') || ($proxysettings{'TRANSPARENT_BLUE'} eq 'on')))
427 {
428 $errormessage = $Lang::tr{'advproxy errmsg non-transparent proxy required'};
429 goto ERROR;
430 }
431 } else {
432 if (($proxysettings{'ENABLE'} eq 'off') || ($proxysettings{'TRANSPARENT'} eq 'on'))
433 {
434 $errormessage = $Lang::tr{'advproxy errmsg non-transparent proxy required'};
435 goto ERROR;
436 }
437 }
438 }
0f8251fe
PM
439 if ((!($proxysettings{'AUTH_MAX_USERIP'} eq '')) &&
440 ((!($proxysettings{'AUTH_MAX_USERIP'} =~ /^\d+/)) || ($proxysettings{'AUTH_MAX_USERIP'} < 1) || ($proxysettings{'AUTH_MAX_USERIP'} > 255)))
441 {
442 $errormessage = $Lang::tr{'advproxy errmsg max userip'};
443 goto ERROR;
444 }
ed38f89d
MT
445 if (!($proxysettings{'AUTH_CACHE_TTL'} =~ /^\d+/))
446 {
447 $errormessage = $Lang::tr{'advproxy errmsg auth cache ttl'};
448 goto ERROR;
449 }
0f8251fe 450 if (!($proxysettings{'AUTH_IPCACHE_TTL'} =~ /^\d+/))
ed38f89d 451 {
0f8251fe 452 $errormessage = $Lang::tr{'advproxy errmsg auth ipcache ttl'};
ed38f89d
MT
453 goto ERROR;
454 }
0f8251fe 455 if ((!($proxysettings{'AUTH_MAX_USERIP'} eq '')) && ($proxysettings{'AUTH_IPCACHE_TTL'} eq '0'))
ed38f89d
MT
456 {
457 $errormessage = $Lang::tr{'advproxy errmsg auth ipcache may not be null'};
458 goto ERROR;
459 }
460 if ((!($proxysettings{'AUTH_CHILDREN'} =~ /^\d+/)) || ($proxysettings{'AUTH_CHILDREN'} < 1) || ($proxysettings{'AUTH_CHILDREN'} > 255))
461 {
462 $errormessage = $Lang::tr{'advproxy errmsg auth children'};
463 goto ERROR;
464 }
465 }
466 if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
467 {
468 if ((!($proxysettings{'NCSA_MIN_PASS_LEN'} =~ /^\d+/)) || ($proxysettings{'NCSA_MIN_PASS_LEN'} < 1) || ($proxysettings{'NCSA_MIN_PASS_LEN'} > 255))
469 {
470 $errormessage = $Lang::tr{'advproxy errmsg password length'};
471 goto ERROR;
472 }
473 }
474 if ($proxysettings{'AUTH_METHOD'} eq 'ident')
475 {
476 if ((!($proxysettings{'IDENT_TIMEOUT'} =~ /^\d+/)) || ($proxysettings{'IDENT_TIMEOUT'} < 1))
477 {
478 $errormessage = $Lang::tr{'advproxy errmsg ident timeout'};
479 goto ERROR;
480 }
481 }
482 if ($proxysettings{'AUTH_METHOD'} eq 'ldap')
483 {
484 if ($proxysettings{'LDAP_BASEDN'} eq '')
485 {
486 $errormessage = $Lang::tr{'advproxy errmsg ldap base dn'};
487 goto ERROR;
488 }
489 if (!&General::validip($proxysettings{'LDAP_SERVER'}))
490 {
e201b6d5
SS
491 if (!&General::validdomainname($proxysettings{'LDAP_SERVER'}))
492 {
493 $errormessage = $Lang::tr{'advproxy errmsg ldap server'};
494 goto ERROR;
495 }
ed38f89d
MT
496 }
497 if (!&General::validport($proxysettings{'LDAP_PORT'}))
498 {
499 $errormessage = $Lang::tr{'advproxy errmsg ldap port'};
500 goto ERROR;
501 }
502 if (($proxysettings{'LDAP_TYPE'} eq 'ADS') || ($proxysettings{'LDAP_TYPE'} eq 'NDS'))
503 {
504 if (($proxysettings{'LDAP_BINDDN_USER'} eq '') || ($proxysettings{'LDAP_BINDDN_PASS'} eq ''))
505 {
506 $errormessage = $Lang::tr{'advproxy errmsg ldap bind dn'};
507 goto ERROR;
508 }
509 }
510 }
ed38f89d
MT
511 if ($proxysettings{'AUTH_METHOD'} eq 'radius')
512 {
513 if (!&General::validip($proxysettings{'RADIUS_SERVER'}))
514 {
515 $errormessage = $Lang::tr{'advproxy errmsg radius server'};
516 goto ERROR;
517 }
518 if (!&General::validport($proxysettings{'RADIUS_PORT'}))
519 {
520 $errormessage = $Lang::tr{'advproxy errmsg radius port'};
521 goto ERROR;
522 }
523 if ($proxysettings{'RADIUS_SECRET'} eq '')
524 {
525 $errormessage = $Lang::tr{'advproxy errmsg radius secret'};
526 goto ERROR;
527 }
ac1cfefa
MT
528 }
529
363fb6af
MT
530 # Quick parent proxy error checking of username and password info. If username password don't both exist give an error.
531 $proxy1 = 'YES';
532 $proxy2 = 'YES';
533 if (($proxysettings{'UPSTREAM_USER'} eq '')) {$proxy1 = '';}
534 if (($proxysettings{'UPSTREAM_PASSWORD'} eq '')) {$proxy2 = '';}
535 if ($proxysettings{'UPSTREAM_USER'} eq 'PASS') {$proxy1=$proxy2='PASS'; $proxysettings{'UPSTREAM_PASSWORD'} = '';}
536 if (($proxy1 ne $proxy2))
537 {
538 $errormessage = $Lang::tr{'advproxy errmsg invalid upstream proxy username or password setting'};
539 goto ERROR;
540 }
ac1cfefa 541
ed38f89d
MT
542ERROR:
543 &check_acls;
ac1cfefa 544
ed38f89d
MT
545 if ($errormessage) {
546 $proxysettings{'VALID'} = 'no'; }
547 else {
363fb6af 548 $proxysettings{'VALID'} = 'yes'; }
ac1cfefa 549
ed38f89d 550 if ($proxysettings{'VALID'} eq 'yes')
ac1cfefa 551 {
e698090e
SS
552 # Determine if suricata may needs to be restarted.
553 my $suricata_proxy_ports_changed;
554
555 # Check if the IDS is running
556 if(&IDS::ids_is_running()) {
557 my %oldproxysettings;
558
559 # Read-in current proxy settings and store them as oldsettings hash.
560 &General::readhash("${General::swroot}/proxy/advanced/settings", \%oldproxysettings);
561
562 # Check if the proxy port has been changed.
563 unless ($proxysettings{'PROXY_PORT'} eq $oldproxysettings{'PROXY_PORT'}) {
564 # Port has changed, suricata needs to be adjusted.
565 $suricata_proxy_ports_changed = 1;
566 }
567
568 # Check if the transparent port has been changed.
569 unless ($proxysettings{'TRANSPARENT_PORT'} eq $oldproxysettings{'TRANSPARENT_PORT'}) {
570 # Transparent port has changed, suricata needs to be adjusted.
571 $suricata_proxy_ports_changed = 1;
572 }
573 }
574
ed38f89d 575 &write_acls;
ac1cfefa 576
ed38f89d
MT
577 delete $proxysettings{'SRC_SUBNETS'};
578 delete $proxysettings{'SRC_BANNED_IP'};
579 delete $proxysettings{'SRC_BANNED_MAC'};
580 delete $proxysettings{'SRC_UNRESTRICTED_IP'};
581 delete $proxysettings{'SRC_UNRESTRICTED_MAC'};
582 delete $proxysettings{'DST_NOCACHE'};
583 delete $proxysettings{'DST_NOAUTH'};
ce1c170b
AK
584 delete $proxysettings{'DST_NOPROXY_IP'};
585 delete $proxysettings{'DST_NOPROXY_URL'};
363fb6af
MT
586 delete $proxysettings{'PORTS_SAFE'};
587 delete $proxysettings{'PORTS_SSL'};
ed38f89d
MT
588 delete $proxysettings{'MIME_TYPES'};
589 delete $proxysettings{'NTLM_ALLOW_USERS'};
590 delete $proxysettings{'NTLM_DENY_USERS'};
591 delete $proxysettings{'RADIUS_ALLOW_USERS'};
592 delete $proxysettings{'RADIUS_DENY_USERS'};
593 delete $proxysettings{'IDENT_HOSTS'};
594 delete $proxysettings{'IDENT_ALLOW_USERS'};
595 delete $proxysettings{'IDENT_DENY_USERS'};
ac1cfefa 596
ed38f89d
MT
597 delete $proxysettings{'CRE_GROUPS'};
598 delete $proxysettings{'CRE_SVHOSTS'};
ac1cfefa 599
ed38f89d
MT
600 delete $proxysettings{'NCSA_USERNAME'};
601 delete $proxysettings{'NCSA_GROUP'};
602 delete $proxysettings{'NCSA_PASS'};
603 delete $proxysettings{'NCSA_PASS_CONFIRM'};
ac1cfefa 604
ed38f89d
MT
605 $proxysettings{'TIME_MON'} = 'off' unless exists $proxysettings{'TIME_MON'};
606 $proxysettings{'TIME_TUE'} = 'off' unless exists $proxysettings{'TIME_TUE'};
607 $proxysettings{'TIME_WED'} = 'off' unless exists $proxysettings{'TIME_WED'};
608 $proxysettings{'TIME_THU'} = 'off' unless exists $proxysettings{'TIME_THU'};
609 $proxysettings{'TIME_FRI'} = 'off' unless exists $proxysettings{'TIME_FRI'};
610 $proxysettings{'TIME_SAT'} = 'off' unless exists $proxysettings{'TIME_SAT'};
611 $proxysettings{'TIME_SUN'} = 'off' unless exists $proxysettings{'TIME_SUN'};
ac1cfefa 612
ed38f89d
MT
613 $proxysettings{'AUTH_ALWAYS_REQUIRED'} = 'off' unless exists $proxysettings{'AUTH_ALWAYS_REQUIRED'};
614 $proxysettings{'NTLM_ENABLE_INT_AUTH'} = 'off' unless exists $proxysettings{'NTLM_ENABLE_INT_AUTH'};
ac1cfefa 615
ed38f89d 616 &General::writehash("${General::swroot}/proxy/advanced/settings", \%proxysettings);
ac1cfefa 617
363fb6af
MT
618 if (-e "${General::swroot}/proxy/settings") { &General::readhash("${General::swroot}/proxy/settings", \%stdproxysettings); }
619 $stdproxysettings{'PROXY_PORT'} = $proxysettings{'PROXY_PORT'};
488d1b7c
CS
620 $stdproxysettings{'UPSTREAM_PROXY'} = $proxysettings{'UPSTREAM_PROXY'};
621 $stdproxysettings{'UPSTREAM_USER'} = $proxysettings{'UPSTREAM_USER'};
622 $stdproxysettings{'UPSTREAM_PASSWORD'} = $proxysettings{'UPSTREAM_PASSWORD'};
9fb25b1c
MT
623 $stdproxysettings{'ENABLE_FILTER'} = $proxysettings{'ENABLE_FILTER'};
624 $stdproxysettings{'ENABLE_UPDXLRATOR'} = $proxysettings{'ENABLE_UPDXLRATOR'};
d12aede7 625 $stdproxysettings{'ENABLE_CLAMAV'} = $proxysettings{'ENABLE_CLAMAV'};
363fb6af 626 &General::writehash("${General::swroot}/proxy/settings", \%stdproxysettings);
ac1cfefa 627
ed38f89d
MT
628 &writeconfig;
629 &writepacfile;
630
fe1656d2
CS
631 if ($proxysettings{'CACHEMGR'} eq 'on'){&writecachemgr;}
632
66191888 633 &General::system ('/usr/local/bin/squidctrl', 'disable');
ed38f89d
MT
634 unlink "${General::swroot}/proxy/enable";
635 unlink "${General::swroot}/proxy/transparent";
636 unlink "${General::swroot}/proxy/enable_blue";
637 unlink "${General::swroot}/proxy/transparent_blue";
ac1cfefa 638
ac1cfefa 639 if ($proxysettings{'ENABLE'} eq 'on') {
66191888
MT
640 &General::system('/usr/bin/touch', "${General::swroot}/proxy/enable");
641 &General::system('/usr/local/bin/squidctrl', 'enable'); }
6c689591 642 if ($proxysettings{'TRANSPARENT'} eq 'on' && $proxysettings{'ENABLE'} eq 'on') {
66191888 643 &General::system('/usr/bin/touch', "${General::swroot}/proxy/transparent"); }
ac1cfefa 644 if ($proxysettings{'ENABLE_BLUE'} eq 'on') {
66191888
MT
645 &General::system('/usr/bin/touch', "${General::swroot}/proxy/enable_blue");
646 &General::system('/usr/local/bin/squidctrl', 'enable'); }
6c689591 647 if ($proxysettings{'TRANSPARENT_BLUE'} eq 'on' && $proxysettings{'ENABLE_BLUE'} eq 'on') {
66191888 648 &General::system('/usr/bin/touch', "${General::swroot}/proxy/transparent_blue"); }
ed38f89d 649
66191888
MT
650 if ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy save and restart'}) { &General::system('/usr/local/bin/squidctrl', 'restart'); }
651 if ($proxysettings{'ACTION'} eq $Lang::tr{'proxy reconfigure'}) { &General::system('/usr/local/bin/squidctrl', 'reconfigure'); }
e698090e
SS
652
653 # Check if the suricata_proxy_ports_changed flag has been set.
654 if ($suricata_proxy_ports_changed) {
655 # Re-generate HTTP ports file.
656 &IDS::generate_http_ports_file();
657
658 # Restart suricata.
659 &IDS::call_suricatactrl("restart");
660 }
fe1656d2 661 }
ac1cfefa
MT
662}
663
363fb6af 664if ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy clear cache'})
ac1cfefa 665{
66191888 666 &General::system('/usr/local/bin/squidctrl', 'flush');
ac1cfefa
MT
667}
668
ed38f89d
MT
669if (!$errormessage)
670{
671 if (-e "${General::swroot}/proxy/advanced/settings") {
672 &General::readhash("${General::swroot}/proxy/advanced/settings", \%proxysettings);
673 } elsif (-e "${General::swroot}/proxy/settings") {
674 &General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
675 }
676 &read_acls;
677}
ac1cfefa 678
dfee7582
SS
679# ------------------------------------------------------------------
680
681# Hook to regenerate the configuration files, if cgi got called from command line.
682if ($ENV{"REMOTE_ADDR"} eq "") {
683 writeconfig();
684 exit(0);
685}
686
687# -------------------------------------------------------------------
688
ac1cfefa
MT
689$checked{'ENABLE'}{'off'} = '';
690$checked{'ENABLE'}{'on'} = '';
691$checked{'ENABLE'}{$proxysettings{'ENABLE'}} = "checked='checked'";
692
693$checked{'TRANSPARENT'}{'off'} = '';
694$checked{'TRANSPARENT'}{'on'} = '';
695$checked{'TRANSPARENT'}{$proxysettings{'TRANSPARENT'}} = "checked='checked'";
696
697$checked{'ENABLE_BLUE'}{'off'} = '';
698$checked{'ENABLE_BLUE'}{'on'} = '';
699$checked{'ENABLE_BLUE'}{$proxysettings{'ENABLE_BLUE'}} = "checked='checked'";
700
701$checked{'TRANSPARENT_BLUE'}{'off'} = '';
702$checked{'TRANSPARENT_BLUE'}{'on'} = '';
703$checked{'TRANSPARENT_BLUE'}{$proxysettings{'TRANSPARENT_BLUE'}} = "checked='checked'";
704
363fb6af
MT
705$checked{'SUPPRESS_VERSION'}{'off'} = '';
706$checked{'SUPPRESS_VERSION'}{'on'} = '';
707$checked{'SUPPRESS_VERSION'}{$proxysettings{'SUPPRESS_VERSION'}} = "checked='checked'";
708
ed38f89d
MT
709$checked{'FORWARD_IPADDRESS'}{'off'} = '';
710$checked{'FORWARD_IPADDRESS'}{'on'} = '';
711$checked{'FORWARD_IPADDRESS'}{$proxysettings{'FORWARD_IPADDRESS'}} = "checked='checked'";
712$checked{'FORWARD_USERNAME'}{'off'} = '';
713$checked{'FORWARD_USERNAME'}{'on'} = '';
714$checked{'FORWARD_USERNAME'}{$proxysettings{'FORWARD_USERNAME'}} = "checked='checked'";
715$checked{'FORWARD_VIA'}{'off'} = '';
716$checked{'FORWARD_VIA'}{'on'} = '';
717$checked{'FORWARD_VIA'}{$proxysettings{'FORWARD_VIA'}} = "checked='checked'";
363fb6af
MT
718$checked{'NO_CONNECTION_AUTH'}{'off'} = '';
719$checked{'NO_CONNECTION_AUTH'}{'on'} = '';
720$checked{'NO_CONNECTION_AUTH'}{$proxysettings{'NO_CONNECTION_AUTH'}} = "checked='checked'";
ed38f89d
MT
721
722$selected{'MEM_POLICY'}{$proxysettings{'MEM_POLICY'}} = "selected='selected'";
723$selected{'CACHE_POLICY'}{$proxysettings{'CACHE_POLICY'}} = "selected='selected'";
724$selected{'L1_DIRS'}{$proxysettings{'L1_DIRS'}} = "selected='selected'";
725$checked{'OFFLINE_MODE'}{'off'} = '';
726$checked{'OFFLINE_MODE'}{'on'} = '';
727$checked{'OFFLINE_MODE'}{$proxysettings{'OFFLINE_MODE'}} = "checked='checked'";
6bea848d
JB
728$checked{'CACHE_DIGESTS'}{'off'} = '';
729$checked{'CACHE_DIGESTS'}{'on'} = '';
730$checked{'CACHE_DIGESTS'}{$proxysettings{'CACHE_DIGESTS'}} = "checked='checked'";
ed38f89d 731
ac1cfefa
MT
732$checked{'LOGGING'}{'off'} = '';
733$checked{'LOGGING'}{'on'} = '';
734$checked{'LOGGING'}{$proxysettings{'LOGGING'}} = "checked='checked'";
fe1656d2
CS
735$checked{'CACHEMGR'}{'off'} = '';
736$checked{'CACHEMGR'}{'on'} = '';
737$checked{'CACHEMGR'}{$proxysettings{'CACHEMGR'}} = "checked='checked'";
ed38f89d
MT
738$checked{'LOGQUERY'}{'off'} = '';
739$checked{'LOGQUERY'}{'on'} = '';
740$checked{'LOGQUERY'}{$proxysettings{'LOGQUERY'}} = "checked='checked'";
741$checked{'LOGUSERAGENT'}{'off'} = '';
742$checked{'LOGUSERAGENT'}{'on'} = '';
743$checked{'LOGUSERAGENT'}{$proxysettings{'LOGUSERAGENT'}} = "checked='checked'";
744
745$selected{'ERR_LANGUAGE'}{$proxysettings{'ERR_LANGUAGE'}} = "selected='selected'";
363fb6af 746$selected{'ERR_DESIGN'}{$proxysettings{'ERR_DESIGN'}} = "selected='selected'";
ed38f89d 747
9fb25b1c
MT
748$checked{'NO_PROXY_LOCAL'}{'off'} = '';
749$checked{'NO_PROXY_LOCAL'}{'on'} = '';
750$checked{'NO_PROXY_LOCAL'}{$proxysettings{'NO_PROXY_LOCAL'}} = "checked='checked'";
751$checked{'NO_PROXY_LOCAL_BLUE'}{'off'} = '';
752$checked{'NO_PROXY_LOCAL_BLUE'}{'on'} = '';
753$checked{'NO_PROXY_LOCAL_BLUE'}{$proxysettings{'NO_PROXY_LOCAL_BLUE'}} = "checked='checked'";
754
ed38f89d
MT
755$checked{'CLASSROOM_EXT'}{'off'} = '';
756$checked{'CLASSROOM_EXT'}{'on'} = '';
757$checked{'CLASSROOM_EXT'}{$proxysettings{'CLASSROOM_EXT'}} = "checked='checked'";
758
759$selected{'TIME_ACCESS_MODE'}{$proxysettings{'TIME_ACCESS_MODE'}} = "selected='selected'";
760$selected{'TIME_FROM_HOUR'}{$proxysettings{'TIME_FROM_HOUR'}} = "selected='selected'";
761$selected{'TIME_FROM_MINUTE'}{$proxysettings{'TIME_FROM_MINUTE'}} = "selected='selected'";
762$selected{'TIME_TO_HOUR'}{$proxysettings{'TIME_TO_HOUR'}} = "selected='selected'";
763$selected{'TIME_TO_MINUTE'}{$proxysettings{'TIME_TO_MINUTE'}} = "selected='selected'";
764
765$proxysettings{'TIME_MON'} = 'on' unless exists $proxysettings{'TIME_MON'};
766$proxysettings{'TIME_TUE'} = 'on' unless exists $proxysettings{'TIME_TUE'};
767$proxysettings{'TIME_WED'} = 'on' unless exists $proxysettings{'TIME_WED'};
768$proxysettings{'TIME_THU'} = 'on' unless exists $proxysettings{'TIME_THU'};
769$proxysettings{'TIME_FRI'} = 'on' unless exists $proxysettings{'TIME_FRI'};
770$proxysettings{'TIME_SAT'} = 'on' unless exists $proxysettings{'TIME_SAT'};
771$proxysettings{'TIME_SUN'} = 'on' unless exists $proxysettings{'TIME_SUN'};
772
773$checked{'TIME_MON'}{'off'} = '';
774$checked{'TIME_MON'}{'on'} = '';
775$checked{'TIME_MON'}{$proxysettings{'TIME_MON'}} = "checked='checked'";
776$checked{'TIME_TUE'}{'off'} = '';
777$checked{'TIME_TUE'}{'on'} = '';
778$checked{'TIME_TUE'}{$proxysettings{'TIME_TUE'}} = "checked='checked'";
779$checked{'TIME_WED'}{'off'} = '';
780$checked{'TIME_WED'}{'on'} = '';
781$checked{'TIME_WED'}{$proxysettings{'TIME_WED'}} = "checked='checked'";
782$checked{'TIME_THU'}{'off'} = '';
783$checked{'TIME_THU'}{'on'} = '';
784$checked{'TIME_THU'}{$proxysettings{'TIME_THU'}} = "checked='checked'";
785$checked{'TIME_FRI'}{'off'} = '';
786$checked{'TIME_FRI'}{'on'} = '';
787$checked{'TIME_FRI'}{$proxysettings{'TIME_FRI'}} = "checked='checked'";
788$checked{'TIME_SAT'}{'off'} = '';
789$checked{'TIME_SAT'}{'on'} = '';
790$checked{'TIME_SAT'}{$proxysettings{'TIME_SAT'}} = "checked='checked'";
791$checked{'TIME_SUN'}{'off'} = '';
792$checked{'TIME_SUN'}{'on'} = '';
793$checked{'TIME_SUN'}{$proxysettings{'TIME_SUN'}} = "checked='checked'";
794
795$selected{'THROTTLING_GREEN_TOTAL'}{$proxysettings{'THROTTLING_GREEN_TOTAL'}} = "selected='selected'";
796$selected{'THROTTLING_GREEN_HOST'}{$proxysettings{'THROTTLING_GREEN_HOST'}} = "selected='selected'";
797$selected{'THROTTLING_BLUE_TOTAL'}{$proxysettings{'THROTTLING_BLUE_TOTAL'}} = "selected='selected'";
798$selected{'THROTTLING_BLUE_HOST'}{$proxysettings{'THROTTLING_BLUE_HOST'}} = "selected='selected'";
799
ed38f89d
MT
800$checked{'ENABLE_MIME_FILTER'}{'off'} = '';
801$checked{'ENABLE_MIME_FILTER'}{'on'} = '';
802$checked{'ENABLE_MIME_FILTER'}{$proxysettings{'ENABLE_MIME_FILTER'}} = "checked='checked'";
803
ed38f89d
MT
804$checked{'AUTH_METHOD'}{'none'} = '';
805$checked{'AUTH_METHOD'}{'ncsa'} = '';
806$checked{'AUTH_METHOD'}{'ident'} = '';
807$checked{'AUTH_METHOD'}{'ldap'} = '';
603248db 808$checked{'AUTH_METHOD'}{'ntlm-auth'} = '';
ed38f89d
MT
809$checked{'AUTH_METHOD'}{'radius'} = '';
810$checked{'AUTH_METHOD'}{$proxysettings{'AUTH_METHOD'}} = "checked='checked'";
ac1cfefa 811
ed38f89d
MT
812$proxysettings{'AUTH_ALWAYS_REQUIRED'} = 'on' unless exists $proxysettings{'AUTH_ALWAYS_REQUIRED'};
813
814$checked{'AUTH_ALWAYS_REQUIRED'}{'off'} = '';
815$checked{'AUTH_ALWAYS_REQUIRED'}{'on'} = '';
816$checked{'AUTH_ALWAYS_REQUIRED'}{$proxysettings{'AUTH_ALWAYS_REQUIRED'}} = "checked='checked'";
817
818$checked{'NCSA_BYPASS_REDIR'}{'off'} = '';
819$checked{'NCSA_BYPASS_REDIR'}{'on'} = '';
820$checked{'NCSA_BYPASS_REDIR'}{$proxysettings{'NCSA_BYPASS_REDIR'}} = "checked='checked'";
821
822$selected{'NCSA_GROUP'}{$proxysettings{'NCSA_GROUP'}} = "selected='selected'";
823
824$selected{'LDAP_TYPE'}{$proxysettings{'LDAP_TYPE'}} = "selected='selected'";
825
826$proxysettings{'NTLM_ENABLE_INT_AUTH'} = 'on' unless exists $proxysettings{'NTLM_ENABLE_INT_AUTH'};
827
828$checked{'NTLM_ENABLE_INT_AUTH'}{'off'} = '';
829$checked{'NTLM_ENABLE_INT_AUTH'}{'on'} = '';
830$checked{'NTLM_ENABLE_INT_AUTH'}{$proxysettings{'NTLM_ENABLE_INT_AUTH'}} = "checked='checked'";
831
832$checked{'NTLM_ENABLE_ACL'}{'off'} = '';
833$checked{'NTLM_ENABLE_ACL'}{'on'} = '';
834$checked{'NTLM_ENABLE_ACL'}{$proxysettings{'NTLM_ENABLE_ACL'}} = "checked='checked'";
835
836$checked{'NTLM_USER_ACL'}{'positive'} = '';
837$checked{'NTLM_USER_ACL'}{'negative'} = '';
838$checked{'NTLM_USER_ACL'}{$proxysettings{'NTLM_USER_ACL'}} = "checked='checked'";
839
2fc5124b
MT
840$checked{'NTLM_AUTH_BASIC'}{'on'} = '';
841$checked{'NTLM_AUTH_BASIC'}{'off'} = '';
842$checked{'NTLM_AUTH_BASIC'}{$proxysettings{'NTLM_AUTH_BASIC'}} = "checked='checked'";
843
ed38f89d
MT
844$checked{'RADIUS_ENABLE_ACL'}{'off'} = '';
845$checked{'RADIUS_ENABLE_ACL'}{'on'} = '';
846$checked{'RADIUS_ENABLE_ACL'}{$proxysettings{'RADIUS_ENABLE_ACL'}} = "checked='checked'";
847
848$checked{'RADIUS_USER_ACL'}{'positive'} = '';
849$checked{'RADIUS_USER_ACL'}{'negative'} = '';
850$checked{'RADIUS_USER_ACL'}{$proxysettings{'RADIUS_USER_ACL'}} = "checked='checked'";
851
852$checked{'IDENT_REQUIRED'}{'off'} = '';
853$checked{'IDENT_REQUIRED'}{'on'} = '';
854$checked{'IDENT_REQUIRED'}{$proxysettings{'IDENT_REQUIRED'}} = "checked='checked'";
855
856$checked{'IDENT_ENABLE_ACL'}{'off'} = '';
857$checked{'IDENT_ENABLE_ACL'}{'on'} = '';
858$checked{'IDENT_ENABLE_ACL'}{$proxysettings{'IDENT_ENABLE_ACL'}} = "checked='checked'";
859
860$checked{'IDENT_USER_ACL'}{'positive'} = '';
861$checked{'IDENT_USER_ACL'}{'negative'} = '';
862$checked{'IDENT_USER_ACL'}{$proxysettings{'IDENT_USER_ACL'}} = "checked='checked'";
863
9fb25b1c
MT
864$checked{'ENABLE_FILTER'}{'off'} = '';
865$checked{'ENABLE_FILTER'}{'on'} = '';
866$checked{'ENABLE_FILTER'}{$proxysettings{'ENABLE_FILTER'}} = "checked='checked'";
ed38f89d 867
9fb25b1c
MT
868$checked{'ENABLE_UPDXLRATOR'}{'off'} = '';
869$checked{'ENABLE_UPDXLRATOR'}{'on'} = '';
870$checked{'ENABLE_UPDXLRATOR'}{$proxysettings{'ENABLE_UPDXLRATOR'}} = "checked='checked'";
ed38f89d 871
d12aede7
CS
872$checked{'ENABLE_CLAMAV'}{'off'} = '';
873$checked{'ENABLE_CLAMAV'}{'on'} = '';
874$checked{'ENABLE_CLAMAV'}{$proxysettings{'ENABLE_CLAMAV'}} = "checked='checked'";
875
ed38f89d 876&Header::openpage($Lang::tr{'advproxy advanced web proxy configuration'}, 1, '');
ac1cfefa
MT
877
878&Header::openbigbox('100%', 'left', '', $errormessage);
879
880if ($errormessage) {
881 &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
882 print "<font class='base'>$errormessage&nbsp;</font>\n";
883 &Header::closebox();
884}
885
363fb6af
MT
886if ($squidversion[0] =~ /^Squid\sCache:\sVersion\s/i)
887{
888 $squidversion[0] =~ s/^Squid\sCache:\sVersion//i;
889 $squidversion[0] =~ s/^\s+//g;
890 $squidversion[0] =~ s/\s+$//g;
891} else {
892 $squidversion[0] = $Lang::tr{'advproxy unknown'};
893}
894
ed38f89d
MT
895# ===================================================================
896# Main settings
897# ===================================================================
898
899unless ($proxysettings{'NCSA_EDIT_MODE'} eq 'yes') {
900
ac1cfefa
MT
901print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";
902
ed38f89d
MT
903&Header::openbox('100%', 'left', "$Lang::tr{'advproxy advanced web proxy'}");
904
ac1cfefa
MT
905print <<END
906<table width='100%'>
907<tr>
ed38f89d
MT
908 <td colspan='4' class='base'><b>$Lang::tr{'advproxy common settings'}</b></td>
909</tr>
910<tr>
911 <td width='25%' class='base'>$Lang::tr{'advproxy enabled on'} <font color="$Header::colourgreen">Green</font>:</td>
912 <td width='20%'><input type='checkbox' name='ENABLE' $checked{'ENABLE'}{'on'} /></td>
e3edceeb 913 <td width='25%' class='base'>$Lang::tr{'advproxy proxy port'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
ed38f89d 914 <td width='30%'><input type='text' name='PROXY_PORT' value='$proxysettings{'PROXY_PORT'}' size='5' /></td>
ac1cfefa
MT
915</tr>
916<tr>
ed38f89d 917 <td class='base'>$Lang::tr{'advproxy transparent on'} <font color="$Header::colourgreen">Green</font>:</td>
ac1cfefa 918 <td><input type='checkbox' name='TRANSPARENT' $checked{'TRANSPARENT'}{'on'} /></td>
e3edceeb 919 <td width='25%' class='base'>$Lang::tr{'advproxy proxy port transparent'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
0f6b6067 920 <td width='30%'><input type='text' name='TRANSPARENT_PORT' value='$proxysettings{'TRANSPARENT_PORT'}' size='5' /></td>
ac1cfefa
MT
921</tr>
922<tr>
923END
924;
925if ($netsettings{'BLUE_DEV'}) {
ed38f89d 926 print "<td class='base'>$Lang::tr{'advproxy enabled on'} <font color='$Header::colourblue'>Blue</font>:</td>";
ac1cfefa
MT
927 print "<td><input type='checkbox' name='ENABLE_BLUE' $checked{'ENABLE_BLUE'}{'on'} /></td>";
928} else {
929 print "<td colspan='2'>&nbsp;</td>";
930}
931print <<END
e3edceeb 932 <td class='base'>$Lang::tr{'advproxy visible hostname'}:</td>
0f6b6067 933 <td><input type='text' name='VISIBLE_HOSTNAME' value='$proxysettings{'VISIBLE_HOSTNAME'}' /></td>
ac1cfefa
MT
934</tr>
935<tr>
936END
937;
938if ($netsettings{'BLUE_DEV'}) {
ed38f89d 939 print "<td class='base'>$Lang::tr{'advproxy transparent on'} <font color='$Header::colourblue'>Blue</font>:</td>";
ac1cfefa
MT
940 print "<td><input type='checkbox' name='TRANSPARENT_BLUE' $checked{'TRANSPARENT_BLUE'}{'on'} /></td>";
941} else {
942 print "<td colspan='2'>&nbsp;</td>";
943}
944print <<END
ed38f89d
MT
945 <td class='base'>$Lang::tr{'advproxy error language'}:</td>
946 <td class='base'>
947 <select name='ERR_LANGUAGE'>
948END
949;
363fb6af 950 foreach (<$errordir/*>) {
ed38f89d
MT
951 if (-d) {
952 $language = substr($_,rindex($_,"/")+1);
953 print "<option value='$language' $selected{'ERR_LANGUAGE'}{$language}>$language</option>\n";
954 }
955 }
956print <<END
957 </select>
958 </td>
959</tr>
10e4f239 960<tr>
363fb6af
MT
961 <td class='base'>$Lang::tr{'advproxy suppress version'}:</td>
962 <td><input type='checkbox' name='SUPPRESS_VERSION' $checked{'SUPPRESS_VERSION'}{'on'} /></td>
963 <td class='base'>$Lang::tr{'advproxy error design'}:</td>
964 <td class='base'><select name='ERR_DESIGN'>
0d948999 965 <option value='ipfire' $selected{'ERR_DESIGN'}{'ipfire'}>IPFire</option>
363fb6af
MT
966 <option value='squid' $selected{'ERR_DESIGN'}{'squid'}>$Lang::tr{'advproxy standard'}</option>
967 </select></td>
10e4f239
MT
968</tr>
969<tr>
363fb6af
MT
970 <td class='base'>$Lang::tr{'advproxy squid version'}:</td>
971 <td class='base'>&nbsp;[<font color='$Header::colourred'> $squidversion[0] </font>]</td>
972 <td>&nbsp;</td>
973 <td>&nbsp;</td>
10e4f239 974</tr>
ed38f89d
MT
975</table>
976<hr size='1'>
977<table width='100%'>
d12aede7
CS
978END
979;
980if ( -e "/usr/bin/squidclamav" ) {
01212e04 981 print "<td class='base'><b>".$Lang::tr{'advproxy squidclamav'}."</b><br />";
bd027d94
CS
982 if ( ! -e "/var/run/clamav/clamd.pid" ){
983 print "<font color='red'>clamav not running</font><br /><br />";
984 $proxysettings{'ENABLE_CLAMAV'} = 'off';
985 }
986 else {
987 print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_CLAMAV' ".$checked{'ENABLE_CLAMAV'}{'on'}." /><br />";
1a3323f2 988}
01212e04
CS
989 print "</td>";
990} else {
991 print "<td></td>";
d12aede7 992}
082771c1 993print "<td class='base'><a href='/cgi-bin/urlfilter.cgi'><b>".$Lang::tr{'advproxy url filter'}."</a></b><br />";
01212e04 994print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_FILTER' ".$checked{'ENABLE_FILTER'}{'on'}." /><br />";
01212e04 995print "</td>";
082771c1 996print "<td class='base'><a href='/cgi-bin/updatexlrator.cgi'><b>".$Lang::tr{'advproxy update accelerator'}."</a></b><br />";
01212e04 997print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_UPDXLRATOR' ".$checked{'ENABLE_UPDXLRATOR'}{'on'}." /><br />";
01212e04 998print "</td></tr>";
d12aede7 999print <<END
9141bd34
CS
1000</table>
1001<hr size='1'>
1002<table width='100%'>
ed38f89d
MT
1003<tr>
1004 <td colspan='4' class='base'><b>$Lang::tr{'advproxy upstream proxy'}</b></td>
1005</tr>
1006<tr>
488d1b7c
CS
1007 <td width='25%' class='base'>$Lang::tr{'advproxy via forwarding'}:</td>
1008 <td width='20%'><input type='checkbox' name='FORWARD_VIA' $checked{'FORWARD_VIA'}{'on'} /></td>
e3edceeb 1009 <td width='25%' class='base'>$Lang::tr{'advproxy upstream proxy host:port'}:</td>
488d1b7c 1010 <td width='30%'><input type='text' name='UPSTREAM_PROXY' value='$proxysettings{'UPSTREAM_PROXY'}' /></td>
ed38f89d
MT
1011</tr>
1012<tr>
488d1b7c
CS
1013 <td class='base'>$Lang::tr{'advproxy client IP forwarding'}:</td>
1014 <td><input type='checkbox' name='FORWARD_IPADDRESS' $checked{'FORWARD_IPADDRESS'}{'on'} /></td>
e3edceeb 1015 <td class='base'>$Lang::tr{'advproxy upstream username'}:</td>
488d1b7c 1016 <td><input type='text' name='UPSTREAM_USER' value='$proxysettings{'UPSTREAM_USER'}' /></td>
ac1cfefa 1017</tr>
ac1cfefa 1018<tr>
488d1b7c
CS
1019 <td class='base'>$Lang::tr{'advproxy username forwarding'}:</td>
1020 <td><input type='checkbox' name='FORWARD_USERNAME' $checked{'FORWARD_USERNAME'}{'on'} /></td>
e3edceeb 1021 <td class='base'>$Lang::tr{'advproxy upstream password'}:</td>
488d1b7c 1022 <td><input type='password' name='UPSTREAM_PASSWORD' value='$proxysettings{'UPSTREAM_PASSWORD'}' /></td>
ed38f89d 1023</tr>
363fb6af 1024<tr>
488d1b7c
CS
1025 <td class='base'>$Lang::tr{'advproxy no connection auth'}:</td>
1026 <td><input type='checkbox' name='NO_CONNECTION_AUTH' $checked{'NO_CONNECTION_AUTH'}{'on'} /></td>
1027 <td>&nbsp;</td>
1028 <td>&nbsp;</td>
363fb6af 1029</tr>
ed38f89d
MT
1030</table>
1031<hr size='1'>
1032<table width='100%'>
1033<tr>
1034 <td colspan='4' class='base'><b>$Lang::tr{'advproxy log settings'}</b></td>
1035</tr>
1036<tr>
488d1b7c
CS
1037 <td width='25%' class='base'>$Lang::tr{'advproxy log enabled'}:</td>
1038 <td width='20%'><input type='checkbox' name='LOGGING' $checked{'LOGGING'}{'on'} /></td>
1039 <td width='25%'class='base'>$Lang::tr{'advproxy log query'}:</td>
1040 <td width='30%'><input type='checkbox' name='LOGQUERY' $checked{'LOGQUERY'}{'on'} /></td>
1041</tr>
1042<tr>
1043 <td>&nbsp;</td>
1044 <td>&nbsp;</td>
1045 <td class='base'>$Lang::tr{'advproxy log useragent'}:</td>
1046 <td><input type='checkbox' name='LOGUSERAGENT' $checked{'LOGUSERAGENT'}{'on'} /></td>
ed38f89d
MT
1047</tr>
1048</table>
1049<hr size='1'>
1050<table width='100%'>
1051<tr>
1052 <td colspan='4'><b>$Lang::tr{'advproxy cache management'}</b></td>
1053</tr>
fe1656d2 1054<tr>
c4b12981 1055 <td class='base'><a href='/cgi-bin/cachemgr.cgi' target='_blank'>$Lang::tr{'proxy cachemgr'}:</td>
fe1656d2 1056 <td><input type='checkbox' name='CACHEMGR' $checked{'CACHEMGR'}{'on'} /></td>
e3edceeb 1057 <td class='base'>$Lang::tr{'advproxy admin mail'}:</td>
fe1656d2
CS
1058 <td><input type='text' name='ADMIN_MAIL_ADDRESS' value='$proxysettings{'ADMIN_MAIL_ADDRESS'}' /></td>
1059</tr>
1060<tr>
e3edceeb 1061 <td class='base'>$Lang::tr{'proxy filedescriptors'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
fe1656d2 1062 <td><input type='text' name='FILEDESCRIPTORS' value='$proxysettings{'FILEDESCRIPTORS'}' size='5' /></td>
e3edceeb 1063 <td class='base'>$Lang::tr{'proxy admin password'}:</td>
fe1656d2
CS
1064 <td><input type='text' name='ADMIN_PASSWORD' value='$proxysettings{'ADMIN_PASSWORD'}' /></td>
1065</tr>
ed38f89d 1066<tr>
488d1b7c 1067 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
ac1cfefa
MT
1068</tr>
1069<tr>
e3edceeb 1070 <td class='base'>$Lang::tr{'advproxy ram cache size'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
ed38f89d 1071 <td><input type='text' name='CACHE_MEM' value='$proxysettings{'CACHE_MEM'}' size='5' /></td>
e3edceeb 1072 <td class='base'>$Lang::tr{'advproxy hdd cache size'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
ac1cfefa
MT
1073 <td><input type='text' name='CACHE_SIZE' value='$proxysettings{'CACHE_SIZE'}' size='5' /></td>
1074</tr>
1075<tr>
e3edceeb 1076 <td class='base'>$Lang::tr{'advproxy min size'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
ac1cfefa 1077 <td><input type='text' name='MIN_SIZE' value='$proxysettings{'MIN_SIZE'}' size='5' /></td>
e3edceeb 1078 <td class='base'>$Lang::tr{'advproxy max size'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
ac1cfefa
MT
1079 <td><input type='text' name='MAX_SIZE' value='$proxysettings{'MAX_SIZE'}' size='5' /></td>
1080</tr>
1081<tr>
ed38f89d 1082 <td class='base'>$Lang::tr{'advproxy number of L1 dirs'}:</td>
363fb6af
MT
1083 <td class='base'><select name='L1_DIRS'>
1084 <option value='16' $selected{'L1_DIRS'}{'16'}>16</option>
1085 <option value='32' $selected{'L1_DIRS'}{'32'}>32</option>
1086 <option value='64' $selected{'L1_DIRS'}{'64'}>64</option>
1087 <option value='128' $selected{'L1_DIRS'}{'128'}>128</option>
1088 <option value='256' $selected{'L1_DIRS'}{'256'}>256</option>
1089 </select></td>
ed38f89d 1090 <td colspan='2' rowspan= '5' valign='top' class='base'>
363fb6af 1091 <table cellspacing='0' cellpadding='0'>
ed38f89d
MT
1092 <tr>
1093 <!-- intentionally left empty -->
1094 </tr>
1095 <tr>
e3edceeb 1096 <td>$Lang::tr{'advproxy no cache sites'}:</td>
ed38f89d
MT
1097 </tr>
1098 <tr>
1099 <!-- intentionally left empty -->
1100 </tr>
1101 <tr>
1102 <!-- intentionally left empty -->
1103 </tr>
1104 <tr>
488d1b7c 1105 <td><textarea name='DST_NOCACHE' cols='32' rows='6' wrap='off'>
ed38f89d
MT
1106END
1107;
1108
1109print $proxysettings{'DST_NOCACHE'};
1110
1111print <<END
1112</textarea></td>
1113 </tr>
1114 </table>
1115 </td>
1116</tr>
1117<tr>
363fb6af
MT
1118 <td class='base'>$Lang::tr{'advproxy memory replacement policy'}:</td>
1119 <td class='base'><select name='MEM_POLICY'>
1120 <option value='LRU' $selected{'MEM_POLICY'}{'LRU'}>LRU</option>
1121 <option value='heap LFUDA' $selected{'MEM_POLICY'}{'heap LFUDA'}>heap LFUDA</option>
1122 <option value='heap GDSF' $selected{'MEM_POLICY'}{'heap GDSF'}>heap GDSF</option>
1123 <option value='heap LRU' $selected{'MEM_POLICY'}{'heap LRU'}>heap LRU</option>
1124 </select></td>
ed38f89d
MT
1125</tr>
1126<tr>
363fb6af
MT
1127 <td class='base'>$Lang::tr{'advproxy cache replacement policy'}:</td>
1128 <td class='base'><select name='CACHE_POLICY'>
1129 <option value='LRU' $selected{'CACHE_POLICY'}{'LRU'}>LRU</option>
1130 <option value='heap LFUDA' $selected{'CACHE_POLICY'}{'heap LFUDA'}>heap LFUDA</option>
1131 <option value='heap GDSF' $selected{'CACHE_POLICY'}{'heap GDSF'}>heap GDSF</option>
1132 <option value='heap LRU' $selected{'CACHE_POLICY'}{'heap LRU'}>heap LRU</option>
1133 </select></td>
ed38f89d
MT
1134</tr>
1135<tr>
1136 <td colspan='2'>&nbsp;</td>
1137</tr>
1138<tr>
363fb6af 1139 <td class='base'>$Lang::tr{'advproxy offline mode'}:</td>
ed38f89d
MT
1140 <td><input type='checkbox' name='OFFLINE_MODE' $checked{'OFFLINE_MODE'}{'on'} /></td>
1141</tr>
6bea848d
JB
1142<tr>
1143 <td class='base'>$Lang::tr{'advproxy cache-digest'}:</td>
1144 <td><input type='checkbox' name='CACHE_DIGESTS' $checked{'CACHE_DIGESTS'}{'on'} /></td>
1145</tr>
ed38f89d
MT
1146</table>
1147<hr size='1'>
1148<table width='100%'>
363fb6af
MT
1149<tr>
1150 <td colspan='4'><b>$Lang::tr{'advproxy destination ports'}</b></td>
1151</tr>
1152<tr>
631b67b7 1153 <td width='25%' align='center'></td> <td width='20%' align='center'></td><td width='25%' align='center'></td><td width='30%' align='center'></td>
363fb6af
MT
1154</tr>
1155<tr>
e3edceeb
LS
1156 <td colspan='2' class='base'>$Lang::tr{'advproxy standard ports'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
1157 <td colspan='2' class='base'>$Lang::tr{'advproxy ssl ports'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
363fb6af
MT
1158</tr>
1159<tr>
1160 <td colspan='2'><textarea name='PORTS_SAFE' cols='32' rows='6' wrap='off'>
1161END
1162;
1163 if (!$proxysettings{'PORTS_SAFE'}) { print $def_ports_safe; } else { print $proxysettings{'PORTS_SAFE'}; }
1164
1165print <<END
1166</textarea></td>
1167 <td colspan='2'><textarea name='PORTS_SSL' cols='32' rows='6' wrap='off'>
1168END
1169;
1170 if (!$proxysettings{'PORTS_SSL'}) { print $def_ports_ssl; } else { print $proxysettings{'PORTS_SSL'}; }
1171
1172print <<END
1173</textarea></td>
1174</tr>
1175</table>
1176<hr size='1'>
1177<table width='100%'>
ed38f89d
MT
1178<tr>
1179 <td colspan='4'><b>$Lang::tr{'advproxy network based access'}</b></td>
1180</tr>
1181<tr>
1182 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
1183</tr>
1184<tr>
e3edceeb 1185 <td colspan='4' class='base'>$Lang::tr{'advproxy allowed subnets'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
ed38f89d
MT
1186</tr>
1187<tr>
9141bd34 1188 <td colspan='2' rowspan='4'><textarea name='SRC_SUBNETS' cols='32' rows='3' wrap='off'>
ed38f89d
MT
1189END
1190;
1191
363fb6af
MT
1192if (!$proxysettings{'SRC_SUBNETS'})
1193{
f09a0af5 1194 print "$green_cidr\n";
363fb6af
MT
1195 if ($netsettings{'BLUE_DEV'})
1196 {
f09a0af5 1197 print "$blue_cidr\n";
ed38f89d 1198 }
363fb6af 1199} else { print $proxysettings{'SRC_SUBNETS'}; }
ed38f89d
MT
1200
1201print <<END
1202</textarea></td>
9fb25b1c
MT
1203END
1204;
1205
1206$line = $Lang::tr{'advproxy no internal proxy on green'};
1207$line =~ s/Green/<font color="$Header::colourgreen">Green<\/font>/i;
1208print "<td class='base'>$line:</td>\n";
1209print <<END
1210 <td><input type='checkbox' name='NO_PROXY_LOCAL' $checked{'NO_PROXY_LOCAL'}{'on'} /></td>
1211</tr>
1212END
1213;
1214if ($netsettings{'BLUE_DEV'}) {
1215 $line = $Lang::tr{'advproxy no internal proxy on blue'};
1216 $line =~ s/Blue/<font color="$Header::colourblue">Blue<\/font>/i;
1217 print "<tr>\n";
1218 print "<td class='base'>$line:</td>\n";
1219 print <<END
1220 <td><input type='checkbox' name='NO_PROXY_LOCAL_BLUE' $checked{'NO_PROXY_LOCAL_BLUE'}{'on'} /></td>
1221</tr>
1222END
1223;
1224}
1225print <<END
1226<tr>
1227 <td colspan='2'>&nbsp;</td>
1228</tr>
1229<tr>
ed38f89d
MT
1230 <td colspan='2'>&nbsp;</td>
1231</tr>
1232</table>
1233<table width='100%'>
1234<tr>
1235 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
1236</tr>
1237<tr>
e3edceeb
LS
1238 <td colspan='2' class='base'>$Lang::tr{'advproxy unrestricted ip clients'}:</td>
1239 <td colspan='2' class='base'>$Lang::tr{'advproxy unrestricted mac clients'}:</td>
ed38f89d
MT
1240</tr>
1241<tr>
9141bd34 1242 <td colspan='2'><textarea name='SRC_UNRESTRICTED_IP' cols='32' rows='3' wrap='off'>
ed38f89d
MT
1243END
1244;
1245
1246 print $proxysettings{'SRC_UNRESTRICTED_IP'};
1247
1248print <<END
1249</textarea></td>
9141bd34 1250 <td colspan='2'><textarea name='SRC_UNRESTRICTED_MAC' cols='32' rows='3' wrap='off'>
ed38f89d
MT
1251END
1252;
1253
1254print $proxysettings{'SRC_UNRESTRICTED_MAC'};
1255
1256print <<END
1257</textarea></td>
1258</tr>
1259</table>
1260<table width='100%'>
1261<tr>
1262 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
1263</tr>
1264<tr>
e3edceeb
LS
1265 <td colspan='2' class='base'>$Lang::tr{'advproxy banned ip clients'}:</td>
1266 <td colspan='2' class='base'>$Lang::tr{'advproxy banned mac clients'}:</td>
ed38f89d
MT
1267</tr>
1268<tr>
9141bd34 1269 <td colspan='2'><textarea name='SRC_BANNED_IP' cols='32' rows='3' wrap='off'>
ed38f89d
MT
1270END
1271;
1272
1273 print $proxysettings{'SRC_BANNED_IP'};
1274
1275print <<END
1276</textarea></td>
9141bd34 1277 <td colspan='2'><textarea name='SRC_BANNED_MAC' cols='32' rows='3' wrap='off'>
ed38f89d
MT
1278END
1279;
1280
1281print $proxysettings{'SRC_BANNED_MAC'};
1282
1283print <<END
1284</textarea></td>
1285</tr>
1286</table>
1287
1288<hr size='1'>
1289
1290END
1291;
1292# -------------------------------------------------------------------
1293# CRE GUI - optional
1294# -------------------------------------------------------------------
1295
1296if (-e $cre_enabled) { print <<END
1297<table width='100%'>
1298
1299<tr>
9141bd34 1300 <td colspan='4'><b>$Lang::tr{'advproxy classroom extensions'}</b> $Lang::tr{'advproxy enabled'}:<input type='checkbox' name='CLASSROOM_EXT' $checked{'CLASSROOM_EXT'}{'on'} /></td>
ed38f89d
MT
1301</tr>
1302<tr>
1303 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
1304</tr>
1305<tr>
9141bd34
CS
1306
1307END
1308;
1309if ($proxysettings{'CLASSROOM_EXT'} eq 'on'){
1310print <<END
e3edceeb 1311 <td class='base'>$Lang::tr{'advproxy supervisor password'}:</td>
ed38f89d
MT
1312 <td><input type='password' name='SUPERVISOR_PASSWORD' value='$proxysettings{'SUPERVISOR_PASSWORD'}' size='12' /></td>
1313</tr>
1314<tr>
1315 <td colspan='2' class='base'>$Lang::tr{'advproxy cre group definitions'}:</td>
e3edceeb 1316 <td colspan='2' class='base'>$Lang::tr{'advproxy cre supervisors'}:</td>
9141bd34
CS
1317END
1318;
1319}
1320print "</tr>";
1321if ($proxysettings{'CLASSROOM_EXT'} eq 'on'){
1322print <<END
ed38f89d
MT
1323<tr>
1324 <td colspan='2'><textarea name='CRE_GROUPS' cols='32' rows='6' wrap='off'>
1325END
1326;
1327
1328 print $proxysettings{'CRE_GROUPS'};
1329
1330print <<END
1331</textarea></td>
1332 <td colspan='2'><textarea name='CRE_SVHOSTS' cols='32' rows='6' wrap='off'>
1333END
1334;
1335 print $proxysettings{'CRE_SVHOSTS'};
1336
1337print <<END
1338</textarea></td>
1339</tr>
ed38f89d
MT
1340END
1341;
9141bd34
CS
1342}
1343print "</table><hr size='1'>";
1344
ed38f89d
MT
1345} else {
1346 print <<END
1347 <input type='hidden' name='SUPERVISOR_PASSWORD' value='$proxysettings{'SUPERVISOR_PASSWORD'}' />
1348 <input type='hidden' name='CRE_GROUPS' value='$proxysettings{'CRE_GROUPS'}' />
1349 <input type='hidden' name='CRE_SVHOSTS' value='$proxysettings{'CRE_SVHOSTS'}' />
1350END
1351;
1352}
363fb6af 1353
ce1c170b
AK
1354# ===================================================================
1355# WPAD settings
1356# ===================================================================
1357
1358print <<END
1359<table width='100%'>
1360<tr>
1361 <td colspan='4'><b>$Lang::tr{'advproxy wpad title'}</b></td>
1362</tr>
1363<tr>
1364 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
1365</tr>
1366<tr>
1367 <td colspan='2' class='base'>$Lang::tr{'advproxy wpad label dst_noproxy_ip'}:</td>
1368 <td colspan='2' class='base'>$Lang::tr{'advproxy wpad label dst_noproxy_url'}:</td>
1369</tr>
1370<tr>
1371 <td colspan='2'><textarea name='DST_NOPROXY_IP' cols='32' rows='3' wrap='off'>
1372END
1373;
1374
1375 print $proxysettings{'DST_NOPROXY_IP'};
1376
1377print <<END
1378</textarea></td>
1379
1380 <td colspan='2'><textarea name='DST_NOPROXY_URL' cols='32' rows='3' wrap='off'>
1381END
1382;
1383
1384 print $proxysettings{'DST_NOPROXY_URL'};
1385
1386print <<END
1387</textarea></td>
1388</tr>
1389<tr>
1390 <td colspan='2' class='base'>$Lang::tr{'advproxy wpad example dst_noproxy_ip'}</td>
1391 <td colspan='2' class='base'>$Lang::tr{'advproxy wpad example dst_noproxy_url'}</td>
1392</tr>
1393<tr>
1394 <td colspan="4">&nbsp;</td>
1395</tr>
1396<tr>
1397 <td colspan="4">$Lang::tr{'advproxy wpad view pac'}: <a href="http://$ENV{SERVER_ADDR}:81/wpad.dat" target="_blank">http://$ENV{SERVER_ADDR}:81/wpad.dat</a></td>
1398</tr>
cdc82a99
AK
1399<tr>
1400 <td colspan="4">&nbsp;</td>
1401</tr>
1402<tr>
1403 <td colspan="4">$Lang::tr{'advproxy wpad notice'}</td>
1404</tr>
ce1c170b
AK
1405</table>
1406
1407<hr size='1'>
1408
1409END
1410;
1411
ed38f89d
MT
1412# -------------------------------------------------------------------
1413
28c9dec6 1414print <<END
ed38f89d
MT
1415
1416<table width='100%'>
1417<tr>
363fb6af 1418 <td colspan='4'><b>$Lang::tr{'advproxy time restrictions'}</b></td>
ed38f89d
MT
1419</tr>
1420<table width='100%'>
1421<tr>
1422 <td width='2%'>$Lang::tr{'advproxy access'}</td>
1423 <td width='1%'>&nbsp;</td>
1424 <td width='2%' align='center'>$Lang::tr{'advproxy monday'}</td>
1425 <td width='2%' align='center'>$Lang::tr{'advproxy tuesday'}</td>
1426 <td width='2%' align='center'>$Lang::tr{'advproxy wednesday'}</td>
1427 <td width='2%' align='center'>$Lang::tr{'advproxy thursday'}</td>
1428 <td width='2%' align='center'>$Lang::tr{'advproxy friday'}</td>
1429 <td width='2%' align='center'>$Lang::tr{'advproxy saturday'}</td>
1430 <td width='2%' align='center'>$Lang::tr{'advproxy sunday'}</td>
1431 <td width='1%'>&nbsp;&nbsp;</td>
1432 <td width='7%' colspan=3>$Lang::tr{'advproxy from'}</td>
1433 <td width='1%'>&nbsp;</td>
1434 <td width='7%' colspan=3>$Lang::tr{'advproxy to'}</td>
1435 <td>&nbsp;</td>
1436</tr>
1437<tr>
1438 <td class='base'>
1439 <select name='TIME_ACCESS_MODE'>
1440 <option value='allow' $selected{'TIME_ACCESS_MODE'}{'allow'}>$Lang::tr{'advproxy mode allow'}</option>
1441 <option value='deny' $selected{'TIME_ACCESS_MODE'}{'deny'}>$Lang::tr{'advproxy mode deny'}</option>
1442 </select>
1443 </td>
1444 <td>&nbsp;</td>
1445 <td class='base'><input type='checkbox' name='TIME_MON' $checked{'TIME_MON'}{'on'} /></td>
1446 <td class='base'><input type='checkbox' name='TIME_TUE' $checked{'TIME_TUE'}{'on'} /></td>
1447 <td class='base'><input type='checkbox' name='TIME_WED' $checked{'TIME_WED'}{'on'} /></td>
1448 <td class='base'><input type='checkbox' name='TIME_THU' $checked{'TIME_THU'}{'on'} /></td>
1449 <td class='base'><input type='checkbox' name='TIME_FRI' $checked{'TIME_FRI'}{'on'} /></td>
1450 <td class='base'><input type='checkbox' name='TIME_SAT' $checked{'TIME_SAT'}{'on'} /></td>
1451 <td class='base'><input type='checkbox' name='TIME_SUN' $checked{'TIME_SUN'}{'on'} /></td>
1452 <td>&nbsp;</td>
1453 <td class='base'>
1454 <select name='TIME_FROM_HOUR'>
1455END
1456;
1457for ($i=0;$i<=24;$i++) {
1458 $_ = sprintf("%02s",$i);
1459 print "<option $selected{'TIME_FROM_HOUR'}{$_}>$_</option>\n";
1460}
1461print <<END
1462 </select>
1463 </td>
1464 <td>:</td>
1465 <td class='base'>
1466 <select name='TIME_FROM_MINUTE'>
1467END
1468;
1469for ($i=0;$i<=45;$i+=15) {
1470 $_ = sprintf("%02s",$i);
1471 print "<option $selected{'TIME_FROM_MINUTE'}{$_}>$_</option>\n";
1472}
1473print <<END
1474 </select>
1475 <td> - </td>
1476 </td>
1477 <td class='base'>
1478 <select name='TIME_TO_HOUR'>
1479END
1480;
1481for ($i=0;$i<=24;$i++) {
1482 $_ = sprintf("%02s",$i);
1483 print "<option $selected{'TIME_TO_HOUR'}{$_}>$_</option>\n";
1484}
1485print <<END
1486 </select>
1487 </td>
1488 <td>:</td>
1489 <td class='base'>
1490 <select name='TIME_TO_MINUTE'>
1491END
1492;
1493for ($i=0;$i<=45;$i+=15) {
1494 $_ = sprintf("%02s",$i);
1495 print "<option $selected{'TIME_TO_MINUTE'}{$_}>$_</option>\n";
1496}
1497print <<END
1498 </select>
1499 </td>
1500</tr>
1501</table>
1502<hr size='1'>
1503<table width='100%'>
1504<tr>
1505 <td colspan='4'><b>$Lang::tr{'advproxy transfer limits'}</b></td>
ac1cfefa
MT
1506</tr>
1507<tr>
e3edceeb 1508 <td width='25%' class='base'>$Lang::tr{'advproxy max download size'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
ed38f89d 1509 <td width='20%'><input type='text' name='MAX_INCOMING_SIZE' value='$proxysettings{'MAX_INCOMING_SIZE'}' size='5' /></td>
e3edceeb 1510 <td width='25%' class='base'>$Lang::tr{'advproxy max upload size'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
ed38f89d 1511 <td width='30%'><input type='text' name='MAX_OUTGOING_SIZE' value='$proxysettings{'MAX_OUTGOING_SIZE'}' size='5' /></td>
ac1cfefa
MT
1512</tr>
1513</table>
ed38f89d 1514<hr size='1'>
ac1cfefa 1515<table width='100%'>
ac1cfefa 1516<tr>
ed38f89d
MT
1517 <td colspan='4'><b>$Lang::tr{'advproxy download throttling'}</b></td>
1518</tr>
1519<tr>
1520 <td width='25%' class='base'>$Lang::tr{'advproxy throttling total on'} <font color="$Header::colourgreen">Green</font>:</td>
1521 <td width='20%' class='base'>
1522 <select name='THROTTLING_GREEN_TOTAL'>
1523END
1524;
1525
1526foreach (@throttle_limits) {
ce1f04ee
MT
1527 my $val = $_;
1528 my $unit = "kbit/s";
1529
1530 if ($val >= 1024) {
1531 $unit = "Mbit/s";
1532 $val /= 1024;
1533 }
1534
1535 print "\t<option value='$_' $selected{'THROTTLING_GREEN_TOTAL'}{$_}>$val $unit</option>\n";
ed38f89d
MT
1536}
1537
1538print <<END
1539 <option value='0' $selected{'THROTTLING_GREEN_TOTAL'}{'unlimited'}>$Lang::tr{'advproxy throttling unlimited'}</option>\n";
1540 </select>
1541 </td>
1542 <td width='25%' class='base'>$Lang::tr{'advproxy throttling per host on'} <font color="$Header::colourgreen">Green</font>:</td>
1543 <td width='30%' class='base'>
1544 <select name='THROTTLING_GREEN_HOST'>
1545END
1546;
1547
1548foreach (@throttle_limits) {
f00699e8 1549 print "\t<option value='$_' $selected{'THROTTLING_GREEN_HOST'}{$_}>$_ kbit/s</option>\n";
ed38f89d
MT
1550}
1551
1552print <<END
1553 <option value='0' $selected{'THROTTLING_GREEN_HOST'}{'unlimited'}>$Lang::tr{'advproxy throttling unlimited'}</option>\n";
1554 </select>
1555 </td>
1556</tr>
1557END
1558;
1559
1560if ($netsettings{'BLUE_DEV'}) {
1561 print <<END
1562<tr>
1563 <td class='base'>$Lang::tr{'advproxy throttling total on'} <font color="$Header::colourblue">Blue</font>:</td>
1564 <td class='base'>
1565 <select name='THROTTLING_BLUE_TOTAL'>
1566END
1567;
1568
1569foreach (@throttle_limits) {
f00699e8 1570 print "\t<option value='$_' $selected{'THROTTLING_BLUE_TOTAL'}{$_}>$_ kbit/s</option>\n";
ed38f89d
MT
1571}
1572
1573print <<END
1574 <option value='0' $selected{'THROTTLING_BLUE_TOTAL'}{'unlimited'}>$Lang::tr{'advproxy throttling unlimited'}</option>\n";
1575 </select>
1576 </td>
1577 <td class='base'>$Lang::tr{'advproxy throttling per host on'} <font color="$Header::colourblue">Blue</font>:</td>
1578 <td class='base'>
1579 <select name='THROTTLING_BLUE_HOST'>
1580END
1581;
1582
1583foreach (@throttle_limits) {
f00699e8 1584 print "\t<option value='$_' $selected{'THROTTLING_BLUE_HOST'}{$_}>$_ kbit/s</option>\n";
ed38f89d
MT
1585}
1586
1587print <<END
1588 <option value='0' $selected{'THROTTLING_BLUE_HOST'}{'unlimited'}>$Lang::tr{'advproxy throttling unlimited'}</option>\n";
1589 </select>
ac1cfefa 1590 </td>
ac1cfefa 1591</tr>
ed38f89d
MT
1592END
1593;
1594}
ac1cfefa 1595
ed38f89d
MT
1596print <<END
1597</table>
ed38f89d
MT
1598<hr size='1'>
1599<table width='100%'>
1600<tr>
9141bd34 1601 <td colspan='4'><b>$Lang::tr{'advproxy MIME filter'}</b> $Lang::tr{'advproxy enabled'}:<input type='checkbox' name='ENABLE_MIME_FILTER' $checked{'ENABLE_MIME_FILTER'}{'on'} /></td>
ed38f89d 1602</tr>
9141bd34
CS
1603END
1604;
1605if ( $proxysettings{'ENABLE_MIME_FILTER'} eq 'on' ){
1606print <<END
ed38f89d 1607<tr>
e3edceeb 1608 <td colspan='2' class='base'>$Lang::tr{'advproxy MIME block types'}:</td>
363fb6af
MT
1609 <td>&nbsp;</td>
1610 <td>&nbsp;</td>
ed38f89d
MT
1611</tr>
1612<tr>
1613 <td colspan='2'><textarea name='MIME_TYPES' cols='32' rows='6' wrap='off'>
ac1cfefa
MT
1614END
1615;
ac1cfefa 1616
ed38f89d 1617print $proxysettings{'MIME_TYPES'};
ac1cfefa 1618
ed38f89d
MT
1619print <<END
1620</textarea></td>
363fb6af
MT
1621 <td>&nbsp;</td>
1622 <td>&nbsp;</td>
ed38f89d 1623</tr>
9141bd34
CS
1624END
1625;
1626}
1627print <<END
ed38f89d 1628</table>
9141bd34 1629
ed38f89d
MT
1630<hr size='1'>
1631END
1632;
1633
603248db
MT
1634my $auth_columns = 5;
1635if ($HAVE_NTLM_AUTH) {
1636 $auth_columns++;
1637}
1638my $auth_column_width = 100 / $auth_columns;
1639
1640print <<END;
ed38f89d
MT
1641<table width='100%'>
1642<tr>
603248db 1643 <td colspan='$auth_columns'><b>$Lang::tr{'advproxy AUTH method'}</b></td>
ed38f89d
MT
1644</tr>
1645<tr>
603248db
MT
1646 <td width='$auth_column_width%' class='base'><input type='radio' name='AUTH_METHOD' value='none' $checked{'AUTH_METHOD'}{'none'} />$Lang::tr{'advproxy AUTH method none'}</td>
1647 <td width='$auth_column_width%' class='base'><input type='radio' name='AUTH_METHOD' value='ncsa' $checked{'AUTH_METHOD'}{'ncsa'} />$Lang::tr{'advproxy AUTH method ncsa'}</td>
1648 <td width='$auth_column_width%' class='base'><input type='radio' name='AUTH_METHOD' value='ident' $checked{'AUTH_METHOD'}{'ident'} />$Lang::tr{'advproxy AUTH method ident'}</td>
1649 <td width='$auth_column_width%' class='base'><input type='radio' name='AUTH_METHOD' value='ldap' $checked{'AUTH_METHOD'}{'ldap'} />$Lang::tr{'advproxy AUTH method ldap'}</td>
603248db
MT
1650END
1651
1652if ($HAVE_NTLM_AUTH) {
1653 print <<END;
1654 <td width='$auth_column_width%' class='base'><input type='radio' name='AUTH_METHOD' value='ntlm-auth' $checked{'AUTH_METHOD'}{'ntlm-auth'} />$Lang::tr{'advproxy AUTH method ntlm auth'}</td>
1655END
1656}
1657
1658print <<END
1659 <td width='$auth_column_width%' class='base'><input type='radio' name='AUTH_METHOD' value='radius' $checked{'AUTH_METHOD'}{'radius'} />$Lang::tr{'advproxy AUTH method radius'}</td>
ed38f89d
MT
1660</tr>
1661</table>
1662END
1663;
1664
1665if (!($proxysettings{'AUTH_METHOD'} eq 'none')) { if (!($proxysettings{'AUTH_METHOD'} eq 'ident')) { print <<END
1666<hr size='1'>
1667<table width='100%'>
1668<tr>
363fb6af 1669 <td colspan='4'><b>$Lang::tr{'advproxy AUTH global settings'}</b></td>
ed38f89d
MT
1670</tr>
1671<tr>
1672 <td width='25%'></td> <td width='20%'> </td><td width='25%'> </td><td width='30%'></td>
1673</tr>
1674<tr>
1675 <td class='base'>$Lang::tr{'advproxy AUTH number of auth processes'}:</td>
1676 <td><input type='text' name='AUTH_CHILDREN' value='$proxysettings{'AUTH_CHILDREN'}' size='5' /></td>
1677 <td colspan='2' rowspan= '6' valign='top' class='base'>
1678 <table cellpadding='0' cellspacing='0'>
1679 <tr>
e3edceeb 1680 <td class='base'>$Lang::tr{'advproxy AUTH realm'}:</td>
ed38f89d
MT
1681 </tr>
1682 <tr>
1683 <!-- intentionally left empty -->
1684 </tr>
1685 <tr>
1686 <!-- intentionally left empty -->
1687 </tr>
1688 <tr>
1689 <td><input type='text' name='AUTH_REALM' value='$proxysettings{'AUTH_REALM'}' size='40' /></td>
1690 </tr>
1691 <tr>
1692 <!-- intentionally left empty -->
1693 </tr>
1694 <tr>
1695 <!-- intentionally left empty -->
1696 </tr>
1697 <tr>
e3edceeb 1698 <td>$Lang::tr{'advproxy AUTH no auth'}:</td>
ed38f89d
MT
1699 </tr>
1700 <tr>
1701 <!-- intentionally left empty -->
1702 </tr>
1703 <tr>
1704 <!-- intentionally left empty -->
1705 </tr>
1706 <tr>
1707 <td><textarea name='DST_NOAUTH' cols='32' rows='6' wrap='off'>
1708END
1709;
1710
1711print $proxysettings{'DST_NOAUTH'};
1712
1713print <<END
1714</textarea></td>
1715 </tr>
1716 </table>
1717 </td>
1718</tr>
1719<tr>
1720 <td class='base'>$Lang::tr{'advproxy AUTH auth cache TTL'}:</td>
1721 <td><input type='text' name='AUTH_CACHE_TTL' value='$proxysettings{'AUTH_CACHE_TTL'}' size='5' /></td>
1722</tr>
1723<tr>
e3edceeb 1724 <td class='base'>$Lang::tr{'advproxy AUTH limit of IP addresses'}:</td>
ed38f89d
MT
1725 <td><input type='text' name='AUTH_MAX_USERIP' value='$proxysettings{'AUTH_MAX_USERIP'}' size='5' /></td>
1726</tr>
0f8251fe
PM
1727<tr>
1728 <td class='base'>$Lang::tr{'advproxy AUTH user IP cache TTL'}:</td>
1729 <td><input type='text' name='AUTH_IPCACHE_TTL' value='$proxysettings{'AUTH_IPCACHE_TTL'}' size='5' /></td>
1730</tr>
ed38f89d 1731<tr>
363fb6af
MT
1732 <td class='base'>$Lang::tr{'advproxy AUTH always required'}:</td>
1733 <td><input type='checkbox' name='AUTH_ALWAYS_REQUIRED' $checked{'AUTH_ALWAYS_REQUIRED'}{'on'} /></td>
ed38f89d
MT
1734</tr>
1735<tr>
1736 <td colspan='2'>&nbsp;</td>
1737</tr>
1738</table>
1739END
1740;
1741}
1742
1743# ===================================================================
1744# NCSA auth settings
1745# ===================================================================
1746
1747if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') {
1748print <<END
1749<hr size='1'>
1750<table width='100%'>
1751<tr>
1752 <td colspan='4'><b>$Lang::tr{'advproxy NCSA auth'}</b></td>
1753</tr>
1754<tr>
1755 <td width='25%' class='base'>$Lang::tr{'advproxy NCSA min password length'}:</td>
1756 <td width='20%'><input type='text' name='NCSA_MIN_PASS_LEN' value='$proxysettings{'NCSA_MIN_PASS_LEN'}' size='5' /></td>
1757 <td width='25%' class='base'>$Lang::tr{'advproxy NCSA redirector bypass'} \'$Lang::tr{'advproxy NCSA grp extended'}\':</td>
363fb6af 1758 <td width='20%'><input type='checkbox' name='NCSA_BYPASS_REDIR' $checked{'NCSA_BYPASS_REDIR'}{'on'} /></td>
ed38f89d
MT
1759</tr>
1760<tr>
1761 <td colspan='2'><br>&nbsp;<input type='submit' name='ACTION' value='$Lang::tr{'advproxy NCSA user management'}'></td>
1762 <td>&nbsp;</td>
1763 <td>&nbsp;</td>
1764</tr>
1765</table>
1766END
1767; }
1768
1769# ===================================================================
1770# IDENTD auth settings
1771# ===================================================================
1772
1773if ($proxysettings{'AUTH_METHOD'} eq 'ident') {
1774print <<END
1775<hr size ='1'>
1776<table width='100%'>
1777<tr>
1778 <td colspan='4'><b>$Lang::tr{'advproxy IDENT identd settings'}</b></td>
1779</tr>
1780<tr>
1781 <td width='25%' class='base'>$Lang::tr{'advproxy IDENT required'}:</td>
363fb6af
MT
1782 <td width='20%'><input type='checkbox' name='IDENT_REQUIRED' $checked{'IDENT_REQUIRED'}{'on'} /></td>
1783 <td width='25%' class='base'>$Lang::tr{'advproxy AUTH always required'}:</td>
1784 <td width='30%'><input type='checkbox' name='AUTH_ALWAYS_REQUIRED' $checked{'AUTH_ALWAYS_REQUIRED'}{'on'} /></td>
ed38f89d
MT
1785</tr>
1786<tr>
1787 <td class='base'>$Lang::tr{'advproxy IDENT timeout'}:</td>
1788 <td><input type='text' name='IDENT_TIMEOUT' value='$proxysettings{'IDENT_TIMEOUT'}' size='5' /></td>
1789 <td>&nbsp;</td>
1790 <td>&nbsp;</td>
1791</tr>
1792<tr>
1793 <td colspan='2' class='base'>$Lang::tr{'advproxy IDENT aware hosts'}:</td>
e3edceeb 1794 <td colspan='2' class='base'>$Lang::tr{'advproxy AUTH no auth'}:</td>
ed38f89d
MT
1795</tr>
1796<tr>
1797 <td colspan='2'><textarea name='IDENT_HOSTS' cols='32' rows='6' wrap='off'>
1798END
1799;
1800if (!$proxysettings{'IDENT_HOSTS'}) {
f09a0af5 1801 print "$green_cidr\n";
ed38f89d 1802 if ($netsettings{'BLUE_DEV'}) {
f09a0af5 1803 print "$blue_cidr\n";
ed38f89d
MT
1804 }
1805} else {
1806 print $proxysettings{'IDENT_HOSTS'};
1807}
1808
1809print <<END
1810</textarea></td>
1811 <td colspan='2'><textarea name='DST_NOAUTH' cols='32' rows='6' wrap='off'>
1812END
1813;
1814
1815print $proxysettings{'DST_NOAUTH'};
1816
1817print <<END
1818</textarea></td>
1819</tr>
1820</table>
1821<hr size ='1'>
1822<table width='100%'>
1823<tr>
1824 <td colspan='4'><b>$Lang::tr{'advproxy IDENT user based access restrictions'}</b></td>
1825</tr>
1826<tr>
1827 <td width='25%' class='base'>$Lang::tr{'advproxy enabled'}:</td>
1828 <td width='20%'><input type='checkbox' name='IDENT_ENABLE_ACL' $checked{'IDENT_ENABLE_ACL'}{'on'} /></td>
1829 <td width='25%'>&nbsp;</td>
1830 <td width='30%'>&nbsp;</td>
1831</tr>
1832<tr>
1833 <td colspan='2'><input type='radio' name='IDENT_USER_ACL' value='positive' $checked{'IDENT_USER_ACL'}{'positive'} />
1834 $Lang::tr{'advproxy IDENT use positive access list'}:</td>
1835 <td colspan='2'><input type='radio' name='IDENT_USER_ACL' value='negative' $checked{'IDENT_USER_ACL'}{'negative'} />
1836 $Lang::tr{'advproxy IDENT use negative access list'}:</td>
1837</tr>
1838<tr>
1839 <td colspan='2'>$Lang::tr{'advproxy IDENT authorized users'}</td>
1840 <td colspan='2'>$Lang::tr{'advproxy IDENT unauthorized users'}</td>
1841</tr>
1842<tr>
363fb6af 1843 <td colspan='2'><textarea name='IDENT_ALLOW_USERS' cols='32' rows='6' wrap='off'>
ed38f89d
MT
1844END
1845; }
1846
1847if ($proxysettings{'AUTH_METHOD'} eq 'ident') { print $proxysettings{'IDENT_ALLOW_USERS'}; }
1848
1849if ($proxysettings{'AUTH_METHOD'} eq 'ident') { print <<END
1850</textarea></td>
363fb6af 1851 <td colspan='2'><textarea name='IDENT_DENY_USERS' cols='32' rows='6' wrap='off'>
ed38f89d
MT
1852END
1853; }
1854
1855if ($proxysettings{'AUTH_METHOD'} eq 'ident') { print $proxysettings{'IDENT_DENY_USERS'}; }
1856
1857if ($proxysettings{'AUTH_METHOD'} eq 'ident') { print <<END
1858</textarea></td>
1859</tr>
1860</table>
1861END
1862; }
1863
b5674643
MT
1864# ===================================================================
1865# NTLM-AUTH settings
1866# ===================================================================
1867
1868if ($proxysettings{'AUTH_METHOD'} eq 'ntlm-auth') {
1869 print <<END;
1870 <hr size ='1'>
2fc5124b
MT
1871 <table width='100%'>
1872 <td width='20%' class='base'>$Lang::tr{'advproxy basic authentication'}:</td>
1873 <td width='40%'><input type='checkbox' name='NTLM_AUTH_BASIC' $checked{'NTLM_AUTH_BASIC'}{'on'} /></td>
1874 <td colspan='2'>&nbsp;</td>
1875 </table>
1876
1877 <hr size='1' />
1878
b5674643
MT
1879 <table width='100%'>
1880 <tr>
1881 <td colspan='4'><b>$Lang::tr{'advproxy group access control'}</b></td>
1882 </tr>
1883 <tr>
e3edceeb 1884 <td width='20%' class='base'>$Lang::tr{'advproxy group required'}:</td>
b5674643
MT
1885 <td width='40%'><input type='text' name='NTLM_AUTH_GROUP' value='$proxysettings{'NTLM_AUTH_GROUP'}' size='37' /></td>
1886 <td>&nbsp;</td>
1887 <td>&nbsp;</td>
1888 </tr>
1889 </table>
1890END
1891}
1892
ed38f89d
MT
1893# ===================================================================
1894# LDAP auth settings
1895# ===================================================================
1896
1897if ($proxysettings{'AUTH_METHOD'} eq 'ldap') {
1898print <<END
1899<hr size='1'>
1900<table width='100%'>
1901<tr>
1902 <td colspan='4'><b>$Lang::tr{'advproxy LDAP common settings'}</b></td>
1903</tr>
1904<tr>
1905 <td class='base'>$Lang::tr{'advproxy LDAP basedn'}:</td>
1906 <td><input type='text' name='LDAP_BASEDN' value='$proxysettings{'LDAP_BASEDN'}' size='37' /></td>
1907 <td class='base'>$Lang::tr{'advproxy LDAP type'}:</td>
1908 <td class='base'><select name='LDAP_TYPE'>
1909 <option value='ADS' $selected{'LDAP_TYPE'}{'ADS'}>$Lang::tr{'advproxy LDAP ADS'}</option>
1910 <option value='NDS' $selected{'LDAP_TYPE'}{'NDS'}>$Lang::tr{'advproxy LDAP NDS'}</option>
1911 <option value='V2' $selected{'LDAP_TYPE'}{'V2'}>$Lang::tr{'advproxy LDAP V2'}</option>
1912 <option value='V3' $selected{'LDAP_TYPE'}{'V3'}>$Lang::tr{'advproxy LDAP V3'}</option>
1913 </select></td>
1914</tr>
1915<tr>
1916 <td width='20%' class='base'>$Lang::tr{'advproxy LDAP server'}:</td>
1917 <td width='40%'><input type='text' name='LDAP_SERVER' value='$proxysettings{'LDAP_SERVER'}' size='14' /></td>
1918 <td width='20%' class='base'>$Lang::tr{'advproxy LDAP port'}:</td>
1919 <td><input type='text' name='LDAP_PORT' value='$proxysettings{'LDAP_PORT'}' size='3' /></td>
1920</tr>
1921</table>
1922<hr size ='1'>
1923<table width='100%'>
1924<tr>
1925 <td colspan='4'><b>$Lang::tr{'advproxy LDAP binddn settings'}</b></td>
1926</tr>
1927<tr>
1928 <td width='20%' class='base'>$Lang::tr{'advproxy LDAP binddn username'}:</td>
1929 <td width='40%'><input type='text' name='LDAP_BINDDN_USER' value='$proxysettings{'LDAP_BINDDN_USER'}' size='37' /></td>
1930 <td width='20%' class='base'>$Lang::tr{'advproxy LDAP binddn password'}:</td>
1931 <td><input type='password' name='LDAP_BINDDN_PASS' value='$proxysettings{'LDAP_BINDDN_PASS'}' size='14' /></td>
1932</tr>
1933</table>
1934<hr size ='1'>
1935<table width='100%'>
1936<tr>
1937 <td colspan='4'><b>$Lang::tr{'advproxy LDAP group access control'}</b></td>
1938</tr>
1939<tr>
e3edceeb 1940 <td width='20%' class='base'>$Lang::tr{'advproxy LDAP group required'}:</td>
ed38f89d
MT
1941 <td width='40%'><input type='text' name='LDAP_GROUP' value='$proxysettings{'LDAP_GROUP'}' size='37' /></td>
1942 <td>&nbsp;</td>
1943 <td>&nbsp;</td>
1944</tr>
1945</table>
1946END
1947; }
1948
1949# ===================================================================
1950# RADIUS auth settings
1951# ===================================================================
1952
1953if ($proxysettings{'AUTH_METHOD'} eq 'radius') {
1954print <<END
1955<hr size='1'>
1956<table width='100%'>
1957<tr>
1958 <td colspan='4'><b>$Lang::tr{'advproxy RADIUS radius settings'}</b></td>
1959</tr>
1960<tr>
1961 <td width='25%' class='base'>$Lang::tr{'advproxy RADIUS server'}:</td>
1962 <td width='20%'><input type='text' name='RADIUS_SERVER' value='$proxysettings{'RADIUS_SERVER'}' size='14' /></td>
1963 <td width='25%' class='base'>$Lang::tr{'advproxy RADIUS port'}:</td>
1964 <td width='30%'><input type='text' name='RADIUS_PORT' value='$proxysettings{'RADIUS_PORT'}' size='3' /></td>
1965</tr>
1966<tr>
e3edceeb 1967 <td class='base'>$Lang::tr{'advproxy RADIUS identifier'}:</td>
ed38f89d
MT
1968 <td><input type='text' name='RADIUS_IDENTIFIER' value='$proxysettings{'RADIUS_IDENTIFIER'}' size='14' /></td>
1969 <td class='base'>$Lang::tr{'advproxy RADIUS secret'}:</td>
1970 <td><input type='password' name='RADIUS_SECRET' value='$proxysettings{'RADIUS_SECRET'}' size='14' /></td>
1971</tr>
1972</table>
1973<hr size ='1'>
1974<table width='100%'>
1975<tr>
1976 <td colspan='4'><b>$Lang::tr{'advproxy RADIUS user based access restrictions'}</b></td>
1977</tr>
1978<tr>
1979 <td width='25%' class='base'>$Lang::tr{'advproxy enabled'}:</td>
1980 <td width='20%'><input type='checkbox' name='RADIUS_ENABLE_ACL' $checked{'RADIUS_ENABLE_ACL'}{'on'} /></td>
1981 <td width='25%'>&nbsp;</td>
1982 <td width='30%'>&nbsp;</td>
1983</tr>
1984<tr>
1985 <td colspan='2'><input type='radio' name='RADIUS_USER_ACL' value='positive' $checked{'RADIUS_USER_ACL'}{'positive'} />
1986 $Lang::tr{'advproxy RADIUS use positive access list'}:</td>
1987 <td colspan='2'><input type='radio' name='RADIUS_USER_ACL' value='negative' $checked{'RADIUS_USER_ACL'}{'negative'} />
1988 $Lang::tr{'advproxy RADIUS use negative access list'}:</td>
1989</tr>
1990<tr>
1991 <td colspan='2'>$Lang::tr{'advproxy RADIUS authorized users'}</td>
1992 <td colspan='2'>$Lang::tr{'advproxy RADIUS unauthorized users'}</td>
1993</tr>
1994<tr>
363fb6af 1995 <td colspan='2'><textarea name='RADIUS_ALLOW_USERS' cols='32' rows='6' wrap='off'>
ed38f89d
MT
1996END
1997; }
1998
1999if ($proxysettings{'AUTH_METHOD'} eq 'radius') { print $proxysettings{'RADIUS_ALLOW_USERS'}; }
2000
2001if ($proxysettings{'AUTH_METHOD'} eq 'radius') { print <<END
2002</textarea></td>
363fb6af 2003 <td colspan='2'><textarea name='RADIUS_DENY_USERS' cols='32' rows='6' wrap='off'>
ed38f89d
MT
2004END
2005; }
2006
2007if ($proxysettings{'AUTH_METHOD'} eq 'radius') { print $proxysettings{'RADIUS_DENY_USERS'}; }
2008
2009if ($proxysettings{'AUTH_METHOD'} eq 'radius') { print <<END
2010</textarea></td>
2011</tr>
2012</table>
2013END
2014; }
2015
2016# ===================================================================
2017
2018}
2019
2020print "<table>\n";
2021
2022if ($proxysettings{'AUTH_METHOD'} eq 'none') {
2023print <<END
2024<td><input type='hidden' name='AUTH_CHILDREN' value='$proxysettings{'AUTH_CHILDREN'}'></td>
2025<td><input type='hidden' name='AUTH_CACHE_TTL' value='$proxysettings{'AUTH_CACHE_TTL'}' size='5' /></td>
2026<td><input type='hidden' name='AUTH_MAX_USERIP' value='$proxysettings{'AUTH_MAX_USERIP'}' size='5' /></td>
0f8251fe 2027<td><input type='hidden' name='AUTH_IPCACHE_TTL' value='$proxysettings{'AUTH_IPCACHE_TTL'}' size='5' /></td>
ed38f89d
MT
2028<td><input type='hidden' name='AUTH_ALWAYS_REQUIRED' value='$proxysettings{'AUTH_ALWAYS_REQUIRED'}'></td>
2029<td><input type='hidden' name='AUTH_REALM' value='$proxysettings{'AUTH_REALM'}'></td>
2030<td><input type='hidden' name='DST_NOAUTH' value='$proxysettings{'DST_NOAUTH'}'></td>
2031END
2032; }
2033
2034if ($proxysettings{'AUTH_METHOD'} eq 'ident') {
2035print <<END
2036<td><input type='hidden' name='AUTH_CHILDREN' value='$proxysettings{'AUTH_CHILDREN'}'></td>
2037<td><input type='hidden' name='AUTH_CACHE_TTL' value='$proxysettings{'AUTH_CACHE_TTL'}' size='5' /></td>
2038<td><input type='hidden' name='AUTH_MAX_USERIP' value='$proxysettings{'AUTH_MAX_USERIP'}' size='5' /></td>
0f8251fe 2039<td><input type='hidden' name='AUTH_IPCACHE_TTL' value='$proxysettings{'AUTH_IPCACHE_TTL'}' size='5' /></td>
ed38f89d
MT
2040<td><input type='hidden' name='AUTH_REALM' value='$proxysettings{'AUTH_REALM'}'></td>
2041END
2042; }
2043
2044if (!($proxysettings{'AUTH_METHOD'} eq 'ncsa')) {
2045print <<END
2046<td><input type='hidden' name='NCSA_MIN_PASS_LEN' value='$proxysettings{'NCSA_MIN_PASS_LEN'}'></td>
2047<td><input type='hidden' name='NCSA_BYPASS_REDIR' value='$proxysettings{'NCSA_BYPASS_REDIR'}'></td>
2048END
2049; }
2050
2051if (!($proxysettings{'AUTH_METHOD'} eq 'ident')) {
2052print <<END
2053<td><input type='hidden' name='IDENT_REQUIRED' value='$proxysettings{'IDENT_REQUIRED'}'></td>
2054<td><input type='hidden' name='IDENT_TIMEOUT' value='$proxysettings{'IDENT_TIMEOUT'}'></td>
2055<td><input type='hidden' name='IDENT_HOSTS' value='$proxysettings{'IDENT_HOSTS'}'></td>
2056<td><input type='hidden' name='IDENT_ENABLE_ACL' value='$proxysettings{'IDENT_ENABLE_ACL'}'></td>
2057<td><input type='hidden' name='IDENT_USER_ACL' value='$proxysettings{'IDENT_USER_ACL'}'></td>
2058<td><input type='hidden' name='IDENT_ALLOW_USERS' value='$proxysettings{'IDENT_ALLOW_USERS'}'></td>
2059<td><input type='hidden' name='IDENT_DENY_USERS' value='$proxysettings{'IDENT_DENY_USERS'}'></td>
2060END
2061; }
2062
2063if (!($proxysettings{'AUTH_METHOD'} eq 'ldap')) {
2064print <<END
2065<td><input type='hidden' name='LDAP_BASEDN' value='$proxysettings{'LDAP_BASEDN'}'></td>
2066<td><input type='hidden' name='LDAP_TYPE' value='$proxysettings{'LDAP_TYPE'}'></td>
2067<td><input type='hidden' name='LDAP_SERVER' value='$proxysettings{'LDAP_SERVER'}'></td>
2068<td><input type='hidden' name='LDAP_PORT' value='$proxysettings{'LDAP_PORT'}'></td>
2069<td><input type='hidden' name='LDAP_BINDDN_USER' value='$proxysettings{'LDAP_BINDDN_USER'}'></td>
2070<td><input type='hidden' name='LDAP_BINDDN_PASS' value='$proxysettings{'LDAP_BINDDN_PASS'}'></td>
2071<td><input type='hidden' name='LDAP_GROUP' value='$proxysettings{'LDAP_GROUP'}'></td>
2072END
2073; }
2074
ed38f89d
MT
2075if (!($proxysettings{'AUTH_METHOD'} eq 'radius')) {
2076print <<END
2077<td><input type='hidden' name='RADIUS_SERVER' value='$proxysettings{'RADIUS_SERVER'}'></td>
2078<td><input type='hidden' name='RADIUS_PORT' value='$proxysettings{'RADIUS_PORT'}'></td>
2079<td><input type='hidden' name='RADIUS_IDENTIFIER' value='$proxysettings{'RADIUS_IDENTIFIER'}'></td>
2080<td><input type='hidden' name='RADIUS_SECRET' value='$proxysettings{'RADIUS_SECRET'}'></td>
2081<td><input type='hidden' name='RADIUS_ENABLE_ACL' value='$proxysettings{'RADIUS_ENABLE_ACL'}'></td>
2082<td><input type='hidden' name='RADIUS_USER_ACL' value='$proxysettings{'RADIUS_USER_ACL'}'></td>
2083<td><input type='hidden' name='RADIUS_ALLOW_USERS' value='$proxysettings{'RADIUS_ALLOW_USERS'}'></td>
2084<td><input type='hidden' name='RADIUS_DENY_USERS' value='$proxysettings{'RADIUS_DENY_USERS'}'></td>
2085END
2086; }
2087
2088print "</table>\n";
2089
2090print <<END
2091<hr size='1'>
2092END
2093;
2094
2095print <<END
2096<table width='100%'>
2097<tr>
363fb6af 2098 <td>&nbsp;</td>
ed38f89d 2099 <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}' /></td>
fe1656d2 2100 <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'proxy reconfigure'}' /></td>
ed38f89d 2101 <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'advproxy save and restart'}' /></td>
363fb6af
MT
2102 <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'advproxy clear cache'}' /></td>
2103 <td>&nbsp;</td>
ed38f89d
MT
2104</tr>
2105
2106</table>
2107<br />
2108<table width='100%'>
2109<tr>
e3edceeb 2110 <td><img src='/blob.gif' align='top' alt='*' />&nbsp;<font class='base'>$Lang::tr{'required field'}</font></td>
363fb6af 2111 <td align='right'>&nbsp;</td>
ed38f89d
MT
2112</tr>
2113</table>
2114</form>
2115END
2116;
2117
2118&Header::closebox();
2119
2120} else {
2121
2122# ===================================================================
2123# NCSA user management
2124# ===================================================================
2125
2126&Header::openbox('100%', 'left', "$Lang::tr{'advproxy NCSA auth'}");
2127print <<END
2128<form method='post' action='$ENV{'SCRIPT_NAME'}'>
2129<table width='100%'>
2130<tr>
363fb6af 2131 <td colspan='4'><b>$Lang::tr{'advproxy NCSA user management'}</b></td>
ed38f89d
MT
2132</tr>
2133<tr>
2134 <td width='25%' class='base'>$Lang::tr{'advproxy NCSA username'}:</td>
2135 <td width='25%'><input type='text' name='NCSA_USERNAME' value='$proxysettings{'NCSA_USERNAME'}' size='12'
2136END
2137;
153cf640 2138 if ($proxysettings{'ACTION'} eq $Lang::tr{'edit'}) { print " readonly='readonly' "; }
ed38f89d
MT
2139 print <<END
2140 /></td>
2141 <td width='25%' class='base'>$Lang::tr{'advproxy NCSA group'}:</td>
2142 <td class='base'>
2143 <select name='NCSA_GROUP'>
2144 <option value='standard' $selected{'NCSA_GROUP'}{'standard'}>$Lang::tr{'advproxy NCSA grp standard'}</option>
2145 <option value='extended' $selected{'NCSA_GROUP'}{'extended'}>$Lang::tr{'advproxy NCSA grp extended'}</option>
2146 <option value='disabled' $selected{'NCSA_GROUP'}{'disabled'}>$Lang::tr{'advproxy NCSA grp disabled'}</option>
2147 </select>
2148 </td>
2149
2150</tr>
2151<tr>
2152 <td class='base'>$Lang::tr{'advproxy NCSA password'}:</td>
2153 <td><input type='password' name='NCSA_PASS' value='$proxysettings{'NCSA_PASS'}' size='14' /></td>
2154 <td class='base'>$Lang::tr{'advproxy NCSA password confirm'}:</td>
2155 <td><input type='password' name='NCSA_PASS_CONFIRM' value='$proxysettings{'NCSA_PASS_CONFIRM'}' size='14' /></td>
2156</tr>
2157</table>
2158<br>
2159<table>
2160<tr>
2161 <td>&nbsp;</td>
2162 <td><input type='submit' name='SUBMIT' value='$ncsa_buttontext' /></td>
2163 <td><input type='hidden' name='ACTION' value='$Lang::tr{'add'}' /></td>
2164 <td><input type='hidden' name='NCSA_MIN_PASS_LEN' value='$proxysettings{'NCSA_MIN_PASS_LEN'}'></td>
2165END
2166;
2167 if ($proxysettings{'ACTION'} eq $Lang::tr{'edit'}) {
2168 print "<td><input type='reset' name='ACTION' value='$Lang::tr{'advproxy reset'}' /></td>\n";
2169 }
2170
2171print <<END
2172 <td>&nbsp;</td>
2173 <td>&nbsp;</td>
2174 <td><input type='button' name='return2main' value='$Lang::tr{'advproxy back to main page'}' onClick='self.location.href="$ENV{'SCRIPT_NAME'}"'></td>
2175</tr>
2176</table>
2177</form>
2178<hr size='1'>
2179<table width='100%'>
2180<tr>
363fb6af 2181 <td><b>$Lang::tr{'advproxy NCSA user accounts'}:</b></td>
ed38f89d
MT
2182</tr>
2183</table>
2184<table width='100%' align='center'>
2185END
2186;
2187
2188if (-e $extgrp)
2189{
2190 open(FILE, $extgrp); @grouplist = <FILE>; close(FILE);
2191 foreach $user (@grouplist) { chomp($user); push(@userlist,$user.":extended"); }
2192}
2193if (-e $stdgrp)
2194{
2195 open(FILE, $stdgrp); @grouplist = <FILE>; close(FILE);
2196 foreach $user (@grouplist) { chomp($user); push(@userlist,$user.":standard"); }
2197}
2198if (-e $disgrp)
2199{
2200 open(FILE, $disgrp); @grouplist = <FILE>; close(FILE);
2201 foreach $user (@grouplist) { chomp($user); push(@userlist,$user.":disabled"); }
2202}
2203
2204@userlist = sort(@userlist);
2205
2206# If the password file contains entries, print entries and action icons
2207
488d1b7c 2208if ( ! -z "$userdb" ) {
ed38f89d
MT
2209 print <<END
2210 <tr>
2211 <td width='30%' class='boldbase' align='center'><b><i>$Lang::tr{'advproxy NCSA username'}</i></b></td>
2212 <td width='30%' class='boldbase' align='center'><b><i>$Lang::tr{'advproxy NCSA group membership'}</i></b></td>
2213 <td class='boldbase' colspan='2' align='center'>&nbsp;</td>
2214 </tr>
2215END
2216;
2217 $id = 0;
2218 foreach $line (@userlist)
2219 {
2220 $id++;
2221 chomp($line);
2222 @temp = split(/:/,$line);
2223 if($proxysettings{'ACTION'} eq $Lang::tr{'edit'} && $proxysettings{'ID'} eq $line) {
2224 print "<tr bgcolor='$Header::colouryellow'>\n"; }
2225 elsif ($id % 2) {
4e17adad 2226 print "<tr bgcolor='$color{'color20'}'>\n"; }
ed38f89d 2227 else {
4e17adad 2228 print "<tr bgcolor='$color{'color22'}'>\n"; }
ed38f89d
MT
2229
2230 print <<END
2231 <td align='center'>$temp[0]</td>
2232 <td align='center'>
2233END
2234;
2235 if ($temp[1] eq 'standard') {
2236 print $Lang::tr{'advproxy NCSA grp standard'};
2237 } elsif ($temp[1] eq 'extended') {
2238 print $Lang::tr{'advproxy NCSA grp extended'};
2239 } elsif ($temp[1] eq 'disabled') {
2240 print $Lang::tr{'advproxy NCSA grp disabled'}; }
2241 print <<END
2242 </td>
2243 <td width='8%' align='center'>
2244 <form method='post' name='frma$id' action='$ENV{'SCRIPT_NAME'}'>
2245 <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' title='$Lang::tr{'edit'}' alt='$Lang::tr{'edit'}' />
2246 <input type='hidden' name='ID' value='$line' />
2247 <input type='hidden' name='ACTION' value='$Lang::tr{'edit'}' />
2248 </form>
2249 </td>
2250
2251 <td width='8%' align='center'>
2252 <form method='post' name='frmb$id' action='$ENV{'SCRIPT_NAME'}'>
2253 <input type='image' name='$Lang::tr{'remove'}' src='/images/delete.gif' title='$Lang::tr{'remove'}' alt='$Lang::tr{'remove'}' />
2254 <input type='hidden' name='ID' value='$temp[0]' />
2255 <input type='hidden' name='ACTION' value='$Lang::tr{'remove'}' />
2256 </form>
2257 </td>
2258 </tr>
2259END
2260;
2261 }
2262
2263print <<END
2264</table>
2265<br>
9fb25b1c 2266<table>
ed38f89d
MT
2267<tr>
2268 <td class='boldbase'>&nbsp; <b>$Lang::tr{'legend'}:</b></td>
2269 <td>&nbsp; &nbsp; <img src='/images/edit.gif' alt='$Lang::tr{'edit'}' /></td>
2270 <td class='base'>$Lang::tr{'edit'}</td>
2271 <td>&nbsp; &nbsp; <img src='/images/delete.gif' alt='$Lang::tr{'remove'}' /></td>
2272 <td class='base'>$Lang::tr{'remove'}</td>
2273</tr>
2274END
2275;
2276} else {
2277 print <<END
2278 <tr>
363fb6af 2279 <td><i>$Lang::tr{'advproxy NCSA no accounts'}</i></td>
ed38f89d
MT
2280 </tr>
2281END
2282;
2283}
2284
2285print <<END
2286</table>
2287END
2288;
2289
2290&Header::closebox();
2291
2292}
2293
2294# ===================================================================
2295
2296&Header::closebigbox();
2297
2298&Header::closepage();
2299
2300# -------------------------------------------------------------------
2301
2302sub read_acls
2303{
2304 if (-e "$acl_src_subnets") {
2305 open(FILE,"$acl_src_subnets");
2306 delete $proxysettings{'SRC_SUBNETS'};
2307 while (<FILE>) { $proxysettings{'SRC_SUBNETS'} .= $_ };
2308 close(FILE);
2309 }
2310 if (-e "$acl_src_banned_ip") {
2311 open(FILE,"$acl_src_banned_ip");
2312 delete $proxysettings{'SRC_BANNED_IP'};
2313 while (<FILE>) { $proxysettings{'SRC_BANNED_IP'} .= $_ };
2314 close(FILE);
2315 }
2316 if (-e "$acl_src_banned_mac") {
2317 open(FILE,"$acl_src_banned_mac");
2318 delete $proxysettings{'SRC_BANNED_MAC'};
2319 while (<FILE>) { $proxysettings{'SRC_BANNED_MAC'} .= $_ };
2320 close(FILE);
2321 }
2322 if (-e "$acl_src_unrestricted_ip") {
2323 open(FILE,"$acl_src_unrestricted_ip");
2324 delete $proxysettings{'SRC_UNRESTRICTED_IP'};
2325 while (<FILE>) { $proxysettings{'SRC_UNRESTRICTED_IP'} .= $_ };
2326 close(FILE);
2327 }
2328 if (-e "$acl_src_unrestricted_mac") {
2329 open(FILE,"$acl_src_unrestricted_mac");
2330 delete $proxysettings{'SRC_UNRESTRICTED_MAC'};
2331 while (<FILE>) { $proxysettings{'SRC_UNRESTRICTED_MAC'} .= $_ };
2332 close(FILE);
2333 }
2334 if (-e "$acl_dst_nocache") {
2335 open(FILE,"$acl_dst_nocache");
2336 delete $proxysettings{'DST_NOCACHE'};
2337 while (<FILE>) { $proxysettings{'DST_NOCACHE'} .= $_ };
2338 close(FILE);
2339 }
2340 if (-e "$acl_dst_noauth") {
2341 open(FILE,"$acl_dst_noauth");
2342 delete $proxysettings{'DST_NOAUTH'};
2343 while (<FILE>) { $proxysettings{'DST_NOAUTH'} .= $_ };
2344 close(FILE);
2345 }
ce1c170b
AK
2346 if (-e "$acl_dst_noproxy_ip") {
2347 open(FILE,"$acl_dst_noproxy_ip");
2348 delete $proxysettings{'DST_NOPROXY_IP'};
2349 while (<FILE>) { $proxysettings{'DST_NOPROXY_IP'} .= $_ };
2350 close(FILE);
2351 }
2352 if (-e "$acl_dst_noproxy_url") {
2353 open(FILE,"$acl_dst_noproxy_url");
2354 delete $proxysettings{'DST_NOPROXY_URL'};
2355 while (<FILE>) { $proxysettings{'DST_NOPROXY_URL'} .= $_ };
2356 close(FILE);
2357 }
363fb6af
MT
2358 if (-e "$acl_ports_safe") {
2359 open(FILE,"$acl_ports_safe");
2360 delete $proxysettings{'PORTS_SAFE'};
2361 while (<FILE>) { $proxysettings{'PORTS_SAFE'} .= $_ };
2362 close(FILE);
2363 }
2364 if (-e "$acl_ports_ssl") {
2365 open(FILE,"$acl_ports_ssl");
2366 delete $proxysettings{'PORTS_SSL'};
2367 while (<FILE>) { $proxysettings{'PORTS_SSL'} .= $_ };
2368 close(FILE);
2369 }
ed38f89d
MT
2370 if (-e "$mimetypes") {
2371 open(FILE,"$mimetypes");
2372 delete $proxysettings{'MIME_TYPES'};
2373 while (<FILE>) { $proxysettings{'MIME_TYPES'} .= $_ };
2374 close(FILE);
2375 }
ed38f89d
MT
2376 if (-e "$raddir/radauth.allowusers") {
2377 open(FILE,"$raddir/radauth.allowusers");
2378 delete $proxysettings{'RADIUS_ALLOW_USERS'};
2379 while (<FILE>) { $proxysettings{'RADIUS_ALLOW_USERS'} .= $_ };
2380 close(FILE);
2381 }
2382 if (-e "$raddir/radauth.denyusers") {
2383 open(FILE,"$raddir/radauth.denyusers");
2384 delete $proxysettings{'RADIUS_DENY_USERS'};
2385 while (<FILE>) { $proxysettings{'RADIUS_DENY_USERS'} .= $_ };
2386 close(FILE);
2387 }
2388 if (-e "$identdir/identauth.allowusers") {
2389 open(FILE,"$identdir/identauth.allowusers");
2390 delete $proxysettings{'IDENT_ALLOW_USERS'};
2391 while (<FILE>) { $proxysettings{'IDENT_ALLOW_USERS'} .= $_ };
2392 close(FILE);
2393 }
2394 if (-e "$identdir/identauth.denyusers") {
2395 open(FILE,"$identdir/identauth.denyusers");
2396 delete $proxysettings{'IDENT_DENY_USERS'};
2397 while (<FILE>) { $proxysettings{'IDENT_DENY_USERS'} .= $_ };
2398 close(FILE);
2399 }
2400 if (-e "$identhosts") {
2401 open(FILE,"$identhosts");
2402 delete $proxysettings{'IDENT_HOSTS'};
2403 while (<FILE>) { $proxysettings{'IDENT_HOSTS'} .= $_ };
2404 close(FILE);
2405 }
2406 if (-e "$cre_groups") {
2407 open(FILE,"$cre_groups");
2408 delete $proxysettings{'CRE_GROUPS'};
2409 while (<FILE>) { $proxysettings{'CRE_GROUPS'} .= $_ };
2410 close(FILE);
2411 }
2412 if (-e "$cre_svhosts") {
2413 open(FILE,"$cre_svhosts");
2414 delete $proxysettings{'CRE_SVHOSTS'};
2415 while (<FILE>) { $proxysettings{'CRE_SVHOSTS'} .= $_ };
2416 close(FILE);
2417 }
2418}
2419
2420# -------------------------------------------------------------------
2421
2422sub check_acls
2423{
363fb6af
MT
2424 @temp = split(/\n/,$proxysettings{'PORTS_SAFE'});
2425 undef $proxysettings{'PORTS_SAFE'};
2426 foreach (@temp)
2427 {
2428 s/^\s+//g; s/\s+$//g;
2429 if ($_)
2430 {
2431 $line = $_;
2432 if (/^[^#]+\s+#\sSquids\sport/) { s/(^[^#]+)(\s+#\sSquids\sport)/$proxysettings{'PROXY_PORT'}\2/; $line=$_; }
2433 s/#.*//g; s/\s+//g;
2434 if (/.*-.*-.*/) { $errormessage = $Lang::tr{'advproxy errmsg invalid destination port'}; }
2435 @templist = split(/-/);
2436 foreach (@templist) { unless (&General::validport($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid destination port'}; } }
2437 $proxysettings{'PORTS_SAFE'} .= $line."\n";
2438 }
2439 }
2440
2441 @temp = split(/\n/,$proxysettings{'PORTS_SSL'});
2442 undef $proxysettings{'PORTS_SSL'};
2443 foreach (@temp)
2444 {
2445 s/^\s+//g; s/\s+$//g;
2446 if ($_)
2447 {
2448 $line = $_;
2449 s/#.*//g; s/\s+//g;
2450 if (/.*-.*-.*/) { $errormessage = $Lang::tr{'advproxy errmsg invalid destination port'}; }
2451 @templist = split(/-/);
2452 foreach (@templist) { unless (&General::validport($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid destination port'}; } }
2453 $proxysettings{'PORTS_SSL'} .= $line."\n";
2454 }
2455 }
2456
2457 @temp = split(/\n/,$proxysettings{'DST_NOCACHE'});
2458 undef $proxysettings{'DST_NOCACHE'};
2459 foreach (@temp)
2460 {
488d1b7c
CS
2461 s/^\s+//g;
2462 unless (/^#/) { s/\s+//g; }
363fb6af
MT
2463 if ($_)
2464 {
488d1b7c 2465 if (/^\./) { $_ = '*'.$_; }
363fb6af
MT
2466 $proxysettings{'DST_NOCACHE'} .= $_."\n";
2467 }
2468 }
2469
ed38f89d
MT
2470 @temp = split(/\n/,$proxysettings{'SRC_SUBNETS'});
2471 undef $proxysettings{'SRC_SUBNETS'};
2472 foreach (@temp)
2473 {
2474 s/^\s+//g; s/\s+$//g;
2475 if ($_)
2476 {
2477 unless (&General::validipandmask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; }
2478 $proxysettings{'SRC_SUBNETS'} .= $_."\n";
2479 }
2480 }
2481
2482 @temp = split(/\n/,$proxysettings{'SRC_BANNED_IP'});
2483 undef $proxysettings{'SRC_BANNED_IP'};
2484 foreach (@temp)
2485 {
2486 s/^\s+//g; s/\s+$//g;
2487 if ($_)
2488 {
2489 unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; }
2490 $proxysettings{'SRC_BANNED_IP'} .= $_."\n";
2491 }
2492 }
2493
2494 @temp = split(/\n/,$proxysettings{'SRC_BANNED_MAC'});
2495 undef $proxysettings{'SRC_BANNED_MAC'};
2496 foreach (@temp)
2497 {
2498 s/^\s+//g; s/\s+$//g; s/-/:/g;
2499 if ($_)
2500 {
2501 unless (&General::validmac($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid mac'}; }
2502 $proxysettings{'SRC_BANNED_MAC'} .= $_."\n";
2503 }
2504 }
2505
2506 @temp = split(/\n/,$proxysettings{'SRC_UNRESTRICTED_IP'});
2507 undef $proxysettings{'SRC_UNRESTRICTED_IP'};
2508 foreach (@temp)
2509 {
2510 s/^\s+//g; s/\s+$//g;
2511 if ($_)
2512 {
2513 unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; }
2514 $proxysettings{'SRC_UNRESTRICTED_IP'} .= $_."\n";
2515 }
2516 }
2517
2518 @temp = split(/\n/,$proxysettings{'SRC_UNRESTRICTED_MAC'});
2519 undef $proxysettings{'SRC_UNRESTRICTED_MAC'};
2520 foreach (@temp)
2521 {
2522 s/^\s+//g; s/\s+$//g; s/-/:/g;
2523 if ($_)
2524 {
2525 unless (&General::validmac($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid mac'}; }
2526 $proxysettings{'SRC_UNRESTRICTED_MAC'} .= $_."\n";
2527 }
2528 }
2529
363fb6af 2530 @temp = split(/\n/,$proxysettings{'DST_NOAUTH'});
37273bc6 2531 undef $proxysettings{'DST_NOAUTH'};
363fb6af
MT
2532 foreach (@temp)
2533 {
488d1b7c
CS
2534 s/^\s+//g;
2535 unless (/^#/) { s/\s+//g; }
363fb6af
MT
2536 if ($_)
2537 {
488d1b7c 2538 if (/^\./) { $_ = '*'.$_; }
363fb6af
MT
2539 $proxysettings{'DST_NOAUTH'} .= $_."\n";
2540 }
2541 }
2542
ce1c170b
AK
2543 @temp = split(/\n/,$proxysettings{'DST_NOPROXY_IP'});
2544 undef $proxysettings{'DST_NOPROXY_IP'};
2545 foreach (@temp)
2546 {
2547 s/^\s+//g; s/\s+$//g;
2548 if ($_)
2549 {
2550 unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg wpad invalid ip or mask'}; }
2551 $proxysettings{'DST_NOPROXY_IP'} .= $_."\n";
2552 }
2553 }
2554
2555 @temp = split(/\n/,$proxysettings{'DST_NOPROXY_URL'});
2556 undef $proxysettings{'DST_NOPROXY_URL'};
2557 foreach (@temp)
2558 {
2559 s/^\s+//g;
2560 unless (/^#/) { s/\s+//g; }
2561 if ($_)
2562 {
2563 if (/^\./) { $_ = '*'.$_; }
2564 $proxysettings{'DST_NOPROXY_URL'} .= $_."\n";
2565 }
2566 }
2567
ed38f89d
MT
2568 if (($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') && ($proxysettings{'NTLM_USER_ACL'} eq 'positive'))
2569 {
2570 @temp = split(/\n/,$proxysettings{'NTLM_ALLOW_USERS'});
2571 undef $proxysettings{'NTLM_ALLOW_USERS'};
2572 foreach (@temp)
2573 {
2574 s/^\s+//g; s/\s+$//g;
2575 if ($_) { $proxysettings{'NTLM_ALLOW_USERS'} .= $_."\n"; }
2576 }
2577 if ($proxysettings{'NTLM_ALLOW_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; }
2578 }
2579
2580 if (($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') && ($proxysettings{'NTLM_USER_ACL'} eq 'negative'))
2581 {
2582 @temp = split(/\n/,$proxysettings{'NTLM_DENY_USERS'});
2583 undef $proxysettings{'NTLM_DENY_USERS'};
2584 foreach (@temp)
2585 {
2586 s/^\s+//g; s/\s+$//g;
2587 if ($_) { $proxysettings{'NTLM_DENY_USERS'} .= $_."\n"; }
2588 }
2589 if ($proxysettings{'NTLM_DENY_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; }
2590 }
2591
2592 if (($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') && ($proxysettings{'IDENT_USER_ACL'} eq 'positive'))
2593 {
2594 @temp = split(/\n/,$proxysettings{'IDENT_ALLOW_USERS'});
2595 undef $proxysettings{'IDENT_ALLOW_USERS'};
2596 foreach (@temp)
2597 {
2598 s/^\s+//g; s/\s+$//g;
2599 if ($_) { $proxysettings{'IDENT_ALLOW_USERS'} .= $_."\n"; }
2600 }
2601 if ($proxysettings{'IDENT_ALLOW_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; }
2602 }
2603
2604 if (($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') && ($proxysettings{'IDENT_USER_ACL'} eq 'negative'))
2605 {
2606 @temp = split(/\n/,$proxysettings{'IDENT_DENY_USERS'});
2607 undef $proxysettings{'IDENT_DENY_USERS'};
2608 foreach (@temp)
2609 {
2610 s/^\s+//g; s/\s+$//g;
2611 if ($_) { $proxysettings{'IDENT_DENY_USERS'} .= $_."\n"; }
2612 }
2613 if ($proxysettings{'IDENT_DENY_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; }
2614 }
2615
2616 if (($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') && ($proxysettings{'RADIUS_USER_ACL'} eq 'positive'))
2617 {
2618 @temp = split(/\n/,$proxysettings{'RADIUS_ALLOW_USERS'});
2619 undef $proxysettings{'RADIUS_ALLOW_USERS'};
2620 foreach (@temp)
2621 {
2622 s/^\s+//g; s/\s+$//g;
2623 if ($_) { $proxysettings{'RADIUS_ALLOW_USERS'} .= $_."\n"; }
2624 }
2625 if ($proxysettings{'RADIUS_ALLOW_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; }
2626 }
2627
2628 if (($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') && ($proxysettings{'RADIUS_USER_ACL'} eq 'negative'))
2629 {
2630 @temp = split(/\n/,$proxysettings{'RADIUS_DENY_USERS'});
2631 undef $proxysettings{'RADIUS_DENY_USERS'};
2632 foreach (@temp)
2633 {
2634 s/^\s+//g; s/\s+$//g;
2635 if ($_) { $proxysettings{'RADIUS_DENY_USERS'} .= $_."\n"; }
2636 }
2637 if ($proxysettings{'RADIUS_DENY_USERS'} eq '') { $errormessage = $Lang::tr{'advproxy errmsg acl cannot be empty'}; }
2638 }
2639
2640 @temp = split(/\n/,$proxysettings{'IDENT_HOSTS'});
2641 undef $proxysettings{'IDENT_HOSTS'};
2642 foreach (@temp)
2643 {
2644 s/^\s+//g; s/\s+$//g;
2645 if ($_)
2646 {
2647 unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; }
2648 $proxysettings{'IDENT_HOSTS'} .= $_."\n";
2649 }
2650 }
2651
2652 @temp = split(/\n/,$proxysettings{'CRE_SVHOSTS'});
2653 undef $proxysettings{'CRE_SVHOSTS'};
2654 foreach (@temp)
2655 {
2656 s/^\s+//g; s/\s+$//g;
2657 if ($_)
2658 {
2659 unless (&General::validipormask($_)) { $errormessage = $Lang::tr{'advproxy errmsg invalid ip or mask'}; }
2660 $proxysettings{'CRE_SVHOSTS'} .= $_."\n";
2661 }
2662 }
2663}
2664
ed38f89d
MT
2665# -------------------------------------------------------------------
2666
2667sub write_acls
2668{
2669 open(FILE, ">$acl_src_subnets");
2670 flock(FILE, 2);
363fb6af
MT
2671 if (!$proxysettings{'SRC_SUBNETS'})
2672 {
f09a0af5 2673 print FILE "$green_cidr\n";
363fb6af
MT
2674 if ($netsettings{'BLUE_DEV'})
2675 {
f09a0af5 2676 print FILE "$blue_cidr\n";
363fb6af
MT
2677 }
2678 } else { print FILE $proxysettings{'SRC_SUBNETS'}; }
ed38f89d
MT
2679 close(FILE);
2680
2681 open(FILE, ">$acl_src_banned_ip");
2682 flock(FILE, 2);
2683 print FILE $proxysettings{'SRC_BANNED_IP'};
2684 close(FILE);
2685
2686 open(FILE, ">$acl_src_banned_mac");
2687 flock(FILE, 2);
2688 print FILE $proxysettings{'SRC_BANNED_MAC'};
2689 close(FILE);
2690
2691 open(FILE, ">$acl_src_unrestricted_ip");
2692 flock(FILE, 2);
2693 print FILE $proxysettings{'SRC_UNRESTRICTED_IP'};
2694 close(FILE);
2695
2696 open(FILE, ">$acl_src_unrestricted_mac");
2697 flock(FILE, 2);
2698 print FILE $proxysettings{'SRC_UNRESTRICTED_MAC'};
2699 close(FILE);
2700
488d1b7c
CS
2701 open(FILE, ">$acl_dst_noauth");
2702 flock(FILE, 2);
2703 print FILE $proxysettings{'DST_NOAUTH'};
2704 close(FILE);
2705
ce1c170b
AK
2706 open(FILE, ">$acl_dst_noproxy_ip");
2707 flock(FILE, 2);
2708 print FILE $proxysettings{'DST_NOPROXY_IP'};
2709 close(FILE);
2710
2711 open(FILE, ">$acl_dst_noproxy_url");
2712 flock(FILE, 2);
2713 print FILE $proxysettings{'DST_NOPROXY_URL'};
2714 close(FILE);
2715
488d1b7c
CS
2716 open(FILE, ">$acl_dst_noauth_net");
2717 close(FILE);
2718 open(FILE, ">$acl_dst_noauth_dom");
2719 close(FILE);
2720 open(FILE, ">$acl_dst_noauth_url");
2721 close(FILE);
2722
2723 @temp = split(/\n/,$proxysettings{'DST_NOAUTH'});
2724 foreach(@temp)
2725 {
2726 unless (/^#/)
2727 {
2728 if (/^\*\.\w/)
2729 {
2730 s/^\*//;
2731 open(FILE, ">>$acl_dst_noauth_dom");
2732 flock(FILE, 2);
2733 print FILE "$_\n";
2734 close(FILE);
2735 }
2736 elsif (&General::validipormask($_))
2737 {
2738 open(FILE, ">>$acl_dst_noauth_net");
2739 flock(FILE, 2);
2740 print FILE "$_\n";
2741 close(FILE);
2742 }
2743 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?/)
2744 {
2745 open(FILE, ">>$acl_dst_noauth_net");
2746 flock(FILE, 2);
2747 print FILE "$_\n";
2748 close(FILE);
2749 }
2750 else
2751 {
2752 open(FILE, ">>$acl_dst_noauth_url");
2753 flock(FILE, 2);
2754 if (/^[fh]tt?ps?:\/\//) { print FILE "$_\n"; } else { print FILE "^[fh]tt?ps?://$_\n"; }
2755 close(FILE);
2756 }
2757 }
2758 }
2759
ed38f89d
MT
2760 open(FILE, ">$acl_dst_nocache");
2761 flock(FILE, 2);
2762 print FILE $proxysettings{'DST_NOCACHE'};
2763 close(FILE);
2764
488d1b7c
CS
2765 open(FILE, ">$acl_dst_nocache_net");
2766 close(FILE);
2767 open(FILE, ">$acl_dst_nocache_dom");
2768 close(FILE);
2769 open(FILE, ">$acl_dst_nocache_url");
ed38f89d
MT
2770 close(FILE);
2771
488d1b7c
CS
2772 @temp = split(/\n/,$proxysettings{'DST_NOCACHE'});
2773 foreach(@temp)
2774 {
2775 unless (/^#/)
2776 {
2777 if (/^\*\.\w/)
2778 {
2779 s/^\*//;
2780 open(FILE, ">>$acl_dst_nocache_dom");
2781 flock(FILE, 2);
2782 print FILE "$_\n";
2783 close(FILE);
2784 }
2785 elsif (&General::validipormask($_))
2786 {
2787 open(FILE, ">>$acl_dst_nocache_net");
2788 flock(FILE, 2);
2789 print FILE "$_\n";
2790 close(FILE);
2791 }
2792 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?/)
2793 {
2794 open(FILE, ">>$acl_dst_nocache_net");
2795 flock(FILE, 2);
2796 print FILE "$_\n";
2797 close(FILE);
2798 }
2799 else
2800 {
2801 open(FILE, ">>$acl_dst_nocache_url");
2802 flock(FILE, 2);
2803 if (/^[fh]tt?ps?:\/\//) { print FILE "$_\n"; } else { print FILE "^[fh]tt?ps?://$_\n"; }
2804 close(FILE);
2805 }
2806 }
2807 }
2808
363fb6af
MT
2809 open(FILE, ">$acl_ports_safe");
2810 flock(FILE, 2);
2811 if (!$proxysettings{'PORTS_SAFE'}) { print FILE $def_ports_safe; } else { print FILE $proxysettings{'PORTS_SAFE'}; }
2812 close(FILE);
2813
2814 open(FILE, ">$acl_ports_ssl");
2815 flock(FILE, 2);
2816 if (!$proxysettings{'PORTS_SSL'}) { print FILE $def_ports_ssl; } else { print FILE $proxysettings{'PORTS_SSL'}; }
2817 close(FILE);
2818
ed38f89d
MT
2819 if (-s $throttled_urls)
2820 {
2821 open(URLFILE, $throttled_urls);
2822 @temp = <URLFILE>;
2823 close(URLFILE);
363fb6af 2824 foreach (@temp) { print FILE; }
ed38f89d
MT
2825 }
2826 close(FILE);
2827
2828 open(FILE, ">$mimetypes");
2829 flock(FILE, 2);
2830 print FILE $proxysettings{'MIME_TYPES'};
2831 close(FILE);
2832
ed38f89d
MT
2833 open(FILE, ">$raddir/radauth.allowusers");
2834 flock(FILE, 2);
2835 print FILE $proxysettings{'RADIUS_ALLOW_USERS'};
2836 close(FILE);
2837
2838 open(FILE, ">$raddir/radauth.denyusers");
2839 flock(FILE, 2);
2840 print FILE $proxysettings{'RADIUS_DENY_USERS'};
2841 close(FILE);
2842
2843 open(FILE, ">$identdir/identauth.allowusers");
2844 flock(FILE, 2);
2845 print FILE $proxysettings{'IDENT_ALLOW_USERS'};
2846 close(FILE);
2847
2848 open(FILE, ">$identdir/identauth.denyusers");
2849 flock(FILE, 2);
2850 print FILE $proxysettings{'IDENT_DENY_USERS'};
2851 close(FILE);
2852
2853 open(FILE, ">$identhosts");
2854 flock(FILE, 2);
2855 print FILE $proxysettings{'IDENT_HOSTS'};
2856 close(FILE);
2857
2858 open(FILE, ">$cre_groups");
2859 flock(FILE, 2);
2860 print FILE $proxysettings{'CRE_GROUPS'};
2861 close(FILE);
2862
2863 open(FILE, ">$cre_svhosts");
2864 flock(FILE, 2);
2865 print FILE $proxysettings{'CRE_SVHOSTS'};
2866 close(FILE);
2867}
2868
2869# -------------------------------------------------------------------
2870
2871sub writepacfile
2872{
bf2a1c52
OF
2873 my %vpnconfig=();
2874 my %ovpnconfig=();
2875 &General::readhasharray("${General::swroot}/vpn/config", \%vpnconfig);
2876 &General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%ovpnconfig);
22527178 2877 open(FILE, ">/srv/web/ipfire/html/proxy.pac");
ed38f89d
MT
2878 flock(FILE, 2);
2879 print FILE "function FindProxyForURL(url, host)\n";
2880 print FILE "{\n";
2881 if (($proxysettings{'ENABLE'} eq 'on') || ($proxysettings{'ENABLE_BLUE'} eq 'on'))
2882 {
2883 print FILE <<END
2884if (
2885 (isPlainHostName(host)) ||
c03cf9ea 2886 (isInNet(host, "127.0.0.1", "255.0.0.0")) ||
7c1b7d3e
BB
2887END
2888;
2889
2890 if ($netsettings{'GREEN_DEV'}) {
2891 print FILE " (isInNet(host, \"$netsettings{'GREEN_NETADDRESS'}\", \"$netsettings{'GREEN_NETMASK'}\")) ||\n";
2892 }
2893
2894 if (&Header::blue_used() && $netsettings{'BLUE_DEV'}) {
2895 print FILE " (isInNet(host, \"$netsettings{'BLUE_NETADDRESS'}\", \"$netsettings{'BLUE_NETMASK'}\")) ||\n";
2896 }
2897
2898 if (&Header::orange_used() && $netsettings{'ORANGE_DEV'}) {
2899 print FILE " (isInNet(host, \"$netsettings{'ORANGE_NETADDRESS'}\", \"$netsettings{'ORANGE_NETMASK'}\")) ||\n";
2900 }
2901
ddc5602a
AK
2902 # Additional exceptions for URLs
2903 # The file has to be created by the user and should contain one entry per line
2904 # Line-Format: <URL incl. wildcards>
ce1c170b 2905 # e.g. *.ipfire.org*
ddc5602a
AK
2906 if (-s "$acl_dst_noproxy_url") {
2907 undef @templist;
2908
2909 open(NOPROXY,"$acl_dst_noproxy_url");
2910 @templist = <NOPROXY>;
2911 close(NOPROXY);
2912 chomp (@templist);
2913
2914 foreach (@templist)
2915 {
2916 print FILE " (shExpMatch(url, \"$_\")) ||\n";
2917 }
2918 }
2919
2920 # Additional exceptions for Subnets
2921 # The file has to be created by the user and should contain one entry per line
ce1c170b
AK
2922 # Line-Format: <IP>/<SUBNET MASK>
2923 # e.g. 192.168.0.0/255.255.255.0
ddc5602a
AK
2924 if (-s "$acl_dst_noproxy_ip") {
2925 undef @templist;
2926
2927 open(NOPROXY,"$acl_dst_noproxy_ip");
2928 @templist = <NOPROXY>;
2929 close(NOPROXY);
2930 chomp (@templist);
2931
2932 foreach (@templist)
2933 {
ce1c170b
AK
2934 @temp = split(/\//);
2935 print FILE " (isInNet(host, \"$temp[0]\", \"$temp[1]\")) ||\n";
ddc5602a
AK
2936 }
2937 }
2938
bf2a1c52
OF
2939 foreach my $key (sort { uc($vpnconfig{$a}[1]) cmp uc($vpnconfig{$b}[1]) } keys %vpnconfig) {
2940 if ($vpnconfig{$key}[0] eq 'on' && $vpnconfig{$key}[3] ne 'host') {
2941 my @networks = split(/\|/, $vpnconfig{$key}[11]);
2942 foreach my $network (@networks) {
2943 my ($vpnip, $vpnsub) = split("/", $network);
2944 $vpnsub = &Network::convert_prefix2netmask($vpnsub) || $vpnsub;
2945 print FILE " (isInNet(host, \"$vpnip\", \"$vpnsub\")) ||\n";
2946 }
2947 }
2948 }
2949
2950 foreach my $key (sort { uc($ovpnconfig{$a}[1]) cmp uc($ovpnconfig{$b}[1]) } keys %ovpnconfig) {
2951 if ($ovpnconfig{$key}[0] eq 'on' && $ovpnconfig{$key}[3] ne 'host') {
2952 my @networks = split(/\|/, $ovpnconfig{$key}[11]);
2953 foreach my $network (@networks) {
2954 my ($vpnip, $vpnsub) = split("/", $network);
2955 print FILE " (isInNet(host, \"$vpnip\", \"$vpnsub\")) ||\n";
2956 }
2957 }
2958 }
2959
7c1b7d3e 2960 print FILE <<END
488d1b7c 2961 (isInNet(host, "169.254.0.0", "255.255.0.0"))
ed38f89d
MT
2962 )
2963 return "DIRECT";
2964
2965 else
2966
2967END
2968;
2969 if ($proxysettings{'ENABLE'} eq 'on')
2970 {
268292e7
CS
2971 print FILE "if (\n";
2972 print FILE " (isInNet(myIpAddress(), \"$netsettings{'GREEN_NETADDRESS'}\", \"$netsettings{'GREEN_NETMASK'}\"))";
2973
2974 undef @templist;
2975 if (-e "$acl_src_subnets") {
2976 open(SUBNETS,"$acl_src_subnets");
2977 @templist = <SUBNETS>;
2978 close(SUBNETS);
2979 }
2980
2981 foreach (@templist)
2982 {
2983 @temp = split(/\//);
2984 if (
28c9dec6 2985 ($temp[0] ne $netsettings{'GREEN_NETADDRESS'}) && ($temp[1] ne $netsettings{'GREEN_NETMASK'}) &&
268292e7
CS
2986 ($temp[0] ne $netsettings{'BLUE_NETADDRESS'}) && ($temp[1] ne $netsettings{'BLUE_NETMASK'})
2987 )
2988 {
2989 chomp $temp[1];
badd010f
SK
2990 my $tempmask = &Network::convert_prefix2netmask($temp[1]);
2991 print FILE " ||\n (isInNet(myIpAddress(), \"$temp[0]\", \"$tempmask\"))";
268292e7
CS
2992 }
2993 }
2994
2995 print FILE "\n";
2996
ed38f89d 2997 print FILE <<END
ed38f89d
MT
2998 )
2999 return "PROXY $netsettings{'GREEN_ADDRESS'}:$proxysettings{'PROXY_PORT'}";
3000END
3001;
3002 }
3003 if (($proxysettings{'ENABLE'} eq 'on') && ($proxysettings{'ENABLE_BLUE'} eq 'on') && ($netsettings{'BLUE_DEV'}))
3004 {
3005 print FILE "\n else\n\n";
3006 }
3007 if (($netsettings{'BLUE_DEV'}) && ($proxysettings{'ENABLE_BLUE'} eq 'on'))
3008 {
3009 print FILE <<END
3010if (
3011 (isInNet(myIpAddress(), "$netsettings{'BLUE_NETADDRESS'}", "$netsettings{'BLUE_NETMASK'}"))
3012 )
3013 return "PROXY $netsettings{'BLUE_ADDRESS'}:$proxysettings{'PROXY_PORT'}";
3014END
3015;
3016 }
3017 }
3018 print FILE "}\n";
3019 close(FILE);
3020}
3021
3022# -------------------------------------------------------------------
3023
3024sub writeconfig
3025{
3026 my $authrealm;
3027 my $delaypools;
3028
363fb6af 3029 if ($proxysettings{'THROTTLING_GREEN_TOTAL'} +
ed38f89d
MT
3030 $proxysettings{'THROTTLING_GREEN_HOST'} +
3031 $proxysettings{'THROTTLING_BLUE_TOTAL'} +
3032 $proxysettings{'THROTTLING_BLUE_HOST'} gt 0)
3033 {
3034 $delaypools = 1; } else { $delaypools = 0;
3035 }
3036
3037 if ($proxysettings{'AUTH_REALM'} eq '')
3038 {
d12aede7 3039 $authrealm = "IPFire Advanced Proxy Server";
ed38f89d
MT
3040 } else {
3041 $authrealm = $proxysettings{'AUTH_REALM'};
3042 }
3043
3044 $_ = $proxysettings{'UPSTREAM_PROXY'};
69491545 3045 my ($remotehost, $remoteport) = split(/:/,$_);
ed38f89d
MT
3046
3047 if ($remoteport eq '') { $remoteport = 80; }
3048
3049 open(FILE, ">${General::swroot}/proxy/squid.conf");
3050 flock(FILE, 2);
3051 print FILE <<END
363fb6af
MT
3052# Do not modify '${General::swroot}/proxy/squid.conf' directly since any changes
3053# you make will be overwritten whenever you resave proxy settings using the
3054# web interface!
3055#
3056# Instead, modify the file '$acl_include' and
3057# then restart the proxy service using the web interface. Changes made to the
3058# 'include.acl' file will propagate to the 'squid.conf' file at that time.
3059
ed38f89d
MT
3060shutdown_lifetime 5 seconds
3061icp_port 0
3062
ed38f89d
MT
3063END
3064 ;
8b417dd1
MT
3065
3066 # Include file with user defined settings.
3067 if (-e "/etc/squid/squid.conf.pre.local") {
3068 print FILE "include /etc/squid/squid.conf.pre.local\n\n";
3069 }
3070
363fb6af 3071 print FILE "http_port $netsettings{'GREEN_ADDRESS'}:$proxysettings{'PROXY_PORT'}";
363fb6af
MT
3072 if ($proxysettings{'NO_CONNECTION_AUTH'} eq 'on') { print FILE " no-connection-auth" }
3073 print FILE "\n";
3074
0f6b6067
MT
3075 if ($proxysettings{'TRANSPARENT'} eq 'on') {
3076 print FILE "http_port $netsettings{'GREEN_ADDRESS'}:$proxysettings{'TRANSPARENT_PORT'} intercept";
3077 if ($proxysettings{'NO_CONNECTION_AUTH'} eq 'on') { print FILE " no-connection-auth" }
3078 print FILE "\n";
3079 }
3080
ed38f89d 3081 if ($netsettings{'BLUE_DEV'} && $proxysettings{'ENABLE_BLUE'} eq 'on') {
363fb6af 3082 print FILE "http_port $netsettings{'BLUE_ADDRESS'}:$proxysettings{'PROXY_PORT'}";
363fb6af
MT
3083 if ($proxysettings{'NO_CONNECTION_AUTH'} eq 'on') { print FILE " no-connection-auth" }
3084 print FILE "\n";
0f6b6067
MT
3085
3086 if ($proxysettings{'TRANSPARENT_BLUE'} eq 'on') {
3087 print FILE "http_port $netsettings{'BLUE_ADDRESS'}:$proxysettings{'TRANSPARENT_PORT'} intercept";
3088 if ($proxysettings{'NO_CONNECTION_AUTH'} eq 'on') { print FILE " no-connection-auth" }
3089 print FILE "\n";
3090 }
ed38f89d
MT
3091 }
3092
53d67554 3093 if (($proxysettings{'CACHE_SIZE'} > 0) || ($proxysettings{'CACHE_MEM'} > 0))
488d1b7c
CS
3094 {
3095 print FILE "\n";
ed38f89d 3096
488d1b7c
CS
3097 if (!-z $acl_dst_nocache_dom) {
3098 print FILE "acl no_cache_domains dstdomain \"$acl_dst_nocache_dom\"\n";
3099 print FILE "cache deny no_cache_domains\n";
3100 }
3101 if (!-z $acl_dst_nocache_net) {
37273bc6 3102 print FILE "acl no_cache_ipaddr dst \"$acl_dst_nocache_net\"\n";
488d1b7c
CS
3103 print FILE "cache deny no_cache_ipaddr\n";
3104 }
3105 if (!-z $acl_dst_nocache_url) {
3106 print FILE "acl no_cache_hosts url_regex -i \"$acl_dst_nocache_url\"\n";
3107 print FILE "cache deny no_cache_hosts\n";
3108 }
ed38f89d
MT
3109 }
3110
3111 print FILE <<END
3112
3113cache_effective_user squid
363fb6af 3114umask 022
ed38f89d
MT
3115
3116pid_filename /var/run/squid.pid
3117
3118cache_mem $proxysettings{'CACHE_MEM'} MB
ed38f89d
MT
3119END
3120 ;
ab4a5a35 3121 print FILE "error_directory $errordir/$proxysettings{'ERR_LANGUAGE'}\n\n";
363fb6af 3122
ed38f89d 3123 if ($proxysettings{'OFFLINE_MODE'} eq 'on') { print FILE "offline_mode on\n\n"; }
6bea848d 3124 if ($proxysettings{'CACHE_DIGESTS'} eq 'on') { print FILE "digest_generation on\n\n"; } else { print FILE "digest_generation off\n\n"; }
c4b12981 3125
ed38f89d
MT
3126 if ((!($proxysettings{'MEM_POLICY'} eq 'LRU')) || (!($proxysettings{'CACHE_POLICY'} eq 'LRU')))
3127 {
3128 if (!($proxysettings{'MEM_POLICY'} eq 'LRU'))
3129 {
3130 print FILE "memory_replacement_policy $proxysettings{'MEM_POLICY'}\n";
3131 }
3132 if (!($proxysettings{'CACHE_POLICY'} eq 'LRU'))
3133 {
3134 print FILE "cache_replacement_policy $proxysettings{'CACHE_POLICY'}\n";
3135 }
3136 print FILE "\n";
3137 }
3138
8fbcf730
MT
3139 open (PORTS,"$acl_ports_ssl");
3140 my @ssl_ports = <PORTS>;
3141 close PORTS;
3142
3143 if (@ssl_ports) {
3144 foreach (@ssl_ports) {
3145 print FILE "acl SSL_ports port $_";
3146 }
3147 }
3148
3149 open (PORTS,"$acl_ports_safe");
3150 my @safe_ports = <PORTS>;
3151 close PORTS;
3152
3153 if (@safe_ports) {
3154 foreach (@safe_ports) {
3155 print FILE "acl Safe_ports port $_";
3156 }
3157 }
3158
3159 print FILE <<END
3160
3161acl IPFire_http port $http_port
3162acl IPFire_https port $https_port
3163acl IPFire_ips dst $netsettings{'GREEN_ADDRESS'}
3164acl IPFire_networks src "$acl_src_subnets"
3165acl IPFire_servers dst "$acl_src_subnets"
3166acl IPFire_green_network src $green_cidr
3167acl IPFire_green_servers dst $green_cidr
3168END
3169 ;
3170 if ($netsettings{'BLUE_DEV'}) { print FILE "acl IPFire_blue_network src $blue_cidr\n"; }
3171 if ($netsettings{'BLUE_DEV'}) { print FILE "acl IPFire_blue_servers dst $blue_cidr\n"; }
3172 if (!-z $acl_src_banned_ip) { print FILE "acl IPFire_banned_ips src \"$acl_src_banned_ip\"\n"; }
3173 if (!-z $acl_src_banned_mac) { print FILE "acl IPFire_banned_mac arp \"$acl_src_banned_mac\"\n"; }
3174 if (!-z $acl_src_unrestricted_ip) { print FILE "acl IPFire_unrestricted_ips src \"$acl_src_unrestricted_ip\"\n"; }
3175 if (!-z $acl_src_unrestricted_mac) { print FILE "acl IPFire_unrestricted_mac arp \"$acl_src_unrestricted_mac\"\n"; }
3176 print FILE <<END
3177acl CONNECT method CONNECT
3178END
3179 ;
3180
f0b7534f
MT
3181 if ($proxysettings{'CACHE_SIZE'} > 0) {
3182 print FILE <<END
3183maximum_object_size $proxysettings{'MAX_SIZE'} KB
3184minimum_object_size $proxysettings{'MIN_SIZE'} KB
3185
3186cache_dir aufs /var/log/cache $proxysettings{'CACHE_SIZE'} $proxysettings{'L1_DIRS'} 256
3187END
3188 ;
3189 } else {
53d67554
DWD
3190 if ($proxysettings{'CACHE_MEM'} > 0) {
3191 # always 2% of CACHE_MEM defined as max object size
3192 print FILE "maximum_object_size_in_memory " . int($proxysettings{'CACHE_MEM'} * 1024 * 0.02) . " KB\n\n";
3193 } else {
3194 print FILE "cache deny all\n\n";
3195 }
f0b7534f
MT
3196 }
3197
3198 print FILE <<END
3199request_body_max_size $proxysettings{'MAX_OUTGOING_SIZE'} KB
3200END
3201 ;
3202
3203 if ($proxysettings{'MAX_INCOMING_SIZE'} > 0) {
3204 if (!-z $acl_src_unrestricted_ip) { print FILE "reply_body_max_size none IPFire_unrestricted_ips\n"; }
3205 if (!-z $acl_src_unrestricted_mac) { print FILE "reply_body_max_size none IPFire_unrestricted_mac\n"; }
3206 if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
3207 {
3208 if (!-z $extgrp) { print FILE "reply_body_max_size none for_extended_users\n"; }
3209 }
3210 }
3211
3212 if ( $proxysettings{'MAX_INCOMING_SIZE'} != '0' )
e7b7cbae 3213 {
f0b7534f 3214 print FILE "reply_body_max_size $proxysettings{'MAX_INCOMING_SIZE'} KB all\n\n";
e7b7cbae
AF
3215 }
3216
ed38f89d
MT
3217 if ($proxysettings{'LOGGING'} eq 'on')
3218 {
363fb6af 3219 print FILE <<END
754f508b 3220access_log stdio:/var/log/squid/access.log
ed38f89d
MT
3221cache_log /var/log/squid/cache.log
3222cache_store_log none
3223END
3224 ;
754f508b 3225 if ($proxysettings{'LOGUSERAGENT'} eq 'on') { print FILE "access_log stdio:\/var\/log\/squid\/user_agent.log useragent\n"; }
ed38f89d
MT
3226 if ($proxysettings{'LOGQUERY'} eq 'on') { print FILE "\nstrip_query_terms off\n"; }
3227 } else {
3228 print FILE <<END
363fb6af 3229access_log /dev/null
ed38f89d
MT
3230cache_log /dev/null
3231cache_store_log none
3232END
3233 ;}
3234 print FILE <<END
3235
3236log_mime_hdrs off
3237END
3238 ;
3239
3240 if ($proxysettings{'FORWARD_IPADDRESS'} eq 'on')
3241 {
363fb6af 3242 print FILE "forwarded_for on\n";
ed38f89d 3243 } else {
363fb6af 3244 print FILE "forwarded_for off\n";
ed38f89d 3245 }
363fb6af
MT
3246 if ($proxysettings{'FORWARD_VIA'} eq 'on')
3247 {
3248 print FILE "via on\n";
3249 } else {
3250 print FILE "via off\n";
3251 }
3252 print FILE "\n";
ed38f89d
MT
3253
3254 if ((!($proxysettings{'AUTH_METHOD'} eq 'none')) && (!($proxysettings{'AUTH_METHOD'} eq 'ident')))
3255 {
3256 if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
3257 {
754f508b 3258 print FILE "auth_param basic program $authdir/basic_ncsa_auth $userdb\n";
ed38f89d
MT
3259 print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n";
3260 print FILE "auth_param basic realm $authrealm\n";
3261 print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n";
0f8251fe 3262 if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; }
ed38f89d
MT
3263 }
3264
3265 if ($proxysettings{'AUTH_METHOD'} eq 'ldap')
3266 {
725e3869 3267 print FILE "auth_param basic utf8 on\n";
754f508b 3268 print FILE "auth_param basic program $authdir/basic_ldap_auth -b \"$proxysettings{'LDAP_BASEDN'}\"";
ed38f89d
MT
3269 if (!($proxysettings{'LDAP_BINDDN_USER'} eq '')) { print FILE " -D \"$proxysettings{'LDAP_BINDDN_USER'}\""; }
3270 if (!($proxysettings{'LDAP_BINDDN_PASS'} eq '')) { print FILE " -w $proxysettings{'LDAP_BINDDN_PASS'}"; }
3271 if ($proxysettings{'LDAP_TYPE'} eq 'ADS')
3272 {
3273 if ($proxysettings{'LDAP_GROUP'} eq '')
3274 {
3275 print FILE " -f \"(\&(objectClass=person)(sAMAccountName=\%s))\"";
3276 } else {
3277 print FILE " -f \"(\&(\&(objectClass=person)(sAMAccountName=\%s))(memberOf=$proxysettings{'LDAP_GROUP'}))\"";
3278 }
3279 print FILE " -u sAMAccountName -P";
3280 }
3281 if ($proxysettings{'LDAP_TYPE'} eq 'NDS')
3282 {
3283 if ($proxysettings{'LDAP_GROUP'} eq '')
3284 {
3285 print FILE " -f \"(\&(objectClass=person)(cn=\%s))\"";
3286 } else {
3287 print FILE " -f \"(\&(\&(objectClass=person)(cn=\%s))(groupMembership=$proxysettings{'LDAP_GROUP'}))\"";
3288 }
3289 print FILE " -u cn -P";
3290 }
3291 if (($proxysettings{'LDAP_TYPE'} eq 'V2') || ($proxysettings{'LDAP_TYPE'} eq 'V3'))
3292 {
3293 if ($proxysettings{'LDAP_GROUP'} eq '')
3294 {
3295 print FILE " -f \"(\&(objectClass=person)(uid=\%s))\"";
3296 } else {
3297 print FILE " -f \"(\&(\&(objectClass=person)(uid=\%s))(memberOf=$proxysettings{'LDAP_GROUP'}))\"";
3298 }
3299 if ($proxysettings{'LDAP_TYPE'} eq 'V2') { print FILE " -v 2"; }
3300 if ($proxysettings{'LDAP_TYPE'} eq 'V3') { print FILE " -v 3"; }
3301 print FILE " -u uid -P";
3302 }
3303 print FILE " $proxysettings{'LDAP_SERVER'}:$proxysettings{'LDAP_PORT'}\n";
3304 print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n";
3305 print FILE "auth_param basic realm $authrealm\n";
3306 print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n";
0f8251fe 3307 if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; }
ed38f89d
MT
3308 }
3309
603248db
MT
3310 if ($proxysettings{'AUTH_METHOD'} eq 'ntlm-auth')
3311 {
b5674643
MT
3312 print FILE "auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp";
3313 if ($proxysettings{'NTLM_AUTH_GROUP'}) {
3314 my $ntlm_auth_group = $proxysettings{'NTLM_AUTH_GROUP'};
3315 $ntlm_auth_group =~ s/\\/\+/;
3316
a44eed25 3317 print FILE " --require-membership-of=$ntlm_auth_group";
b5674643
MT
3318 }
3319 print FILE "\n";
3320
2fc5124b 3321 print FILE "auth_param ntlm children $proxysettings{'AUTH_CHILDREN'}\n\n";
a1018d86 3322 print FILE "auth_param ntlm credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n\n";
2fc5124b
MT
3323
3324 # BASIC authentication
3325 if ($proxysettings{'NTLM_AUTH_BASIC'} eq "on") {
3326 print FILE "auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic";
3327 if ($proxysettings{'NTLM_AUTH_GROUP'}) {
3328 my $ntlm_auth_group = $proxysettings{'NTLM_AUTH_GROUP'};
3329 $ntlm_auth_group =~ s/\\/\+/;
3330
a44eed25 3331 print FILE " --require-membership-of=$ntlm_auth_group";
2fc5124b
MT
3332 }
3333 print FILE "\n";
fa286b13 3334 print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n";
5c2a76f7 3335 print FILE "auth_param basic realm $authrealm\n";
6df2d528 3336 print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n\n";
2fc5124b 3337 }
603248db
MT
3338 }
3339
ed38f89d
MT
3340 if ($proxysettings{'AUTH_METHOD'} eq 'radius')
3341 {
754f508b 3342 print FILE "auth_param basic program $authdir/basic_radius_auth -h $proxysettings{'RADIUS_SERVER'} -p $proxysettings{'RADIUS_PORT'} ";
ed38f89d
MT
3343 if (!($proxysettings{'RADIUS_IDENTIFIER'} eq '')) { print FILE "-i $proxysettings{'RADIUS_IDENTIFIER'} "; }
3344 print FILE "-w $proxysettings{'RADIUS_SECRET'}\n";
3345 print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n";
3346 print FILE "auth_param basic realm $authrealm\n";
3347 print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n";
0f8251fe 3348 if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; }
ed38f89d
MT
3349 }
3350
3351 print FILE "\n";
3352 print FILE "acl for_inetusers proxy_auth REQUIRED\n";
ed38f89d
MT
3353 if (($proxysettings{'AUTH_METHOD'} eq 'radius') && ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on'))
3354 {
3355 if ((!-z "$raddir/radauth.allowusers") && ($proxysettings{'RADIUS_USER_ACL'} eq 'positive'))
3356 {
3357 print FILE "acl for_acl_users proxy_auth \"$raddir/radauth.allowusers\"\n";
3358 }
3359 if ((!-z "$raddir/radauth.denyusers") && ($proxysettings{'RADIUS_USER_ACL'} eq 'negative'))
3360 {
3361 print FILE "acl for_acl_users proxy_auth \"$raddir/radauth.denyusers\"\n";
3362 }
3363 }
3364 if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
3365 {
3366 print FILE "\n";
3367 if (!-z $extgrp) { print FILE "acl for_extended_users proxy_auth \"$extgrp\"\n"; }
3368 if (!-z $disgrp) { print FILE "acl for_disabled_users proxy_auth \"$disgrp\"\n"; }
3369 }
3370 if (!($proxysettings{'AUTH_MAX_USERIP'} eq '')) { print FILE "\nacl concurrent max_user_ip -s $proxysettings{'AUTH_MAX_USERIP'}\n"; }
3371 print FILE "\n";
3372
488d1b7c
CS
3373 if (!-z $acl_dst_noauth_net) { print FILE "acl to_ipaddr_without_auth dst \"$acl_dst_noauth_net\"\n"; }
3374 if (!-z $acl_dst_noauth_dom) { print FILE "acl to_domains_without_auth dstdomain \"$acl_dst_noauth_dom\"\n"; }
3375 if (!-z $acl_dst_noauth_url) { print FILE "acl to_hosts_without_auth url_regex -i \"$acl_dst_noauth_url\"\n"; }
363fb6af 3376 print FILE "\n";
488d1b7c 3377
ed38f89d
MT
3378 }
3379
3380 if ($proxysettings{'AUTH_METHOD'} eq 'ident')
3381 {
3382 if ($proxysettings{'IDENT_REQUIRED'} eq 'on')
3383 {
3384 print FILE "acl for_inetusers ident REQUIRED\n";
3385 }
3386 if ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on')
3387 {
3388 if ((!-z "$identdir/identauth.allowusers") && ($proxysettings{'IDENT_USER_ACL'} eq 'positive'))
3389 {
3390 print FILE "acl for_acl_users ident_regex -i \"$identdir/identauth.allowusers\"\n\n";
3391 }
3392 if ((!-z "$identdir/identauth.denyusers") && ($proxysettings{'IDENT_USER_ACL'} eq 'negative'))
3393 {
3394 print FILE "acl for_acl_users ident_regex -i \"$identdir/identauth.denyusers\"\n\n";
3395 }
3396 }
488d1b7c
CS
3397 if (!-z $acl_dst_noauth_net) { print FILE "acl to_ipaddr_without_auth dst \"$acl_dst_noauth_net\"\n"; }
3398 if (!-z $acl_dst_noauth_dom) { print FILE "acl to_domains_without_auth dstdomain \"$acl_dst_noauth_dom\"\n"; }
3399 if (!-z $acl_dst_noauth_url) { print FILE "acl to_hosts_without_auth url_regex -i \"$acl_dst_noauth_url\"\n"; }
363fb6af 3400 print FILE "\n";
ed38f89d
MT
3401 }
3402
3403 if (($delaypools) && (!-z $acl_dst_throttle)) { print FILE "acl for_throttled_urls url_regex -i \"$acl_dst_throttle\"\n\n"; }
3404
28c9dec6 3405 print FILE "acl within_timeframe time ";
ed38f89d
MT
3406 if ($proxysettings{'TIME_MON'} eq 'on') { print FILE "M"; }
3407 if ($proxysettings{'TIME_TUE'} eq 'on') { print FILE "T"; }
3408 if ($proxysettings{'TIME_WED'} eq 'on') { print FILE "W"; }
3409 if ($proxysettings{'TIME_THU'} eq 'on') { print FILE "H"; }
3410 if ($proxysettings{'TIME_FRI'} eq 'on') { print FILE "F"; }
3411 if ($proxysettings{'TIME_SAT'} eq 'on') { print FILE "A"; }
3412 if ($proxysettings{'TIME_SUN'} eq 'on') { print FILE "S"; }
363fb6af
MT
3413 print FILE " $proxysettings{'TIME_FROM_HOUR'}:";
3414 print FILE "$proxysettings{'TIME_FROM_MINUTE'}-";
3415 print FILE "$proxysettings{'TIME_TO_HOUR'}:";
3416 print FILE "$proxysettings{'TIME_TO_MINUTE'}\n\n";
ed38f89d
MT
3417
3418 if ((!-z $mimetypes) && ($proxysettings{'ENABLE_MIME_FILTER'} eq 'on')) {
3419 print FILE "acl blocked_mimetypes rep_mime_type \"$mimetypes\"\n\n";
3420 }
3421
ed38f89d
MT
3422 if ($proxysettings{'CLASSROOM_EXT'} eq 'on') {
3423 print FILE <<END
3424
3425#Classroom extensions
488d1b7c
CS
3426acl IPFire_no_access_ips src "$acl_src_noaccess_ip"
3427acl IPFire_no_access_mac arp "$acl_src_noaccess_mac"
ed38f89d
MT
3428END
3429 ;
3430 print FILE "deny_info ";
ab4a5a35 3431 if (($proxysettings{'ERR_DESIGN'} eq 'squid') && (-e "$errordir/$proxysettings{'ERR_LANGUAGE'}/ERR_ACCESS_DISABLED"))
363fb6af
MT
3432 {
3433 print FILE "ERR_ACCESS_DISABLED";
3434 } else {
3435 print FILE "ERR_ACCESS_DENIED";
3436 }
488d1b7c 3437 print FILE " IPFire_no_access_ips\n";
ed38f89d 3438 print FILE "deny_info ";
ab4a5a35 3439 if (($proxysettings{'ERR_DESIGN'} eq 'squid') && (-e "$errordir/$proxysettings{'ERR_LANGUAGE'}/ERR_ACCESS_DISABLED"))
363fb6af
MT
3440 {
3441 print FILE "ERR_ACCESS_DISABLED";
3442 } else {
3443 print FILE "ERR_ACCESS_DENIED";
3444 }
488d1b7c 3445 print FILE " IPFire_no_access_mac\n";
ed38f89d
MT
3446
3447 print FILE <<END
488d1b7c
CS
3448http_access deny IPFire_no_access_ips
3449http_access deny IPFire_no_access_mac
ed38f89d
MT
3450END
3451 ;
3452 }
3453
363fb6af
MT
3454 #Insert acl file and replace __VAR__ with correct values
3455 my $blue_net = ''; #BLUE empty by default
3456 my $blue_ip = '';
3457 if ($netsettings{'BLUE_DEV'} && $proxysettings{'ENABLE_BLUE'} eq 'on') {
f09a0af5 3458 $blue_net = "$blue_cidr";
363fb6af
MT
3459 $blue_ip = "$netsettings{'BLUE_ADDRESS'}";
3460 }
3461 if (!-z $acl_include)
ed38f89d
MT
3462 {
3463 open (ACL, "$acl_include");
488d1b7c 3464 print FILE "\n#Start of custom includes\n\n";
ed38f89d
MT
3465 while (<ACL>) {
3466 $_ =~ s/__GREEN_IP__/$netsettings{'GREEN_ADDRESS'}/;
f09a0af5 3467 $_ =~ s/__GREEN_NET__/$green_cidr/;
ed38f89d
MT
3468 $_ =~ s/__BLUE_IP__/$blue_ip/;
3469 $_ =~ s/__BLUE_NET__/$blue_net/;
363fb6af 3470 $_ =~ s/__PROXY_PORT__/$proxysettings{'PROXY_PORT'}/;
ed38f89d
MT
3471 print FILE $_;
3472 }
488d1b7c 3473 print FILE "\n#End of custom includes\n";
ed38f89d
MT
3474 close (ACL);
3475 }
3476 if ((!-z $extgrp) && ($proxysettings{'AUTH_METHOD'} eq 'ncsa') && ($proxysettings{'NCSA_BYPASS_REDIR'} eq 'on')) { print FILE "\nredirector_access deny for_extended_users\n"; }
dfee7582
SS
3477
3478 # Check if squidclamav is enabled.
3479 if ($proxysettings{'ENABLE_CLAMAV'} eq 'on') {
3480 print FILE "\n#Settings for squidclamav:\n";
0f6b6067 3481 print FILE "http_port 127.0.0.1:$proxysettings{'PROXY_PORT'}\n";
dfee7582
SS
3482 print FILE "acl purge method PURGE\n";
3483 print FILE "http_access deny to_localhost\n";
3484 print FILE "http_access allow localhost\n";
3485 print FILE "http_access allow purge localhost\n";
3486 print FILE "http_access deny purge\n";
3487 print FILE "url_rewrite_access deny localhost\n";
3488 }
3ebc0da7 3489 print FILE <<END;
ed38f89d
MT
3490
3491#Access to squid:
3492#local machine, no restriction
3493http_access allow localhost
3494
3495#GUI admin if local machine connects
488d1b7c
CS
3496http_access allow IPFire_ips IPFire_networks IPFire_http
3497http_access allow CONNECT IPFire_ips IPFire_networks IPFire_https
ed38f89d
MT
3498
3499#Deny not web services
ed38f89d 3500END
3ebc0da7
MT
3501
3502if (@safe_ports) {
3503 print FILE "http_access deny !Safe_ports\n";
3504}
3505
3506if (@ssl_ports) {
3507 print FILE "http_access deny CONNECT !SSL_ports\n";
3508}
ed38f89d
MT
3509
3510if ($proxysettings{'AUTH_METHOD'} eq 'ident')
3511{
3512print FILE "#Set ident ACLs\n";
3513if (!-z $identhosts)
3514 {
3515 print FILE "acl on_ident_aware_hosts src \"$identhosts\"\n";
3516 print FILE "ident_lookup_access allow on_ident_aware_hosts\n";
3517 print FILE "ident_lookup_access deny all\n";
3518 } else {
3519 print FILE "ident_lookup_access allow all\n";
3520 }
3521 print FILE "ident_timeout $proxysettings{'IDENT_TIMEOUT'} seconds\n\n";
3522}
3523
3524if ($delaypools) {
3525 print FILE "#Set download throttling\n";
3526
3527 if ($netsettings{'BLUE_DEV'})
3528 {
3529 print FILE "delay_pools 2\n";
3530 } else {
3531 print FILE "delay_pools 1\n";
3532 }
3533
3534 print FILE "delay_class 1 3\n";
3535 if ($netsettings{'BLUE_DEV'}) { print FILE "delay_class 2 3\n"; }
3536
3537 print FILE "delay_parameters 1 ";
3538 if ($proxysettings{'THROTTLING_GREEN_TOTAL'} eq 'unlimited')
3539 {
3540 print FILE "-1/-1";
3541 } else {
3542 print FILE $proxysettings{'THROTTLING_GREEN_TOTAL'} * 125;
3543 print FILE "/";
3544 print FILE $proxysettings{'THROTTLING_GREEN_TOTAL'} * 250;
3545 }
3546
3547 print FILE " -1/-1 ";
3548 if ($proxysettings{'THROTTLING_GREEN_HOST'} eq 'unlimited')
3549 {
3550 print FILE "-1/-1";
3551 } else {
3552 print FILE $proxysettings{'THROTTLING_GREEN_HOST'} * 125;
3553 print FILE "/";
3554 print FILE $proxysettings{'THROTTLING_GREEN_HOST'} * 250;
3555 }
3556 print FILE "\n";
3557
3558 if ($netsettings{'BLUE_DEV'})
3559 {
3560 print FILE "delay_parameters 2 ";
3561 if ($proxysettings{'THROTTLING_BLUE_TOTAL'} eq 'unlimited')
3562 {
3563 print FILE "-1/-1";
3564 } else {
3565 print FILE $proxysettings{'THROTTLING_BLUE_TOTAL'} * 125;
3566 print FILE "/";
3567 print FILE $proxysettings{'THROTTLING_BLUE_TOTAL'} * 250;
3568 }
3569 print FILE " -1/-1 ";
3570 if ($proxysettings{'THROTTLING_BLUE_HOST'} eq 'unlimited')
3571 {
3572 print FILE "-1/-1";
3573 } else {
3574 print FILE $proxysettings{'THROTTLING_BLUE_HOST'} * 125;
3575 print FILE "/";
3576 print FILE $proxysettings{'THROTTLING_BLUE_HOST'} * 250;
3577 }
3578 print FILE "\n";
3579 }
3580
488d1b7c
CS
3581 print FILE "delay_access 1 deny IPFire_ips\n";
3582 if (!-z $acl_src_unrestricted_ip) { print FILE "delay_access 1 deny IPFire_unrestricted_ips\n"; }
3583 if (!-z $acl_src_unrestricted_mac) { print FILE "delay_access 1 deny IPFire_unrestricted_mac\n"; }
ed38f89d
MT
3584 if (($proxysettings{'AUTH_METHOD'} eq 'ncsa') && (!-z $extgrp)) { print FILE "delay_access 1 deny for_extended_users\n"; }
3585
3586 if ($netsettings{'BLUE_DEV'})
3587 {
488d1b7c 3588 print FILE "delay_access 1 allow IPFire_green_network";
363fb6af 3589 if (!-z $acl_dst_throttle) { print FILE " for_throttled_urls"; }
ed38f89d
MT
3590 print FILE "\n";
3591 print FILE "delay_access 1 deny all\n";
3592 } else {
3593 print FILE "delay_access 1 allow all";
363fb6af 3594 if (!-z $acl_dst_throttle) { print FILE " for_throttled_urls"; }
ed38f89d
MT
3595 print FILE "\n";
3596 }
3597
3598 if ($netsettings{'BLUE_DEV'})
3599 {
488d1b7c
CS
3600 print FILE "delay_access 2 deny IPFire_ips\n";
3601 if (!-z $acl_src_unrestricted_ip) { print FILE "delay_access 2 deny IPFire_unrestricted_ips\n"; }
3602 if (!-z $acl_src_unrestricted_mac) { print FILE "delay_access 2 deny IPFire_unrestricted_mac\n"; }
ed38f89d 3603 if (($proxysettings{'AUTH_METHOD'} eq 'ncsa') && (!-z $extgrp)) { print FILE "delay_access 2 deny for_extended_users\n"; }
488d1b7c 3604 print FILE "delay_access 2 allow IPFire_blue_network";
363fb6af 3605 if (!-z $acl_dst_throttle) { print FILE " for_throttled_urls"; }
ed38f89d
MT
3606 print FILE "\n";
3607 print FILE "delay_access 2 deny all\n";
3608 }
3609
28c9dec6 3610 print FILE "delay_initial_bucket_level 100\n";
ed38f89d
MT
3611 print FILE "\n";
3612}
9fb25b1c
MT
3613
3614if ($proxysettings{'NO_PROXY_LOCAL'} eq 'on')
3615{
b34fdcae
AF
3616 print FILE "#Prevent internal proxy access to Green except IPFire itself\n";
3617 print FILE "http_access deny IPFire_green_servers !IPFire_ips !IPFire_green_network\n\n";
9fb25b1c
MT
3618}
3619
3620if ($proxysettings{'NO_PROXY_LOCAL_BLUE'} eq 'on')
3621{
b34fdcae 3622 print FILE "#Prevent internal proxy access from Blue except IPFire itself\n";
488d1b7c 3623 print FILE "http_access allow IPFire_blue_network IPFire_blue_servers\n";
b34fdcae 3624 print FILE "http_access deny IPFire_blue_network !IPFire_ips IPFire_servers\n\n";
9fb25b1c
MT
3625}
3626
ed38f89d
MT
3627 print FILE <<END
3628#Set custom configured ACLs
3629END
3630 ;
488d1b7c
CS
3631 if (!-z $acl_src_banned_ip) { print FILE "http_access deny IPFire_banned_ips\n"; }
3632 if (!-z $acl_src_banned_mac) { print FILE "http_access deny IPFire_banned_mac\n"; }
ed38f89d
MT
3633
3634 if ((!-z $acl_dst_noauth) && (!($proxysettings{'AUTH_METHOD'} eq 'none')))
3635 {
3636 if (!-z $acl_src_unrestricted_ip)
3637 {
488d1b7c
CS
3638 if (!-z $acl_dst_noauth_net) { print FILE "http_access allow IPFire_unrestricted_ips to_ipaddr_without_auth\n"; }
3639 if (!-z $acl_dst_noauth_dom) { print FILE "http_access allow IPFire_unrestricted_ips to_domains_without_auth\n"; }
3640 if (!-z $acl_dst_noauth_url) { print FILE "http_access allow IPFire_unrestricted_ips to_hosts_without_auth\n"; }
ed38f89d
MT
3641 }
3642 if (!-z $acl_src_unrestricted_mac)
3643 {
488d1b7c
CS
3644 if (!-z $acl_dst_noauth_net) { print FILE "http_access allow IPFire_unrestricted_mac to_ipaddr_without_auth\n"; }
3645 if (!-z $acl_dst_noauth_dom) { print FILE "http_access allow IPFire_unrestricted_mac to_domains_without_auth\n"; }
3646 if (!-z $acl_dst_noauth_url) { print FILE "http_access allow IPFire_unrestricted_mac to_hosts_without_auth\n"; }
3647 }
3648 if (!-z $acl_dst_noauth_net)
3649 {
3650 print FILE "http_access allow IPFire_networks";
3651 if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') {
3652 print FILE " !within_timeframe";
3653 } else {
3654 print FILE " within_timeframe"; }
488d1b7c
CS
3655 print FILE " to_ipaddr_without_auth\n";
3656 }
3657 if (!-z $acl_dst_noauth_dom)
3658 {
3659 print FILE "http_access allow IPFire_networks";
3660 if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') {
3661 print FILE " !within_timeframe";
3662 } else {
3663 print FILE " within_timeframe"; }
488d1b7c
CS
3664 print FILE " to_domains_without_auth\n";
3665 }
3666 if (!-z $acl_dst_noauth_url)
3667 {
3668 print FILE "http_access allow IPFire_networks";
3669 if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') {
3670 print FILE " !within_timeframe";
3671 } else {
3672 print FILE " within_timeframe"; }
488d1b7c 3673 print FILE " to_hosts_without_auth\n";
ed38f89d 3674 }
ed38f89d
MT
3675 }
3676
3677 if (($proxysettings{'AUTH_METHOD'} eq 'ident') && ($proxysettings{'IDENT_REQUIRED'} eq 'on') && ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'on'))
3678 {
3679 print FILE "http_access deny !for_inetusers";
3680 if (!-z $identhosts) { print FILE " on_ident_aware_hosts"; }
3681 print FILE "\n";
3682 }
3683
3684 if (
3685 ($proxysettings{'AUTH_METHOD'} eq 'ident') &&
3686 ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'on') &&
3687 ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') &&
3688 ($proxysettings{'IDENT_USER_ACL'} eq 'negative') &&
3689 (!-z "$identdir/identauth.denyusers")
3690 )
3691 {
3692 print FILE "http_access deny for_acl_users";
3693 if (($proxysettings{'AUTH_METHOD'} eq 'ident') && (!-z "$identdir/hosts")) { print FILE " on_ident_aware_hosts"; }
3694 print FILE "\n";
3695 }
3696
3697 if (!-z $acl_src_unrestricted_ip)
3698 {
488d1b7c 3699 print FILE "http_access allow IPFire_unrestricted_ips";
ed38f89d
MT
3700 if ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'on')
3701 {
3702 if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
3703 {
3704 if (!-z $disgrp) { print FILE " !for_disabled_users"; } else { print FILE " for_inetusers"; }
3705 }
ea72700a 3706 if (($proxysettings{'AUTH_METHOD'} eq 'ldap') || ($proxysettings{'AUTH_METHOD'} eq 'radius'))
ed38f89d
MT
3707 {
3708 print FILE " for_inetusers";
3709 }
ed38f89d 3710 if (($proxysettings{'AUTH_METHOD'} eq 'radius') && ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on'))
363fb6af 3711 {
ed38f89d 3712 if ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on')
363fb6af 3713 {
ed38f89d
MT
3714 if (($proxysettings{'RADIUS_USER_ACL'} eq 'positive') && (!-z "$raddir/radauth.allowusers"))
3715 {
3716 print FILE " for_acl_users";
3717 }
3718 if (($proxysettings{'RADIUS_USER_ACL'} eq 'negative') && (!-z "$raddir/radauth.denyusers"))
3719 {
3720 print FILE " !for_acl_users";
3721 }
3722 } else { print FILE " for_inetusers"; }
3723 }
3724 }
3725 print FILE "\n";
3726 }
3727
3728 if (!-z $acl_src_unrestricted_mac)
3729 {
488d1b7c 3730 print FILE "http_access allow IPFire_unrestricted_mac";
ed38f89d
MT
3731 if ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'on')
3732 {
3733 if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
3734 {
3735 if (!-z $disgrp) { print FILE " !for_disabled_users"; } else { print FILE " for_inetusers"; }
3736 }
ea72700a 3737 if (($proxysettings{'AUTH_METHOD'} eq 'ldap') || ($proxysettings{'AUTH_METHOD'} eq 'radius'))
ed38f89d
MT
3738 {
3739 print FILE " for_inetusers";
3740 }
ed38f89d 3741 if (($proxysettings{'AUTH_METHOD'} eq 'radius') && ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on'))
363fb6af 3742 {
ed38f89d 3743 if ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on')
363fb6af 3744 {
ed38f89d
MT
3745 if (($proxysettings{'RADIUS_USER_ACL'} eq 'positive') && (!-z "$raddir/radauth.allowusers"))
3746 {
3747 print FILE " for_acl_users";
3748 }
3749 if (($proxysettings{'RADIUS_USER_ACL'} eq 'negative') && (!-z "$raddir/radauth.denyusers"))
3750 {
3751 print FILE " !for_acl_users";
3752 }
3753 } else { print FILE " for_inetusers"; }
3754 }
3755 }
3756 print FILE "\n";
3757 }
3758
3759 if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
3760 {
3761 if (!-z $disgrp) { print FILE "http_access deny for_disabled_users\n"; }
488d1b7c 3762 if (!-z $extgrp) { print FILE "http_access allow IPFire_networks for_extended_users\n"; }
ed38f89d
MT
3763 }
3764
3765 if (
ed38f89d
MT
3766 (
3767 ($proxysettings{'AUTH_METHOD'} eq 'radius') &&
3768 ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') &&
3769 ($proxysettings{'RADIUS_USER_ACL'} eq 'negative') &&
3770 (!-z "$raddir/radauth.denyusers")
3771 )
3772 ||
3773 (
3774 ($proxysettings{'AUTH_METHOD'} eq 'ident') &&
3775 ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'off') &&
3776 ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') &&
3777 ($proxysettings{'IDENT_USER_ACL'} eq 'negative') &&
3778 (!-z "$identdir/identauth.denyusers")
3779 )
3780 )
3781 {
3782 print FILE "http_access deny for_acl_users";
3783 if (($proxysettings{'AUTH_METHOD'} eq 'ident') && (!-z "$identdir/hosts")) { print FILE " on_ident_aware_hosts"; }
3784 print FILE "\n";
3785 }
3786
3787 if (($proxysettings{'AUTH_METHOD'} eq 'ident') && ($proxysettings{'IDENT_REQUIRED'} eq 'on') && (!-z "$identhosts"))
3788 {
3789 print FILE "http_access allow";
3790 if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') {
3791 print FILE " !within_timeframe";
3792 } else {
3793 print FILE " within_timeframe"; }
ed38f89d
MT
3794 print FILE " !on_ident_aware_hosts\n";
3795 }
3796
488d1b7c 3797 print FILE "http_access allow IPFire_networks";
ed38f89d 3798 if (
ed38f89d
MT
3799 (
3800 ($proxysettings{'AUTH_METHOD'} eq 'radius') &&
3801 ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') &&
3802 ($proxysettings{'RADIUS_USER_ACL'} eq 'positive') &&
3803 (!-z "$raddir/radauth.allowusers")
3804 )
3805 ||
3806 (
3807 ($proxysettings{'AUTH_METHOD'} eq 'ident') &&
3808 ($proxysettings{'IDENT_REQUIRED'} eq 'on') &&
3809 ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') &&
3810 ($proxysettings{'IDENT_USER_ACL'} eq 'positive') &&
3811 (!-z "$identdir/identauth.allowusers")
3812 )
3813 )
3814 {
3815 print FILE " for_acl_users";
3816 } elsif (((!($proxysettings{'AUTH_METHOD'} eq 'none')) && (!($proxysettings{'AUTH_METHOD'} eq 'ident'))) ||
3817 (($proxysettings{'AUTH_METHOD'} eq 'ident') && ($proxysettings{'IDENT_REQUIRED'} eq 'on'))) {
3818 print FILE " for_inetusers";
3819 }
3820 if ((!($proxysettings{'AUTH_MAX_USERIP'} eq '')) && (!($proxysettings{'AUTH_METHOD'} eq 'none')) && (!($proxysettings{'AUTH_METHOD'} eq 'ident')))
3821 {
3822 print FILE " !concurrent";
3823 }
3824 if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') {
3825 print FILE " !within_timeframe";
3826 } else {
3827 print FILE " within_timeframe"; }
ed38f89d
MT
3828 print FILE "\n";
3829
3830 print FILE "http_access deny all\n\n";
3831
6323e908 3832 if (($proxysettings{'FORWARD_IPADDRESS'} eq 'off') || ($proxysettings{'FORWARD_VIA'} eq 'off'))
ed38f89d
MT
3833 {
3834 print FILE "#Strip HTTP Header\n";
3835
3836 if ($proxysettings{'FORWARD_IPADDRESS'} eq 'off')
3837 {
30793ae1
AF
3838 print FILE "request_header_access X-Forwarded-For deny all\n";
3839 print FILE "reply_header_access X-Forwarded-For deny all\n";
ed38f89d
MT
3840 }
3841 if ($proxysettings{'FORWARD_VIA'} eq 'off')
3842 {
30793ae1
AF
3843 print FILE "request_header_access Via deny all\n";
3844 print FILE "reply_header_access Via deny all\n";
ed38f89d 3845 }
ed38f89d
MT
3846
3847 print FILE "\n";
3848
ed38f89d
MT
3849 }
3850
363fb6af
MT
3851 if ($proxysettings{'SUPPRESS_VERSION'} eq 'on') { print FILE "httpd_suppress_version_string on\n\n" }
3852
ed38f89d 3853 if ((!-z $mimetypes) && ($proxysettings{'ENABLE_MIME_FILTER'} eq 'on')) {
488d1b7c
CS
3854 if (!-z $acl_src_unrestricted_ip) { print FILE "http_reply_access allow IPFire_unrestricted_ips\n"; }
3855 if (!-z $acl_src_unrestricted_mac) { print FILE "http_reply_access allow IPFire_unrestricted_mac\n"; }
ed38f89d
MT
3856 if ($proxysettings{'AUTH_METHOD'} eq 'ncsa')
3857 {
3858 if (!-z $extgrp) { print FILE "http_reply_access allow for_extended_users\n"; }
3859 }
3860 print FILE "http_reply_access deny blocked_mimetypes\n";
3861 print FILE "http_reply_access allow all\n\n";
3862 }
3863
ed38f89d
MT
3864 print FILE "visible_hostname";
3865 if ($proxysettings{'VISIBLE_HOSTNAME'} eq '')
3866 {
3867 print FILE " $mainsettings{'HOSTNAME'}.$mainsettings{'DOMAINNAME'}\n\n";
3868 } else {
3869 print FILE " $proxysettings{'VISIBLE_HOSTNAME'}\n\n";
3870 }
3871
fe1656d2
CS
3872 if (!($proxysettings{'ADMIN_MAIL_ADDRESS'} eq '')) { print FILE "cache_mgr $proxysettings{'ADMIN_MAIL_ADDRESS'}\n"; }
3873 if (!($proxysettings{'ADMIN_PASSWORD'} eq '')) { print FILE "cachemgr_passwd $proxysettings{'ADMIN_PASSWORD'} all\n"; }
3874 print FILE "\n";
3875
3876 print FILE "max_filedescriptors $proxysettings{'FILEDESCRIPTORS'}\n\n";
ed38f89d
MT
3877
3878 # Write the parent proxy info, if needed.
3879 if ($remotehost ne '')
3880 {
ed38f89d 3881 print FILE "cache_peer $remotehost parent $remoteport 3130 default no-query";
363fb6af
MT
3882
3883 # Enter authentication for the parent cache. Option format is
3884 # login=user:password ($proxy1='YES')
3885 # login=PASS ($proxy1='PASS')
3886 # login=*:password ($proxysettings{'FORWARD_USERNAME'} eq 'on')
3887 if (($proxy1 eq 'YES') || ($proxy1 eq 'PASS'))
3888 {
3889 print FILE " login=$proxysettings{'UPSTREAM_USER'}";
3890 if ($proxy1 eq 'YES') { print FILE ":$proxysettings{'UPSTREAM_PASSWORD'}"; }
ed38f89d 3891 }
363fb6af
MT
3892 elsif ($proxysettings{'FORWARD_USERNAME'} eq 'on') { print FILE " login=*:password"; }
3893
488d1b7c
CS
3894 print FILE "\nalways_direct allow IPFire_ips\n";
3895 print FILE "never_direct allow all\n\n";
ed38f89d 3896 }
3900a6c7 3897 if (($proxysettings{'ENABLE_FILTER'} eq 'on') || ($proxysettings{'ENABLE_UPDXLRATOR'} eq 'on') || ($proxysettings{'ENABLE_CLAMAV'} eq 'on'))
363fb6af
MT
3898 {
3899 print FILE "url_rewrite_program /usr/sbin/redirect_wrapper\n";
eedca6e3
MT
3900 print FILE "url_rewrite_children ", &General::number_cpu_cores();
3901 print FILE " startup=", &General::number_cpu_cores();
3902 print FILE " idle=", &General::number_cpu_cores();
3903 print FILE " queue-size=", &General::number_cpu_cores() * 32, "\n\n";
ed38f89d 3904 }
eb3b93cc
MT
3905
3906 # Include file with user defined settings.
3907 if (-e "/etc/squid/squid.conf.local") {
3908 print FILE "include /etc/squid/squid.conf.local\n";
3909 }
ed38f89d 3910 close FILE;
dfee7582
SS
3911
3912 # Proxy settings for squidclamav - if installed.
3913 #
3914 # Check if squidclamav is enabled.
3915 if ($proxysettings{'ENABLE_CLAMAV'} eq 'on') {
3916
3917 my $configfile='/etc/squidclamav.conf';
3918
3919 my $data = &General::read_file_utf8($configfile);
3920 $data =~ s/squid_port [0-9]+/squid_port $proxysettings{'PROXY_PORT'}/g;
3921 &General::write_file_utf8($configfile, $data);
3922 }
ed38f89d
MT
3923}
3924
3925# -------------------------------------------------------------------
3926
3927sub adduser
3928{
3929 my ($str_user, $str_pass, $str_group) = @_;
3930 my @groupmembers=();
3931
3932 if ($str_pass eq 'lEaVeAlOnE')
3933 {
3934 open(FILE, "$userdb");
3935 @groupmembers = <FILE>;
3936 close(FILE);
3937 foreach $line (@groupmembers) { if ($line =~ /^$str_user:/i) { $str_pass = substr($line,index($line,":")); } }
3938 &deluser($str_user);
3939 open(FILE, ">>$userdb");
3940 flock FILE,2;
3941 print FILE "$str_user$str_pass";
3942 close(FILE);
3943 } else {
3944 &deluser($str_user);
0aff7b81 3945
77ea7462
SS
3946 my %htpasswd_options = (
3947 passwdFile => "$userdb",
3948 UseMD5 => 1,
3949 );
3950
3951 my $htpasswd = new Apache::Htpasswd(\%htpasswd_options);
3952
0aff7b81 3953 $htpasswd->htpasswd($str_user, $str_pass);
ed38f89d
MT
3954 }
3955
3956 if ($str_group eq 'standard') { open(FILE, ">>$stdgrp");
3957 } elsif ($str_group eq 'extended') { open(FILE, ">>$extgrp");
3958 } elsif ($str_group eq 'disabled') { open(FILE, ">>$disgrp"); }
3959 flock FILE, 2;
3960 print FILE "$str_user\n";
3961 close(FILE);
3962
3963 return;
3964}
3965
3966# -------------------------------------------------------------------
3967
3968sub deluser
3969{
3970 my ($str_user) = @_;
3971 my $groupfile='';
3972 my @groupmembers=();
3973 my @templist=();
3974
3975 foreach $groupfile ($stdgrp, $extgrp, $disgrp)
3976 {
3977 undef @templist;
3978 open(FILE, "$groupfile");
3979 @groupmembers = <FILE>;
3980 close(FILE);
3981 foreach $line (@groupmembers) { if (!($line =~ /^$str_user$/i)) { push(@templist, $line); } }
3982 open(FILE, ">$groupfile");
3983 flock FILE, 2;
3984 print FILE @templist;
3985 close(FILE);
3986 }
3987
3988 undef @templist;
3989 open(FILE, "$userdb");
3990 @groupmembers = <FILE>;
3991 close(FILE);
3992 foreach $line (@groupmembers) { if (!($line =~ /^$str_user:/i)) { push(@templist, $line); } }
3993 open(FILE, ">$userdb");
3994 flock FILE, 2;
3995 print FILE @templist;
3996 close(FILE);
3997
3998 return;
3999}
ac1cfefa 4000
ed38f89d 4001# -------------------------------------------------------------------
fe1656d2
CS
4002
4003sub writecachemgr
4004{
4005 open(FILE, ">${General::swroot}/proxy/cachemgr.conf");
4006 flock(FILE, 2);
4007 print FILE "$netsettings{'GREEN_ADDRESS'}:$proxysettings{'PROXY_PORT'}\n";
4008 print FILE "localhost";
d9f2cfa4 4009 close(FILE);
fe1656d2
CS
4010 return;
4011}
4012
bd027d94 4013# -------------------------------------------------------------------