Project

General

Profile

Download (59.3 KB) Statistics
| Branch: | Tag: | Revision:
1 a5c0b6c7 Scott Ullrich
<?php
2 5b237745 Scott Ullrich
/*
3
	services_captiveportal.php
4
	part of m0n0wall (http://m0n0.ch/wall)
5 a5c0b6c7 Scott Ullrich
6 ce77a9c4 Phil Davis
	Copyright (C) 2013-2015 Electric Sheep Fencing, LP
7 0bd34ed6 Scott Ullrich
	Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
8 5b237745 Scott Ullrich
	All rights reserved.
9 a5c0b6c7 Scott Ullrich
10 5b237745 Scott Ullrich
	Redistribution and use in source and binary forms, with or without
11
	modification, are permitted provided that the following conditions are met:
12 a5c0b6c7 Scott Ullrich
13 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
14
	   this list of conditions and the following disclaimer.
15 a5c0b6c7 Scott Ullrich
16 5b237745 Scott Ullrich
	2. Redistributions in binary form must reproduce the above copyright
17
	   notice, this list of conditions and the following disclaimer in the
18
	   documentation and/or other materials provided with the distribution.
19 a5c0b6c7 Scott Ullrich
20 5b237745 Scott Ullrich
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
21
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
24
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
	POSSIBILITY OF SUCH DAMAGE.
30
*/
31 1d333258 Scott Ullrich
/*
32
	pfSense_MODULE:	captiveportal
33
*/
34 5b237745 Scott Ullrich
35 6b07c15a Matthew Grooms
##|+PRIV
36
##|*IDENT=page-services-captiveportal
37
##|*NAME=Services: Captive portal page
38
##|*DESCR=Allow access to the 'Services: Captive portal' page.
39
##|*MATCH=services_captiveportal.php*
40
##|-PRIV
41
42 ccb55b27 Darren Embry
require_once("functions.inc");
43
require_once("filter.inc");
44
require_once("shaper.inc");
45
require_once("captiveportal.inc");
46 5b237745 Scott Ullrich
47 aa87cf11 Renato Botelho
if (substr($_GET['act'], 0, 3) == "get")
48
	$nocsrf = true;
49
50
require_once("guiconfig.inc");
51
52 baec2b00 Ermal
global $cpzone;
53
global $cpzoneid;
54
55
$cpzoneid = 1; /* Just a default */
56 b4792bf8 Ermal
$cpzone = $_GET['zone'];
57
if (isset($_POST['zone']))
58
	$cpzone = $_POST['zone'];
59 6fde5a1e Carlos Eduardo Ramos
60 287f7e26 Ermal
if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
61 060bc78b Renato Botelho
	header("Location: services_captiveportal_zones.php");
62
	exit;
63 5b237745 Scott Ullrich
}
64
65 b4792bf8 Ermal
if (!is_array($config['captiveportal']))
66
	$config['captiveportal'] = array();
67
$a_cp =& $config['captiveportal'];
68
69
$pgtitle = array(gettext("Services"),gettext("Captive portal"), $a_cp[$cpzone]['zone']);
70 b32dd0a6 jim-p
$shortcut_section = "captiveportal";
71 b4792bf8 Ermal
72 5b237745 Scott Ullrich
if ($_GET['act'] == "viewhtml") {
73 a636682d bcyrill
	if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext'])
74
		echo base64_decode($a_cp[$cpzone]['page']['htmltext']);
75 5b237745 Scott Ullrich
	exit;
76 aa87cf11 Renato Botelho
} else if ($_GET['act'] == "gethtmlhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext']) {
77
	$file_data = base64_decode($a_cp[$cpzone]['page']['htmltext']);
78
	$file_size = strlen($file_data);
79
80
	header("Content-Type: text/html");
81
	header("Content-Disposition: attachment; filename=portal.html");
82
	header("Content-Length: $file_size");
83
	echo $file_data;
84
85 92603e27 Renato Botelho
	exit;
86
} else if ($_GET['act'] == "delhtmlhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext']) {
87
	unset($a_cp[$cpzone]['page']['htmltext']);
88
	write_config(sprintf(gettext("Captive Portal: zone %s: Restore default portal page"), $cpzone));
89
	header("Location: services_captiveportal.php?zone={$cpzone}");
90 aa87cf11 Renato Botelho
	exit;
91 5b237745 Scott Ullrich
} else if ($_GET['act'] == "viewerrhtml") {
92 a636682d bcyrill
	if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext'])
93
		echo base64_decode($a_cp[$cpzone]['page']['errtext']);
94 5b237745 Scott Ullrich
	exit;
95 aa87cf11 Renato Botelho
} else if ($_GET['act'] == "geterrhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext']) {
96
	$file_data = base64_decode($a_cp[$cpzone]['page']['errtext']);
97
	$file_size = strlen($file_data);
98
99
	header("Content-Type: text/html");
100
	header("Content-Disposition: attachment; filename=err.html");
101
	header("Content-Length: $file_size");
102
	echo $file_data;
103
104 92603e27 Renato Botelho
	exit;
105
} else if ($_GET['act'] == "delerrhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext']) {
106
	unset($a_cp[$cpzone]['page']['errtext']);
107
	write_config(sprintf(gettext("Captive Portal: zone %s: Restore default error page"), $cpzone));
108
	header("Location: services_captiveportal.php?zone={$cpzone}");
109 aa87cf11 Renato Botelho
	exit;
110 5b87b24e Ermal
} else if ($_GET['act'] == "viewlogouthtml") {
111 a636682d bcyrill
	if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext'])
112
		echo base64_decode($a_cp[$cpzone]['page']['logouttext']);
113 5b87b24e Ermal
	exit;
114 aa87cf11 Renato Botelho
} else if ($_GET['act'] == "getlogouthtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext']) {
115
	$file_data = base64_decode($a_cp[$cpzone]['page']['logouttext']);
116
	$file_size = strlen($file_data);
117
118
	header("Content-Type: text/html");
119
	header("Content-Disposition: attachment; filename=logout.html");
120
	header("Content-Length: $file_size");
121
	echo $file_data;
122
123 92603e27 Renato Botelho
	exit;
124
} else if ($_GET['act'] == "dellogouthtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext']) {
125
	unset($a_cp[$cpzone]['page']['logouttext']);
126
	write_config(sprintf(gettext("Captive Portal: zone %s: Restore default logout page"), $cpzone));
127
	header("Location: services_captiveportal.php?zone={$cpzone}");
128 aa87cf11 Renato Botelho
	exit;
129 5b237745 Scott Ullrich
}
130
131 36f6ed35 bcyrill
if (!is_array($config['ca']))
132
	$config['ca'] = array();
133
134
$a_ca =& $config['ca'];
135
136
if (!is_array($config['cert']))
137
	$config['cert'] = array();
138
139
$a_cert =& $config['cert'];
140
141 a636682d bcyrill
if ($a_cp[$cpzone]) {
142 baec2b00 Ermal
	$cpzoneid = $pconfig['zoneid'] = $a_cp[$cpzone]['zoneid'];
143 b4792bf8 Ermal
	$pconfig['cinterface'] = $a_cp[$cpzone]['interface'];
144
	$pconfig['maxproc'] = $a_cp[$cpzone]['maxproc'];
145
	$pconfig['maxprocperip'] = $a_cp[$cpzone]['maxprocperip'];
146
	$pconfig['timeout'] = $a_cp[$cpzone]['timeout'];
147
	$pconfig['idletimeout'] = $a_cp[$cpzone]['idletimeout'];
148
	$pconfig['freelogins_count'] = $a_cp[$cpzone]['freelogins_count'];
149
	$pconfig['freelogins_resettimeout'] = $a_cp[$cpzone]['freelogins_resettimeout'];
150
	$pconfig['freelogins_updatetimeouts'] = isset($a_cp[$cpzone]['freelogins_updatetimeouts']);
151
	$pconfig['enable'] = isset($a_cp[$cpzone]['enable']);
152
	$pconfig['auth_method'] = $a_cp[$cpzone]['auth_method'];
153 a8cb0038 Renato Botelho
	$pconfig['localauth_priv'] = isset($a_cp[$cpzone]['localauth_priv']);
154 b4792bf8 Ermal
	$pconfig['radacct_enable'] = isset($a_cp[$cpzone]['radacct_enable']);
155
	$pconfig['radmac_enable'] = isset($a_cp[$cpzone]['radmac_enable']);
156
	$pconfig['radmac_secret'] = $a_cp[$cpzone]['radmac_secret'];
157
	$pconfig['reauthenticate'] = isset($a_cp[$cpzone]['reauthenticate']);
158
	$pconfig['reauthenticateacct'] = $a_cp[$cpzone]['reauthenticateacct'];
159
	$pconfig['httpslogin_enable'] = isset($a_cp[$cpzone]['httpslogin']);
160
	$pconfig['httpsname'] = $a_cp[$cpzone]['httpsname'];
161
	$pconfig['preauthurl'] = strtolower($a_cp[$cpzone]['preauthurl']);
162 2f1548d6 Renato Botelho
	$pconfig['blockedmacsurl'] = strtolower($a_cp[$cpzone]['blockedmacsurl']);
163 36f6ed35 bcyrill
	$pconfig['certref'] = $a_cp[$cpzone]['certref'];
164 b7b461fc derelict-pf
	$pconfig['nohttpsforwards'] = isset($a_cp[$cpzone]['nohttpsforwards']);
165 b4792bf8 Ermal
	$pconfig['logoutwin_enable'] = isset($a_cp[$cpzone]['logoutwin_enable']);
166
	$pconfig['peruserbw'] = isset($a_cp[$cpzone]['peruserbw']);
167
	$pconfig['bwdefaultdn'] = $a_cp[$cpzone]['bwdefaultdn'];
168
	$pconfig['bwdefaultup'] = $a_cp[$cpzone]['bwdefaultup'];
169
	$pconfig['nomacfilter'] = isset($a_cp[$cpzone]['nomacfilter']);
170
	$pconfig['noconcurrentlogins'] = isset($a_cp[$cpzone]['noconcurrentlogins']);
171 060bc78b Renato Botelho
	$pconfig['radius_protocol'] = $a_cp[$cpzone]['radius_protocol'];
172 b4792bf8 Ermal
	$pconfig['redirurl'] = $a_cp[$cpzone]['redirurl'];
173
	$pconfig['radiusip'] = $a_cp[$cpzone]['radiusip'];
174
	$pconfig['radiusip2'] = $a_cp[$cpzone]['radiusip2'];
175 ebc0e4b6 Ermal
	$pconfig['radiusip3'] = $a_cp[$cpzone]['radiusip3'];
176
	$pconfig['radiusip4'] = $a_cp[$cpzone]['radiusip4'];
177 b4792bf8 Ermal
	$pconfig['radiusport'] = $a_cp[$cpzone]['radiusport'];
178
	$pconfig['radiusport2'] = $a_cp[$cpzone]['radiusport2'];
179 ebc0e4b6 Ermal
	$pconfig['radiusport3'] = $a_cp[$cpzone]['radiusport3'];
180
	$pconfig['radiusport4'] = $a_cp[$cpzone]['radiusport4'];
181 b4792bf8 Ermal
	$pconfig['radiusacctport'] = $a_cp[$cpzone]['radiusacctport'];
182
	$pconfig['radiuskey'] = $a_cp[$cpzone]['radiuskey'];
183
	$pconfig['radiuskey2'] = $a_cp[$cpzone]['radiuskey2'];
184 ebc0e4b6 Ermal
	$pconfig['radiuskey3'] = $a_cp[$cpzone]['radiuskey3'];
185
	$pconfig['radiuskey4'] = $a_cp[$cpzone]['radiuskey4'];
186 b4792bf8 Ermal
	$pconfig['radiusvendor'] = $a_cp[$cpzone]['radiusvendor'];
187
	$pconfig['radiussession_timeout'] = isset($a_cp[$cpzone]['radiussession_timeout']);
188
	$pconfig['radiussrcip_attribute'] = $a_cp[$cpzone]['radiussrcip_attribute'];
189
	$pconfig['passthrumacadd'] = isset($a_cp[$cpzone]['passthrumacadd']);
190
	$pconfig['passthrumacaddusername'] = isset($a_cp[$cpzone]['passthrumacaddusername']);
191
	$pconfig['radmac_format'] = $a_cp[$cpzone]['radmac_format'];
192 720498a0 Michael Newton
	$pconfig['reverseacct'] = isset($a_cp[$cpzone]['reverseacct']);
193 4cc94535 Michael Newton
	$pconfig['radiusnasid'] = $a_cp[$cpzone]['radiusnasid'];
194 b4792bf8 Ermal
	$pconfig['page'] = array();
195
	if ($a_cp[$cpzone]['page']['htmltext'])
196
		$pconfig['page']['htmltext'] = $a_cp[$cpzone]['page']['htmltext'];
197
	if ($a_cp[$cpzone]['page']['errtext'])
198
		$pconfig['page']['errtext'] = $a_cp[$cpzone]['page']['errtext'];
199
	if ($a_cp[$cpzone]['page']['logouttext'])
200
		$pconfig['page']['logouttext'] = $a_cp[$cpzone]['page']['logouttext'];
201
}
202 5b237745 Scott Ullrich
203
if ($_POST) {
204
205
	unset($input_errors);
206
	$pconfig = $_POST;
207
208
	/* input validation */
209
	if ($_POST['enable']) {
210 b4792bf8 Ermal
		$reqdfields = explode(" ", "zone cinterface");
211
		$reqdfieldsn = array(gettext("Zone name"), gettext("Interface"));
212 a5c0b6c7 Scott Ullrich
213 10b92c57 Renato Botelho
		if (isset($_POST['auth_method']) && $_POST['auth_method'] == "radius") {
214
			$reqdfields[] = "radius_protocol";
215
			$reqdfieldsn[] = gettext("RADIUS Protocol");
216
			$reqdfields[] = "radiusip";
217
			$reqdfieldsn[] = gettext("Primary RADIUS server IP address");
218
		}
219
220 1e9b4611 Renato Botelho
		do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
221 a5c0b6c7 Scott Ullrich
222 b4792bf8 Ermal
		/* make sure no interfaces are bridged or used on other zones */
223
		if (is_array($_POST['cinterface'])) {
224
			foreach ($pconfig['cinterface'] as $cpbrif) {
225 3e4f5a33 jim-p
				if (link_interface_to_bridge($cpbrif))
226
					$input_errors[] = sprintf(gettext("The captive portal cannot be used on interface %s since it is part of a bridge."), $cpbrif);
227 b4792bf8 Ermal
				foreach ($a_cp as $cpkey => $cp) {
228
					if ($cpkey != $cpzone || empty($cpzone)) {
229
						if (in_array($cpbrif, explode(",", $cp['interface'])))
230
							$input_errors[] = sprintf(gettext("The captive portal cannot be used on interface %s since it is used already on %s instance."), $cpbrif, $cp['zone']);
231
					}
232
				}
233
			}
234
		}
235 a5c0b6c7 Scott Ullrich
236 5b237745 Scott Ullrich
		if ($_POST['httpslogin_enable']) {
237 060bc78b Renato Botelho
			if (!$_POST['certref']) {
238 36f6ed35 bcyrill
				$input_errors[] = gettext("Certificate must be specified for HTTPS login.");
239 5b237745 Scott Ullrich
			}
240
			if (!$_POST['httpsname'] || !is_domain($_POST['httpsname'])) {
241 6fde5a1e Carlos Eduardo Ramos
				$input_errors[] = gettext("The HTTPS server name must be specified for HTTPS login.");
242 5b237745 Scott Ullrich
			}
243
		}
244
	}
245 a5c0b6c7 Scott Ullrich
246 e680b2f9 Renato Botelho
	if ($_POST['timeout']) {
247
		if (!is_numeric($_POST['timeout']) || ($_POST['timeout'] < 1))
248
			$input_errors[] = gettext("The timeout must be at least 1 minute.");
249
		else if (isset($config['dhcpd']) && is_array($config['dhcpd'])) {
250
			foreach ($config['dhcpd'] as $dhcpd_if => $dhcpd_data) {
251
				if (!isset($dhcpd_data['enable']))
252
					continue;
253
				if (!is_array($_POST['cinterface']) || !in_array($dhcpd_if, $_POST['cinterface']))
254
					continue;
255
256
				$deftime = 7200; // Default lease time
257
				if (isset($dhcpd_data['defaultleasetime']) && is_numeric($dhcpd_data['defaultleasetime']))
258
					$deftime = $dhcpd_data['defaultleasetime'];
259
260
				if ($_POST['timeout'] > $deftime)
261
					$input_errors[] = gettext("Hard timeout must be less or equal Default lease time set on DHCP Server");
262
			}
263
		}
264 5b237745 Scott Ullrich
	}
265
	if ($_POST['idletimeout'] && (!is_numeric($_POST['idletimeout']) || ($_POST['idletimeout'] < 1))) {
266 6fde5a1e Carlos Eduardo Ramos
		$input_errors[] = gettext("The idle timeout must be at least 1 minute.");
267 5b237745 Scott Ullrich
	}
268 03552507 Erik Fonnesbeck
	if ($_POST['freelogins_count'] && (!is_numeric($_POST['freelogins_count']))) {
269 49f61a1c Erik Fonnesbeck
		$input_errors[] = gettext("The pass-through credit count must be a number or left blank.");
270
	} else if ($_POST['freelogins_count'] && is_numeric($_POST['freelogins_count']) && ($_POST['freelogins_count'] >= 1)) {
271
		if (empty($_POST['freelogins_resettimeout']) || !is_numeric($_POST['freelogins_resettimeout']) || ($_POST['freelogins_resettimeout'] <= 0)) {
272
			$input_errors[] = gettext("The waiting period to restore pass-through credits must be above 0 hours.");
273
		}
274 03552507 Erik Fonnesbeck
	}
275 5b237745 Scott Ullrich
	if (($_POST['radiusip'] && !is_ipaddr($_POST['radiusip']))) {
276 6fde5a1e Carlos Eduardo Ramos
		$input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip']);
277 5b237745 Scott Ullrich
	}
278 0bd34ed6 Scott Ullrich
	if (($_POST['radiusip2'] && !is_ipaddr($_POST['radiusip2']))) {
279 6fde5a1e Carlos Eduardo Ramos
		$input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip2']);
280 0bd34ed6 Scott Ullrich
	}
281 ebc0e4b6 Ermal
	if (($_POST['radiusip3'] && !is_ipaddr($_POST['radiusip3']))) {
282
		$input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip3']);
283
	}
284
	if (($_POST['radiusip4'] && !is_ipaddr($_POST['radiusip4']))) {
285
		$input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip4']);
286
	}
287 5b237745 Scott Ullrich
	if (($_POST['radiusport'] && !is_port($_POST['radiusport']))) {
288 6fde5a1e Carlos Eduardo Ramos
		$input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport']);
289 5b237745 Scott Ullrich
	}
290 0bd34ed6 Scott Ullrich
	if (($_POST['radiusport2'] && !is_port($_POST['radiusport2']))) {
291 6fde5a1e Carlos Eduardo Ramos
		$input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport2']);
292 0bd34ed6 Scott Ullrich
	}
293 ebc0e4b6 Ermal
	if (($_POST['radiusport3'] && !is_port($_POST['radiusport3']))) {
294
		$input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport3']);
295
	}
296
	if (($_POST['radiusport4'] && !is_port($_POST['radiusport4']))) {
297
		$input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport4']);
298
	}
299 5b237745 Scott Ullrich
	if (($_POST['radiusacctport'] && !is_port($_POST['radiusacctport']))) {
300 6fde5a1e Carlos Eduardo Ramos
		$input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusacctport']);
301 0bd34ed6 Scott Ullrich
	}
302 b4792bf8 Ermal
	if ($_POST['maxproc'] && (!is_numeric($_POST['maxproc']) || ($_POST['maxproc'] < 4) || ($_POST['maxproc'] > 100))) {
303 6fde5a1e Carlos Eduardo Ramos
		$input_errors[] = gettext("The maximum number of concurrent connections per client IP address may not be larger than the global maximum.");
304 5b237745 Scott Ullrich
	}
305 89b1c40c Michael Newton
	if (trim($_POST['radiusnasid']) !== "" && !preg_match("/^[\x21-\x7e]{3,253}$/i", trim($_POST['radiusnasid']))) {
306
		$input_errors[] = gettext("The NAS-Identifier must be 3-253 characters long and should only contain ASCII characters.");
307
	}
308 5b237745 Scott Ullrich
309
	if (!$input_errors) {
310 b4792bf8 Ermal
		$newcp =& $a_cp[$cpzone];
311
		//$newcp['zoneid'] = $a_cp[$cpzone]['zoneid'];
312
		if (empty($newcp['zoneid'])) {
313 1122705e Ermal
			$newcp['zoneid'] = 2;
314 baec2b00 Ermal
			foreach ($a_cp as $keycpzone => $cp) {
315 b4792bf8 Ermal
				if ($cp['zoneid'] == $newcp['zoneid'] && $keycpzone != $cpzone)
316
					$newcp['zoneid'] += 2; /* Resreve space for SSL config if needed */
317 baec2b00 Ermal
			}
318
			$cpzoneid = $newcp['zoneid'];
319 b4792bf8 Ermal
		}
320 13e64b47 Ermal
		$oldifaces = explode(",", $newcp['interface']);
321 3e4f5a33 jim-p
		if (is_array($_POST['cinterface']))
322 b4792bf8 Ermal
			$newcp['interface'] = implode(",", $_POST['cinterface']);
323
		$newcp['maxproc'] = $_POST['maxproc'];
324
		$newcp['maxprocperip'] = $_POST['maxprocperip'] ? $_POST['maxprocperip'] : false;
325
		$newcp['timeout'] = $_POST['timeout'];
326
		$newcp['idletimeout'] = $_POST['idletimeout'];
327
		$newcp['freelogins_count'] = $_POST['freelogins_count'];
328
		$newcp['freelogins_resettimeout'] = $_POST['freelogins_resettimeout'];
329
		$newcp['freelogins_updatetimeouts'] = $_POST['freelogins_updatetimeouts'] ? true : false;
330
		if ($_POST['enable'])
331
			$newcp['enable'] = true;
332
		else
333
			unset($newcp['enable']);
334
		$newcp['auth_method'] = $_POST['auth_method'];
335 a8cb0038 Renato Botelho
		$newcp['localauth_priv'] = isset($_POST['localauth_priv']);
336 b4792bf8 Ermal
		$newcp['radacct_enable'] = $_POST['radacct_enable'] ? true : false;
337
		$newcp['reauthenticate'] = $_POST['reauthenticate'] ? true : false;
338
		$newcp['radmac_enable'] = $_POST['radmac_enable'] ? true : false;
339
		$newcp['radmac_secret'] = $_POST['radmac_secret'] ? $_POST['radmac_secret'] : false;
340
		$newcp['reauthenticateacct'] = $_POST['reauthenticateacct'];
341 f3bea667 bcyrill
		if ($_POST['httpslogin_enable'])
342 20789ec9 bcyrill
			$newcp['httpslogin'] = true;
343
		else
344
			unset($newcp['httpslogin']);
345 b4792bf8 Ermal
		$newcp['httpsname'] = $_POST['httpsname'];
346
		$newcp['preauthurl'] = $_POST['preauthurl'];
347 2f1548d6 Renato Botelho
		$newcp['blockedmacsurl'] = $_POST['blockedmacsurl'];
348 b4792bf8 Ermal
		$newcp['peruserbw'] = $_POST['peruserbw'] ? true : false;
349 384deecb Ermal LUÇI
		if (isset($_POST['bwdefaultdn']))
350
			$newcp['bwdefaultdn'] = $_POST['bwdefaultdn'];
351
		else
352
			unset($newcp['bwdefaultdn']);
353
		if (isset($_POST['bwdefaultup']))
354
			$newcp['bwdefaultup'] = $_POST['bwdefaultup'];
355
		else
356
			unset($newcp['bwdefaultup']);
357 36f6ed35 bcyrill
		$newcp['certref'] = $_POST['certref'];
358 b7b461fc derelict-pf
		$newcp['nohttpsforwards'] = $_POST['nohttpsforwards'] ? true : false;
359 b4792bf8 Ermal
		$newcp['logoutwin_enable'] = $_POST['logoutwin_enable'] ? true : false;
360
		$newcp['nomacfilter'] = $_POST['nomacfilter'] ? true : false;
361
		$newcp['noconcurrentlogins'] = $_POST['noconcurrentlogins'] ? true : false;
362 060bc78b Renato Botelho
		$newcp['radius_protocol'] = $_POST['radius_protocol'];
363 b4792bf8 Ermal
		$newcp['redirurl'] = $_POST['redirurl'];
364 ebc0e4b6 Ermal
		if (isset($_POST['radiusip']))
365 13a45484 Cyrill Bannwart
			$newcp['radiusip'] = $_POST['radiusip'];
366 ebc0e4b6 Ermal
		else
367 5c0d5003 Ermal
			unset($newcp['radiusip']);
368 ebc0e4b6 Ermal
		if (isset($_POST['radiusip2']))
369 13a45484 Cyrill Bannwart
			$newcp['radiusip2'] = $_POST['radiusip2'];
370 ebc0e4b6 Ermal
		else
371 13a45484 Cyrill Bannwart
			unset($newcp['radiusip2']);
372 ebc0e4b6 Ermal
		if (isset($_POST['radiusip3']))
373 13a45484 Cyrill Bannwart
			$newcp['radiusip3'] = $_POST['radiusip3'];
374 ebc0e4b6 Ermal
		else
375 13a45484 Cyrill Bannwart
			unset($newcp['radiusip3']);
376 ebc0e4b6 Ermal
		if (isset($_POST['radiusip4']))
377 13a45484 Cyrill Bannwart
			$newcp['radiusip4'] = $_POST['radiusip4'];
378 ebc0e4b6 Ermal
		else
379 13a45484 Cyrill Bannwart
			unset($newcp['radiusip4']);
380 b4792bf8 Ermal
		$newcp['radiusport'] = $_POST['radiusport'];
381
		$newcp['radiusport2'] = $_POST['radiusport2'];
382 ebc0e4b6 Ermal
		if (isset($_POST['radiusport3']))
383 13a45484 Cyrill Bannwart
			$newcp['radiusport3'] = $_POST['radiusport3'];
384 ebc0e4b6 Ermal
		if (isset($_POST['radiusport4']))
385 13a45484 Cyrill Bannwart
			$newcp['radiusport4'] = $_POST['radiusport4'];
386 b4792bf8 Ermal
		$newcp['radiusacctport'] = $_POST['radiusacctport'];
387
		$newcp['radiuskey'] = $_POST['radiuskey'];
388
		$newcp['radiuskey2'] = $_POST['radiuskey2'];
389 ebc0e4b6 Ermal
		$newcp['radiuskey3'] = $_POST['radiuskey3'];
390
		$newcp['radiuskey4'] = $_POST['radiuskey4'];
391 b4792bf8 Ermal
		$newcp['radiusvendor'] = $_POST['radiusvendor'] ? $_POST['radiusvendor'] : false;
392
		$newcp['radiussession_timeout'] = $_POST['radiussession_timeout'] ? true : false;
393
		$newcp['radiussrcip_attribute'] = $_POST['radiussrcip_attribute'];
394
		$newcp['passthrumacadd'] = $_POST['passthrumacadd'] ? true : false;
395
		$newcp['passthrumacaddusername'] = $_POST['passthrumacaddusername'] ? true : false;
396
		$newcp['radmac_format'] = $_POST['radmac_format'] ? $_POST['radmac_format'] : false;
397 720498a0 Michael Newton
		$newcp['reverseacct'] = $_POST['reverseacct'] ? true : false;
398 4cc94535 Michael Newton
		$newcp['radiusnasid'] = trim($_POST['radiusnasid']);
399 b4792bf8 Ermal
		if (!is_array($newcp['page']))
400
			$newcp['page'] = array();
401 a5c0b6c7 Scott Ullrich
402 5b237745 Scott Ullrich
		/* file upload? */
403
		if (is_uploaded_file($_FILES['htmlfile']['tmp_name']))
404 b4792bf8 Ermal
			$newcp['page']['htmltext'] = base64_encode(file_get_contents($_FILES['htmlfile']['tmp_name']));
405 c980716e Scott Ullrich
		if (is_uploaded_file($_FILES['errfile']['tmp_name']))
406 b4792bf8 Ermal
			$newcp['page']['errtext'] = base64_encode(file_get_contents($_FILES['errfile']['tmp_name']));
407 5b87b24e Ermal
		if (is_uploaded_file($_FILES['logoutfile']['tmp_name']))
408 b4792bf8 Ermal
			$newcp['page']['logouttext'] = base64_encode(file_get_contents($_FILES['logoutfile']['tmp_name']));
409 a5c0b6c7 Scott Ullrich
410 5b237745 Scott Ullrich
		write_config();
411 a5c0b6c7 Scott Ullrich
412 13e64b47 Ermal
		/* Clear up unselected interfaces */
413
		$newifaces = explode(",", $newcp['interface']);
414
		$toremove = array_diff($oldifaces, $newifaces);
415
		if (!empty($toremove)) {
416
			foreach ($toremove as $removeif) {
417
				$removeif = get_real_interface($removeif);
418 08d47f75 Ermal
				mwexec("/sbin/ipfw zone {$cpzoneid} mdel {$removeif}");
419 13e64b47 Ermal
			}
420
		}
421 b4792bf8 Ermal
		captiveportal_configure_zone($newcp);
422 13e64b47 Ermal
		unset($newcp, $newifaces, $toremove);
423 b4792bf8 Ermal
		filter_configure();
424
		header("Location: services_captiveportal_zones.php");
425 060bc78b Renato Botelho
		exit;
426 b4792bf8 Ermal
	} else {
427 3e4f5a33 jim-p
		if (is_array($_POST['cinterface']))
428
			$pconfig['cinterface'] = implode(",", $_POST['cinterface']);
429 5b237745 Scott Ullrich
	}
430
}
431 73672832 Colin Fleming
$closehead = false;
432 3d4bd975 Scott Ullrich
include("head.inc");
433 5b237745 Scott Ullrich
?>
434 91f026b0 ayvis
<script type="text/javascript">
435 73672832 Colin Fleming
//<![CDATA[
436 5b237745 Scott Ullrich
function enable_change(enable_change) {
437 0bd34ed6 Scott Ullrich
	var endis, radius_endis;
438 07bd3f83 Scott Ullrich
	endis = !(document.iform.enable.checked || enable_change);
439 a8cb0038 Renato Botelho
	localauth_endis = !((!endis && document.iform.auth_method[1].checked) || enable_change);
440 0bd34ed6 Scott Ullrich
	radius_endis = !((!endis && document.iform.auth_method[2].checked) || enable_change);
441 36f6ed35 bcyrill
	https_endis = !((!endis && document.iform.httpslogin_enable.checked) || enable_change);
442 a5c0b6c7 Scott Ullrich
443 07bd3f83 Scott Ullrich
	document.iform.cinterface.disabled = endis;
444 b4792bf8 Ermal
	//document.iform.maxproc.disabled = endis;
445 422d57b4 Scott Ullrich
	document.iform.maxprocperip.disabled = endis;
446 07bd3f83 Scott Ullrich
	document.iform.idletimeout.disabled = endis;
447 03552507 Erik Fonnesbeck
	document.iform.freelogins_count.disabled = endis;
448
	document.iform.freelogins_resettimeout.disabled = endis;
449
	document.iform.freelogins_updatetimeouts.disabled = endis;
450 07bd3f83 Scott Ullrich
	document.iform.timeout.disabled = endis;
451 f5adee3f jim-p
	document.iform.preauthurl.disabled = endis;
452 2f1548d6 Renato Botelho
	document.iform.blockedmacsurl.disabled = endis;
453 07bd3f83 Scott Ullrich
	document.iform.redirurl.disabled = endis;
454 a8cb0038 Renato Botelho
	document.iform.localauth_priv.disabled = localauth_endis;
455 0bd34ed6 Scott Ullrich
	document.iform.radiusip.disabled = radius_endis;
456
	document.iform.radiusip2.disabled = radius_endis;
457 ebc0e4b6 Ermal
	document.iform.radiusip3.disabled = radius_endis;
458
	document.iform.radiusip4.disabled = radius_endis;
459 0bd34ed6 Scott Ullrich
	document.iform.radiusport.disabled = radius_endis;
460 164a1525 Scott Ullrich
	document.iform.radiusport3.disabled = radius_endis;
461
	document.iform.radiusport4.disabled = radius_endis;
462 0bd34ed6 Scott Ullrich
	document.iform.radiusport2.disabled = radius_endis;
463
	document.iform.radiuskey.disabled = radius_endis;
464
	document.iform.radiuskey2.disabled = radius_endis;
465 ebc0e4b6 Ermal
	document.iform.radiuskey3.disabled = radius_endis;
466
	document.iform.radiuskey4.disabled = radius_endis;
467 856e58a6 Scott Ullrich
	document.iform.radacct_enable.disabled = radius_endis;
468 f5fa7d5e Ermal Luçi
	document.iform.peruserbw.disabled = endis;
469
	document.iform.bwdefaultdn.disabled = endis;
470
	document.iform.bwdefaultup.disabled = endis;
471 856e58a6 Scott Ullrich
	document.iform.reauthenticate.disabled = radius_endis;
472 7faeda46 Scott Ullrich
	document.iform.auth_method[0].disabled = endis;
473
	document.iform.auth_method[1].disabled = endis;
474
	document.iform.auth_method[2].disabled = endis;
475 b3765f4c Roberto Nunnari
	document.iform.radius_protocol[0].disabled = radius_endis;
476
	document.iform.radius_protocol[1].disabled = radius_endis;
477
	document.iform.radius_protocol[2].disabled = radius_endis;
478
	document.iform.radius_protocol[3].disabled = radius_endis;
479 0bd34ed6 Scott Ullrich
	document.iform.radmac_enable.disabled = radius_endis;
480 07bd3f83 Scott Ullrich
	document.iform.httpslogin_enable.disabled = endis;
481 d11c1f93 sullrich
	document.iform.radmac_format.disabled = radius_endis;
482 36f6ed35 bcyrill
	document.iform.httpsname.disabled = https_endis;
483
	document.iform.certref.disabled = https_endis;
484 b7b461fc derelict-pf
	document.iform.nohttpsforwards.disabled = https_endis;
485 07bd3f83 Scott Ullrich
	document.iform.logoutwin_enable.disabled = endis;
486 c980716e Scott Ullrich
	document.iform.nomacfilter.disabled = endis;
487 0bd34ed6 Scott Ullrich
	document.iform.noconcurrentlogins.disabled = endis;
488
	document.iform.radiusvendor.disabled = radius_endis;
489 2342bfb0 Ermal Lu?i
	document.iform.radiussession_timeout.disabled = radius_endis;
490 822b687b Ermal
	document.iform.radiussrcip_attribute.disabled = radius_endis;
491 07bd3f83 Scott Ullrich
	document.iform.htmlfile.disabled = endis;
492
	document.iform.errfile.disabled = endis;
493 5b87b24e Ermal
	document.iform.logoutfile.disabled = endis;
494 a5c0b6c7 Scott Ullrich
495 856e58a6 Scott Ullrich
	document.iform.radiusacctport.disabled = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
496 a5c0b6c7 Scott Ullrich
497 856e58a6 Scott Ullrich
	document.iform.radmac_secret.disabled = (radius_endis || !document.iform.radmac_enable.checked) && !enable_change;
498 a5c0b6c7 Scott Ullrich
499 88adfa28 Warren Baker
	var radacct_dis = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
500
	document.iform.reauthenticateacct[0].disabled = radacct_dis;
501
	document.iform.reauthenticateacct[1].disabled = radacct_dis;
502
	document.iform.reauthenticateacct[2].disabled = radacct_dis;
503 720498a0 Michael Newton
	document.iform.reverseacct.disabled = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
504 4cc94535 Michael Newton
	document.iform.radiusnasid.disabled = radius_endis;
505 5b237745 Scott Ullrich
}
506 73672832 Colin Fleming
//]]>
507 5b237745 Scott Ullrich
</script>
508 73672832 Colin Fleming
</head>
509 93588e1a Scott Dale
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
510 ccb55b27 Darren Embry
<?php include("fbegin.inc"); ?>
511 5b237745 Scott Ullrich
<?php if ($input_errors) print_input_errors($input_errors); ?>
512
<?php if ($savemsg) print_info_box($savemsg); ?>
513
<form action="services_captiveportal.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
514 73672832 Colin Fleming
<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captive portal">
515 9699028a Scott Ullrich
  <tr><td class="tabnavtbl">
516 64b85ffe Scott Ullrich
<?php
517
	$tab_array = array();
518 b4792bf8 Ermal
	$tab_array[] = array(gettext("Captive portal(s)"), true, "services_captiveportal.php?zone={$cpzone}");
519 ed8899b5 Renato Botelho
	$tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
520 b4792bf8 Ermal
	$tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
521 060bc78b Renato Botelho
	$tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
522 b4792bf8 Ermal
	$tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
523
	$tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
524 9592c132 Scott Ullrich
	display_top_tabs($tab_array, true);
525 0bd34ed6 Scott Ullrich
?>    </td></tr>
526 5b237745 Scott Ullrich
  <tr>
527 c980716e Scott Ullrich
  <td class="tabcont">
528 73672832 Colin Fleming
  <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main">
529 a5c0b6c7 Scott Ullrich
	<tr>
530 5b237745 Scott Ullrich
	  <td width="22%" valign="top" class="vtable">&nbsp;</td>
531
	  <td width="78%" class="vtable">
532 73672832 Colin Fleming
		<input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
533 6fde5a1e Carlos Eduardo Ramos
		<strong><?=gettext("Enable captive portal"); ?> </strong></td>
534 5b237745 Scott Ullrich
	</tr>
535 a5c0b6c7 Scott Ullrich
	<tr>
536 6fde5a1e Carlos Eduardo Ramos
	  <td width="22%" valign="top" class="vncellreq"><?=gettext("Interfaces"); ?></td>
537 5b237745 Scott Ullrich
	  <td width="78%" class="vtable">
538 73672832 Colin Fleming
		<select name="cinterface[]" multiple="multiple" size="<?php echo count($config['interfaces']); ?>" class="formselect" id="cinterface">
539 060bc78b Renato Botelho
		  <?php
540 fbb45bb0 Ermal Luçi
		  $interfaces = get_configured_interface_with_descr();
541 17103056 Ermal
		  $cselected = explode(",", $pconfig['cinterface']);
542 c980716e Scott Ullrich
		  foreach ($interfaces as $iface => $ifacename): ?>
543 73672832 Colin Fleming
			  <option value="<?=$iface;?>" <?php if (in_array($iface, $cselected)) echo "selected=\"selected\""; ?>>
544 17103056 Ermal
			  <?=htmlspecialchars($ifacename);?>
545
			  </option>
546 5b237745 Scott Ullrich
		  <?php endforeach; ?>
547 8cd558b6 ayvis
		</select> <br />
548 16457bdd Renato Botelho
		<span class="vexpl"><?=gettext("Select the interface(s) to enable for captive portal."); ?></span></td>
549 5b237745 Scott Ullrich
	</tr>
550 4362e48a Scott Ullrich
	<tr>
551 6fde5a1e Carlos Eduardo Ramos
	  <td valign="top" class="vncell"><?=gettext("Maximum concurrent connections"); ?></td>
552 4362e48a Scott Ullrich
	  <td class="vtable">
553 73672832 Colin Fleming
		<table cellpadding="0" cellspacing="0" summary="connections">
554 4362e48a Scott Ullrich
                 <tr>
555 73672832 Colin Fleming
           			<td><input name="maxprocperip" type="text" class="formfld unknown" id="maxprocperip" size="5" value="<?=htmlspecialchars($pconfig['maxprocperip']);?>" /> <?=gettext("per client IP address (0 = no limit)"); ?></td>
556 4362e48a Scott Ullrich
                 </tr>
557
               </table>
558 6fde5a1e Carlos Eduardo Ramos
<?=gettext("This setting limits the number of concurrent connections to the captive portal HTTP(S) server. This does not set how many users can be logged in " .
559
"to the captive portal, but rather how many users can load the portal page or authenticate at the same time! " .
560 4dc04853 Ermal
"Possible setting allowed is: minimum 4 connections per client IP address, with a total maximum of 100 connections."); ?></td>
561 4362e48a Scott Ullrich
	</tr>
562 5b237745 Scott Ullrich
	<tr>
563 6fde5a1e Carlos Eduardo Ramos
	  <td valign="top" class="vncell"><?=gettext("Idle timeout"); ?></td>
564 5b237745 Scott Ullrich
	  <td class="vtable">
565 73672832 Colin Fleming
		<input name="idletimeout" type="text" class="formfld unknown" id="idletimeout" size="6" value="<?=htmlspecialchars($pconfig['idletimeout']);?>" />
566 8cd558b6 ayvis
<?=gettext("minutes"); ?><br />
567 16457bdd Renato Botelho
<?=gettext("Clients will be disconnected after this amount of inactivity. They may log in again immediately, though. Leave this field blank for no idle timeout."); ?></td>
568 5b237745 Scott Ullrich
	</tr>
569 a5c0b6c7 Scott Ullrich
	<tr>
570 6fde5a1e Carlos Eduardo Ramos
	  <td width="22%" valign="top" class="vncell"><?=gettext("Hard timeout"); ?></td>
571 a5c0b6c7 Scott Ullrich
	  <td width="78%" class="vtable">
572 73672832 Colin Fleming
		<input name="timeout" type="text" class="formfld unknown" id="timeout" size="6" value="<?=htmlspecialchars($pconfig['timeout']);?>" />
573 8cd558b6 ayvis
		<?=gettext("minutes"); ?><br />
574 16457bdd Renato Botelho
	  <?=gettext("Clients will be disconnected after this amount of time, regardless of activity. They may log in again immediately, though. Leave this field blank for no hard timeout (not recommended unless an idle timeout is set)."); ?></td>
575 5b237745 Scott Ullrich
	</tr>
576 03552507 Erik Fonnesbeck
	<tr>
577 49f61a1c Erik Fonnesbeck
	  <td width="22%" valign="top" class="vncell"><?=gettext("Pass-through credits allowed per MAC address"); ?></td>
578 03552507 Erik Fonnesbeck
	  <td width="78%" class="vtable">
579 73672832 Colin Fleming
		<input name="freelogins_count" type="text" class="formfld unknown" id="freelogins_count" size="6" value="<?=htmlspecialchars($pconfig['freelogins_count']);?>" />
580 8cd558b6 ayvis
		<?=gettext("per client MAC address (0 or blank = none)"); ?><br />
581 03552507 Erik Fonnesbeck
		<?=gettext("This setting allows passing through the captive portal without authentication a limited number of times per MAC address. Once used up, the client can only log in with valid credentials until the waiting period specified below has expired. Recommended to set a hard timeout and/or idle timeout when using this for it to be effective."); ?></td>
582
	</tr>
583
	<tr>
584 49f61a1c Erik Fonnesbeck
	  <td width="22%" valign="top" class="vncell"><?=gettext("Waiting period to restore pass-through credits"); ?></td>
585 03552507 Erik Fonnesbeck
	  <td width="78%" class="vtable">
586 73672832 Colin Fleming
		<input name="freelogins_resettimeout" type="text" class="formfld unknown" id="freelogins_resettimeout" size="6" value="<?=htmlspecialchars($pconfig['freelogins_resettimeout']);?>" />
587 8cd558b6 ayvis
		<?=gettext("hours"); ?><br />
588 49f61a1c Erik Fonnesbeck
		<?=gettext("Clients will have their available pass-through credits restored to the original count after this amount of time since using the first one. This must be above 0 hours if pass-through credits are enabled."); ?></td>
589 03552507 Erik Fonnesbeck
	</tr>
590
	<tr>
591 49f61a1c Erik Fonnesbeck
	  <td width="22%" valign="top" class="vncell"><?=gettext("Reset waiting period on attempted access"); ?></td>
592 03552507 Erik Fonnesbeck
	  <td width="78%" class="vtable">
593 73672832 Colin Fleming
		<input name="freelogins_updatetimeouts" type="checkbox" class="formfld" id="freelogins_updatetimeouts" value="yes" <?php if($pconfig['freelogins_updatetimeouts']) echo "checked=\"checked\""; ?> />
594 8cd558b6 ayvis
		<strong><?=gettext("Enable waiting period reset on attempted access"); ?></strong><br />
595 49f61a1c Erik Fonnesbeck
		<?=gettext("If enabled, the waiting period is reset to the original duration if access is attempted when all pass-through credits have already been exhausted."); ?></td>
596 03552507 Erik Fonnesbeck
	</tr>
597 a5c0b6c7 Scott Ullrich
	<tr>
598 6fde5a1e Carlos Eduardo Ramos
	  <td width="22%" valign="top" class="vncell"><?=gettext("Logout popup window"); ?></td>
599 a5c0b6c7 Scott Ullrich
	  <td width="78%" class="vtable">
600 73672832 Colin Fleming
		<input name="logoutwin_enable" type="checkbox" class="formfld" id="logoutwin_enable" value="yes" <?php if($pconfig['logoutwin_enable']) echo "checked=\"checked\""; ?> />
601 8cd558b6 ayvis
		<strong><?=gettext("Enable logout popup window"); ?></strong><br />
602 16457bdd Renato Botelho
	  <?=gettext("If enabled, a popup window will appear when clients are allowed through the captive portal. This allows clients to explicitly disconnect themselves before the idle or hard timeout occurs."); ?></td>
603 5b237745 Scott Ullrich
	</tr>
604 a00e1d89 Scott Ullrich
	<tr>
605
      <td valign="top" class="vncell"><?=gettext("Pre-authentication redirect URL"); ?> </td>
606
      <td class="vtable">
607 73672832 Colin Fleming
        <input name="preauthurl" type="text" class="formfld url" id="preauthurl" size="60" value="<?=htmlspecialchars($pconfig['preauthurl']);?>" /><br />
608 060bc78b Renato Botelho
		<?php printf(gettext("Use this field to set \$PORTAL_REDIRURL\$ variable which can be accessed using your custom captive portal index.php page or error pages."));?>
609 a00e1d89 Scott Ullrich
	  </td>
610
	</tr>
611 5b237745 Scott Ullrich
	<tr>
612 ecc19349 Scott Ullrich
	  <td valign="top" class="vncell"><?=gettext("After authentication Redirection URL"); ?></td>
613 5b237745 Scott Ullrich
	  <td class="vtable">
614 73672832 Colin Fleming
		<input name="redirurl" type="text" class="formfld url" id="redirurl" size="60" value="<?=htmlspecialchars($pconfig['redirurl']);?>" />
615 8cd558b6 ayvis
		<br />
616 6fde5a1e Carlos Eduardo Ramos
<?=gettext("If you provide a URL here, clients will be redirected to that URL instead of the one they initially tried " .
617 16457bdd Renato Botelho
"to access after they've authenticated."); ?></td>
618 5b237745 Scott Ullrich
	</tr>
619 2f1548d6 Renato Botelho
	<tr>
620
		<td valign="top" class="vncell"><?=gettext("Blocked MAC address redirect URL"); ?> </td>
621
		<td class="vtable">
622 73672832 Colin Fleming
			<input name="blockedmacsurl" type="text" class="formfld url" id="blockedmacsurl" size="60" value="<?=htmlspecialchars($pconfig['blockedmacsurl']);?>" /><br />
623 2f1548d6 Renato Botelho
			<?php printf(gettext("If you provide a URL here, MAC addresses set to be blocked will be redirect to that URL when attempt to access anything."));?>
624
		</td>
625
	</tr>
626 5b237745 Scott Ullrich
	<tr>
627 6fde5a1e Carlos Eduardo Ramos
      <td valign="top" class="vncell"><?=gettext("Concurrent user logins"); ?></td>
628 0bd34ed6 Scott Ullrich
      <td class="vtable">
629 73672832 Colin Fleming
	<input name="noconcurrentlogins" type="checkbox" class="formfld" id="noconcurrentlogins" value="yes" <?php if ($pconfig['noconcurrentlogins']) echo "checked=\"checked\""; ?> />
630 8cd558b6 ayvis
	<strong><?=gettext("Disable concurrent logins"); ?></strong><br />
631 16457bdd Renato Botelho
	<?=gettext("If this option is set, only the most recent login per username will be active. Subsequent logins will cause machines previously logged in with the same username to be disconnected."); ?></td>
632 0bd34ed6 Scott Ullrich
	</tr>
633
	<tr>
634 6fde5a1e Carlos Eduardo Ramos
      <td valign="top" class="vncell"><?=gettext("MAC filtering"); ?> </td>
635 c980716e Scott Ullrich
      <td class="vtable">
636 73672832 Colin Fleming
        <input name="nomacfilter" type="checkbox" class="formfld" id="nomacfilter" value="yes" <?php if ($pconfig['nomacfilter']) echo "checked=\"checked\""; ?> />
637 8cd558b6 ayvis
        <strong><?=gettext("Disable MAC filtering"); ?></strong><br />
638 6fde5a1e Carlos Eduardo Ramos
    <?=gettext("If this option is set, no attempts will be made to ensure that the MAC address of clients stays the same while they're logged in." .
639 16457bdd Renato Botelho
    "This is required when the MAC address of the client cannot be determined (usually because there are routers between"); ?> <?php echo $g['product_name'] ?> <?=gettext("and the clients)."); ?>
640
    <?=gettext("If this is enabled, RADIUS MAC authentication cannot be used."); ?></td>
641 7e587bdb Scott Ullrich
	</tr>
642
	<tr>
643 6fde5a1e Carlos Eduardo Ramos
      <td valign="top" class="vncell"><?=gettext("Pass-through MAC Auto Entry"); ?></td>
644 6ce61a8f Ermal
      <td class="vtable">
645 73672832 Colin Fleming
        <input name="passthrumacadd" type="checkbox" class="formfld" id="passthrumacadd" value="yes" <?php if ($pconfig['passthrumacadd']) echo "checked=\"checked\""; ?> />
646 8cd558b6 ayvis
        <strong><?=gettext("Enable Pass-through MAC automatic additions"); ?></strong><br />
647 060bc78b Renato Botelho
    <?=gettext("If this option is set, a MAC passthrough entry is automatically added after the user has successfully authenticated. Users of that MAC address will never have to authenticate again."); ?>
648 ed8899b5 Renato Botelho
    <?=gettext("To remove the passthrough MAC entry you either have to log in and remove it manually from the"); ?> <a href="services_captiveportal_mac.php"><?=gettext("MAC tab"); ?></a> <?=gettext("or send a POST from another system to remove it."); ?>
649 16457bdd Renato Botelho
    <?=gettext("If this is enabled, RADIUS MAC authentication cannot be used. Also, the logout window will not be shown."); ?>
650 8cd558b6 ayvis
	<br /><br />
651 73672832 Colin Fleming
        <input name="passthrumacaddusername" type="checkbox" class="formfld" id="passthrumacaddusername" value="yes" <?php if ($pconfig['passthrumacaddusername']) echo "checked=\"checked\""; ?> />
652 8cd558b6 ayvis
        <strong><?=gettext("Enable Pass-through MAC automatic addition with username"); ?></strong><br />
653 16457bdd Renato Botelho
    <?=gettext("If this option is set, with the automatically MAC passthrough entry created the username, used during authentication, will be saved."); ?>
654 ed8899b5 Renato Botelho
    <?=gettext("To remove the passthrough MAC entry you either have to log in and remove it manually from the"); ?> <a href="services_captiveportal_mac.php"><?=gettext("MAC tab"); ?></a> <?=gettext("or send a POST from another system to remove it."); ?>
655 1c291e64 Ermal
	</td>
656 6ce61a8f Ermal
	</tr>
657
	<tr>
658 6fde5a1e Carlos Eduardo Ramos
      <td valign="top" class="vncell"><?=gettext("Per-user bandwidth restriction"); ?></td>
659 7e587bdb Scott Ullrich
      <td class="vtable">
660 73672832 Colin Fleming
        <input name="peruserbw" type="checkbox" class="formfld" id="peruserbw" value="yes" <?php if ($pconfig['peruserbw']) echo "checked=\"checked\""; ?> />
661 8cd558b6 ayvis
        <strong><?=gettext("Enable per-user bandwidth restriction"); ?></strong><br /><br />
662 73672832 Colin Fleming
        <table cellpadding="0" cellspacing="0" summary="bandwidth">
663 7e587bdb Scott Ullrich
        <tr>
664 6fde5a1e Carlos Eduardo Ramos
        <td><?=gettext("Default download"); ?></td>
665 73672832 Colin Fleming
        <td><input type="text" class="formfld unknown" name="bwdefaultdn" id="bwdefaultdn" size="10" value="<?=htmlspecialchars($pconfig['bwdefaultdn']);?>" /> <?=gettext("Kbit/s"); ?></td>
666 7e587bdb Scott Ullrich
        </tr>
667
        <tr>
668 6fde5a1e Carlos Eduardo Ramos
        <td><?=gettext("Default upload"); ?></td>
669 73672832 Colin Fleming
        <td><input type="text" class="formfld unknown" name="bwdefaultup" id="bwdefaultup" size="10" value="<?=htmlspecialchars($pconfig['bwdefaultup']);?>" /> <?=gettext("Kbit/s"); ?></td>
670 7e587bdb Scott Ullrich
        </tr></table>
671 8cd558b6 ayvis
        <br />
672 16457bdd Renato Botelho
        <?=gettext("If this option is set, the captive portal will restrict each user who logs in to the specified default bandwidth. RADIUS can override the default settings. Leave empty or set to 0 for no limit."); ?> </td>
673 7e587bdb Scott Ullrich
	</tr>
674 a5c0b6c7 Scott Ullrich
	<tr>
675 6fde5a1e Carlos Eduardo Ramos
	  <td width="22%" valign="top" class="vncell"><?=gettext("Authentication"); ?></td>
676 a5c0b6c7 Scott Ullrich
	  <td width="78%" class="vtable">
677 73672832 Colin Fleming
		<table cellpadding="0" cellspacing="0" summary="authentication">
678 c980716e Scott Ullrich
		<tr>
679 73672832 Colin Fleming
		  <td colspan="2"><input name="auth_method" type="radio" id="auth_method" value="none" onclick="enable_change(false)" <?php if($pconfig['auth_method']!="local" && $pconfig['auth_method']!="radius") echo "checked=\"checked\""; ?> />
680 6fde5a1e Carlos Eduardo Ramos
  <?=gettext("No Authentication"); ?></td>
681 a8cb0038 Renato Botelho
		</tr>
682 c980716e Scott Ullrich
		<tr>
683 73672832 Colin Fleming
		  <td colspan="2"><input name="auth_method" type="radio" id="auth_method" value="local" onclick="enable_change(false)" <?php if($pconfig['auth_method']=="local") echo "checked=\"checked\""; ?> />
684 58f963d0 Scott Ullrich
  <?=gettext("Local"); ?> <a href="system_usermanager.php"><?=gettext("User Manager"); ?></a> / <?=gettext("Vouchers"); ?></td>
685 a8cb0038 Renato Botelho
		</tr>
686 73672832 Colin Fleming
		<tr>
687 a8cb0038 Renato Botelho
		  <td>&nbsp;</td>
688
		  <td>&nbsp;</td>
689
		</tr>
690 c980716e Scott Ullrich
		<tr>
691 a8cb0038 Renato Botelho
		  <td>&nbsp;</td>
692 73672832 Colin Fleming
		  <td><input name="localauth_priv" type="checkbox" id="localauth_priv" value="yes" onclick="enable_change(false)" <?php if($pconfig['localauth_priv']=="yes") echo "checked=\"checked\""; ?> />
693 a8cb0038 Renato Botelho
  <?=gettext("Allow only users/groups with 'Captive portal login' privilege set"); ?></td>
694
		</tr><tr>
695 73672832 Colin Fleming
		  <td colspan="2"><input name="auth_method" type="radio" id="auth_method" value="radius" onclick="enable_change(false)" <?php if($pconfig['auth_method']=="radius") echo "checked=\"checked\""; ?> />
696 6fde5a1e Carlos Eduardo Ramos
  <?=gettext("RADIUS Authentication"); ?></td>
697 a8cb0038 Renato Botelho
		</tr><tr>
698 c980716e Scott Ullrich
		  <td>&nbsp;</td>
699
		  <td>&nbsp;</td>
700 a8cb0038 Renato Botelho
                </tr>
701 73672832 Colin Fleming
<tr>
702 6d5d9658 Chris Buechler
                  <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Protocol"); ?></td>
703 b3765f4c Roberto Nunnari
                  <td width="78%" class="vtable">
704 73672832 Colin Fleming
                    <table cellpadding="0" cellspacing="0" summary="radius">
705 b3765f4c Roberto Nunnari
                    <tr>
706 73672832 Colin Fleming
                      <td colspan="2"><input name="radius_protocol" type="radio" id="radius_protocol" value="PAP" onclick="enable_change(false)" <?php if($pconfig['auth_method']=="radius" && $pconfig['radius_protocol']!="CHAP_MD5" && $pconfig['radius_protocol']!="MSCHAPv1" && $pconfig['radius_protocol']!="MSCHAPv2") echo "checked=\"checked\""; ?> />
707 b3765f4c Roberto Nunnari
      <?=gettext("PAP"); ?></td>
708
                      </tr>
709
                    <tr>
710 73672832 Colin Fleming
                      <td colspan="2"><input name="radius_protocol" type="radio" id="radius_protocol" value="CHAP_MD5" onclick="enable_change(false)" <?php if($pconfig['auth_method']=="radius" && $pconfig['radius_protocol']=="CHAP_MD5") echo "checked=\"checked\""; ?> />
711 b3765f4c Roberto Nunnari
      <?=gettext("CHAP_MD5"); ?></td>
712
                      </tr>
713
                    <tr>
714 73672832 Colin Fleming
                      <td colspan="2"><input name="radius_protocol" type="radio" id="radius_protocol" value="MSCHAPv1" onclick="enable_change(false)" <?php if($pconfig['auth_method']=="radius" && $pconfig['radius_protocol']=="MSCHAPv1") echo "checked=\"checked\""; ?> />
715 b3765f4c Roberto Nunnari
      <?=gettext("MSCHAPv1"); ?></td>
716
                      </tr>
717
                    <tr>
718 73672832 Colin Fleming
                      <td colspan="2"><input name="radius_protocol" type="radio" id="radius_protocol" value="MSCHAPv2" onclick="enable_change(false)" <?php if($pconfig['auth_method']=="radius" && $pconfig['radius_protocol']=="MSCHAPv2") echo "checked=\"checked\""; ?> />
719 b3765f4c Roberto Nunnari
      <?=gettext("MSCHAPv2"); ?></td>
720
                      </tr><tr>
721
                      <td>&nbsp;</td>
722
                      <td>&nbsp;</td>
723
                      </tr>
724
                    </table>
725 73672832 Colin Fleming
                  </td>
726 b3765f4c Roberto Nunnari
                  </tr><tr>
727
                  <td>&nbsp;</td>
728
                  <td>&nbsp;</td>
729
                  </tr>
730
                </table>
731 73672832 Colin Fleming
		<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="primary athentication">
732 e12c63db Darren Embry
			<tr>
733
				<td colspan="2" valign="top" class="listtopic">Primary Authentication Source</td>
734
			</tr>
735
			<tr>
736
				<td colspan="2" valign="top" class="optsect_t2"><?=gettext("Primary RADIUS server"); ?></td>
737 0bd34ed6 Scott Ullrich
			</tr>
738
			<tr>
739 6fde5a1e Carlos Eduardo Ramos
				<td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
740 73672832 Colin Fleming
				<td class="vtable"><input name="radiusip" type="text" class="formfld unknown" id="radiusip" size="20" value="<?=htmlspecialchars($pconfig['radiusip']);?>" /><br />
741 16457bdd Renato Botelho
				<?=gettext("Enter the IP address of the RADIUS server which users of the captive portal have to authenticate against."); ?></td>
742 0bd34ed6 Scott Ullrich
			</tr>
743
			<tr>
744 6fde5a1e Carlos Eduardo Ramos
				<td class="vncell" valign="top"><?=gettext("Port"); ?></td>
745 73672832 Colin Fleming
				<td class="vtable"><input name="radiusport" type="text" class="formfld unknown" id="radiusport" size="5" value="<?=htmlspecialchars($pconfig['radiusport']);?>" /><br />
746 16457bdd Renato Botelho
				 <?=gettext("Leave this field blank to use the default port (1812)."); ?></td>
747 0bd34ed6 Scott Ullrich
			</tr>
748
			<tr>
749 6fde5a1e Carlos Eduardo Ramos
				<td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
750 73672832 Colin Fleming
				<td class="vtable"><input name="radiuskey" type="text" class="formfld unknown" id="radiuskey" size="16" value="<?=htmlspecialchars($pconfig['radiuskey']);?>" /><br />
751 16457bdd Renato Botelho
				<?=gettext("Leave this field blank to not use a RADIUS shared secret (not recommended)."); ?></td>
752 0bd34ed6 Scott Ullrich
			</tr>
753 a5c0b6c7 Scott Ullrich
			<tr>
754 0bd34ed6 Scott Ullrich
			  <td colspan="2" class="list" height="12"></td>
755
			</tr>
756
			<tr>
757 6fde5a1e Carlos Eduardo Ramos
				<td colspan="2" valign="top" class="optsect_t2"><?=gettext("Secondary RADIUS server"); ?></td>
758 0bd34ed6 Scott Ullrich
			</tr>
759
			<tr>
760 6fde5a1e Carlos Eduardo Ramos
				<td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
761 73672832 Colin Fleming
				<td class="vtable"><input name="radiusip2" type="text" class="formfld unknown" id="radiusip2" size="20" value="<?=htmlspecialchars($pconfig['radiusip2']);?>" /><br />
762 16457bdd Renato Botelho
				<?=gettext("If you have a second RADIUS server, you can activate it by entering its IP address here."); ?></td>
763 0bd34ed6 Scott Ullrich
			</tr>
764
			<tr>
765 6fde5a1e Carlos Eduardo Ramos
				<td class="vncell" valign="top"><?=gettext("Port"); ?></td>
766 73672832 Colin Fleming
				<td class="vtable"><input name="radiusport2" type="text" class="formfld unknown" id="radiusport2" size="5" value="<?=htmlspecialchars($pconfig['radiusport2']);?>" /></td>
767 0bd34ed6 Scott Ullrich
			</tr>
768
			<tr>
769 6fde5a1e Carlos Eduardo Ramos
				<td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
770 73672832 Colin Fleming
				<td class="vtable"><input name="radiuskey2" type="text" class="formfld unknown" id="radiuskey2" size="16" value="<?=htmlspecialchars($pconfig['radiuskey2']);?>" /></td>
771 0bd34ed6 Scott Ullrich
			</tr>
772
			<tr>
773
			  <td colspan="2" class="list" height="12"></td>
774
			</tr>
775 ebc0e4b6 Ermal
			<tr>
776 e12c63db Darren Embry
				<td colspan="2" valign="top" class="listtopic">Secondary Authentication Source</td>
777
			</tr>
778
			<tr>
779
				<td colspan="2" valign="top" class="optsect_t2"><?=gettext("Primary RADIUS server"); ?></td>
780 ebc0e4b6 Ermal
			</tr>
781
			<tr>
782
				<td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
783 73672832 Colin Fleming
				<td class="vtable"><input name="radiusip3" type="text" class="formfld unknown" id="radiusip3" size="20" value="<?=htmlspecialchars($pconfig['radiusip3']);?>" /><br />
784 d568e38d Scott Ullrich
				<?=gettext("If you have a third RADIUS server, you can activate it by entering its IP address here."); ?></td>
785 ebc0e4b6 Ermal
			</tr>
786
			<tr>
787
				<td class="vncell" valign="top"><?=gettext("Port"); ?></td>
788 73672832 Colin Fleming
				<td class="vtable"><input name="radiusport3" type="text" class="formfld unknown" id="radiusport3" size="5" value="<?=htmlspecialchars($pconfig['radiusport3']);?>" /></td>
789 ebc0e4b6 Ermal
			</tr>
790
			<tr>
791
				<td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
792 73672832 Colin Fleming
				<td class="vtable"><input name="radiuskey3" type="text" class="formfld unknown" id="radiuskey3" size="16" value="<?=htmlspecialchars($pconfig['radiuskey3']);?>" /></td>
793 ebc0e4b6 Ermal
			</tr>
794
			<tr>
795
			  <td colspan="2" class="list" height="12"></td>
796
			</tr>
797
			<tr>
798 e12c63db Darren Embry
				<td colspan="2" valign="top" class="optsect_t2"><?=gettext("Secondary RADIUS server"); ?></td>
799 ebc0e4b6 Ermal
			</tr>
800
			<tr>
801
				<td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
802 73672832 Colin Fleming
				<td class="vtable"><input name="radiusip4" type="text" class="formfld unknown" id="radiusip4" size="20" value="<?=htmlspecialchars($pconfig['radiusip4']);?>" /><br />
803 d568e38d Scott Ullrich
				<?=gettext("If you have a fourth RADIUS server, you can activate it by entering its IP address here."); ?></td>
804 ebc0e4b6 Ermal
			</tr>
805
			<tr>
806
				<td class="vncell" valign="top"><?=gettext("Port"); ?></td>
807 73672832 Colin Fleming
				<td class="vtable"><input name="radiusport4" type="text" class="formfld unknown" id="radiusport4" size="5" value="<?=htmlspecialchars($pconfig['radiusport4']);?>" /></td>
808 ebc0e4b6 Ermal
			</tr>
809
			<tr>
810
				<td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
811 73672832 Colin Fleming
				<td class="vtable"><input name="radiuskey4" type="text" class="formfld unknown" id="radiuskey4" size="16" value="<?=htmlspecialchars($pconfig['radiuskey4']);?>" /></td>
812 ebc0e4b6 Ermal
			</tr>
813
			<tr>
814
			  <td colspan="2" class="list" height="12"></td>
815
			</tr>
816 e12c63db Darren Embry
			<tr>
817 4cc94535 Michael Newton
				<td colspan="2" valign="top" class="listtopic"><?=gettext("Accounting"); ?></td>
818 856e58a6 Scott Ullrich
			</tr>
819
			<tr>
820
				<td class="vncell">&nbsp;</td>
821 73672832 Colin Fleming
				<td class="vtable"><input name="radacct_enable" type="checkbox" id="radacct_enable" value="yes" onclick="enable_change(false)" <?php if($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
822 8cd558b6 ayvis
				<strong><?=gettext("send RADIUS accounting packets"); ?></strong><br />
823 16457bdd Renato Botelho
				<?=gettext("If this is enabled, RADIUS accounting packets will be sent to the primary RADIUS server."); ?></td>
824 856e58a6 Scott Ullrich
			</tr>
825
			<tr>
826 6fde5a1e Carlos Eduardo Ramos
			  <td class="vncell" valign="top"><?=gettext("Accounting port"); ?></td>
827 73672832 Colin Fleming
			  <td class="vtable"><input name="radiusacctport" type="text" class="formfld unknown" id="radiusacctport" size="5" value="<?=htmlspecialchars($pconfig['radiusacctport']);?>" /><br />
828 16457bdd Renato Botelho
			  <?=gettext("Leave blank to use the default port (1813)."); ?></td>
829 856e58a6 Scott Ullrich
			  </tr>
830
			<tr>
831
			  <td colspan="2" class="list" height="12"></td>
832
			</tr>
833
			<tr>
834 6fde5a1e Carlos Eduardo Ramos
			  <td class="vncell" valign="top"><?=gettext("Accounting updates"); ?></td>
835 856e58a6 Scott Ullrich
			  <td class="vtable">
836 73672832 Colin Fleming
			  <input name="reauthenticateacct" type="radio" value="" <?php if(!$pconfig['reauthenticateacct']) echo "checked=\"checked\""; ?> /> <?=gettext("no accounting updates"); ?><br />
837
			  <input name="reauthenticateacct" type="radio" value="stopstart" <?php if($pconfig['reauthenticateacct'] == "stopstart") echo "checked=\"checked\""; ?> /> <?=gettext("stop/start accounting"); ?><br />
838
			  <input name="reauthenticateacct" type="radio" value="interimupdate" <?php if($pconfig['reauthenticateacct'] == "interimupdate") echo "checked=\"checked\""; ?> /> <?=gettext("interim update"); ?>
839 856e58a6 Scott Ullrich
			  </td>
840
			</tr>
841
			<tr>
842
			  <td colspan="2" class="list" height="12"></td>
843
			</tr>
844 0bd34ed6 Scott Ullrich
			<tr>
845 d7fe2e7a Michael Newton
				<td colspan="2" valign="top" class="listtopic"><?=gettext("RADIUS options"); ?></td>
846 0bd34ed6 Scott Ullrich
			</tr>
847
			<tr>
848 d7fe2e7a Michael Newton
				<td class="vncell"><?=gettext("Reauthentication"); ?></td>
849 73672832 Colin Fleming
				<td class="vtable"><input name="reauthenticate" type="checkbox" id="reauthenticate" value="yes" onclick="enable_change(false)" <?php if($pconfig['reauthenticate']) echo "checked=\"checked\""; ?> />
850 8cd558b6 ayvis
				<strong><?=gettext("Reauthenticate connected users every minute"); ?></strong><br />
851 d7fe2e7a Michael Newton
				<?=gettext("If reauthentication is enabled, Access-Requests will be sent to the RADIUS server for each user that is " .
852
				"logged in every minute. If an Access-Reject is received for a user, that user is disconnected from the captive portal immediately."); ?></td>
853
			</tr>
854
			<tr>
855
				<td class=""><?=gettext("RADIUS MAC authentication"); ?></td>
856
				<td class="">
857 73672832 Colin Fleming
				<input name="radmac_enable" type="checkbox" id="radmac_enable" value="yes" onclick="enable_change(false)" <?php if ($pconfig['radmac_enable']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Enable RADIUS MAC authentication"); ?></strong><br />
858 6fde5a1e Carlos Eduardo Ramos
				<?=gettext("If this option is enabled, the captive portal will try to authenticate users by sending their MAC address as the username and the password " .
859 16457bdd Renato Botelho
				"entered below to the RADIUS server."); ?></td>
860 0bd34ed6 Scott Ullrich
			</tr>
861
			<tr>
862 d7fe2e7a Michael Newton
				<td class="vncell"><?=gettext("MAC authentication secret"); ?></td>
863 73672832 Colin Fleming
				<td class="vtable"><input name="radmac_secret" type="text" class="formfld unknown" id="radmac_secret" size="16" value="<?=htmlspecialchars($pconfig['radmac_secret']);?>" /></td>
864 0bd34ed6 Scott Ullrich
			</tr>
865 822b687b Ermal
			<tr>
866 d440e668 Chris Buechler
				<td class="vncell" valign="top"><?=gettext("RADIUS NAS IP attribute"); ?></td>
867 720498a0 Michael Newton
				<td class="vtable">
868 822b687b Ermal
				<select name="radiussrcip_attribute" id="radiussrcip_attribute">
869
				<?php $iflist = get_configured_interface_with_descr();
870
					foreach ($iflist as $ifdesc => $ifdescr) {
871
						$ipaddr = get_interface_ip($ifdesc);
872
						if (is_ipaddr($ipaddr)) {
873
							$selected = "";
874 50779708 Ermal
							if ($ifdesc == $pconfig['radiussrcip_attribute'])
875 73672832 Colin Fleming
								$selected= "selected=\"selected\"";
876 822b687b Ermal
							echo "<option value='{$ifdesc}' {$selected}>{$ifdescr} - {$ipaddr}</option>\n";
877
						}
878
					}
879 34e9ca60 Ermal
					if (is_array($config['virtualip']['vip'])) {
880 060bc78b Renato Botelho
						foreach ($config['virtualip']['vip'] as $sn) {
881
							if ($sn['mode'] == "proxyarp" && $sn['type'] == "network") {
882
								$start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
883
								$end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
884
								$len = $end - $start;
885
886
								for ($i = 0; $i <= $len; $i++) {
887
									$snip = long2ip32($start+$i);
888
									echo "<option value='{$snip}' {$selected}>" . htmlspecialchars("{$sn['descr']} - {$snip}") . "></option>\n";
889 34e9ca60 Ermal
								}
890
							} else
891 060bc78b Renato Botelho
								echo "<option value='{$sn['subnet']}' {$selected}>" . htmlspecialchars("{$sn['descr']} - {$sn['subnet']}") . "></option>\n";
892 34e9ca60 Ermal
						}
893
					}
894 822b687b Ermal
				?>
895 8cd558b6 ayvis
				</select><br />
896 375828d9 Chris Buechler
				<?=gettext("Choose the IP to use for calling station attribute."); ?>
897 822b687b Ermal
				</td>
898
			</tr>
899
900 0bd34ed6 Scott Ullrich
			<tr>
901 6fde5a1e Carlos Eduardo Ramos
				<td class="vncell" valign="top"><?=gettext("Session-Timeout"); ?></td>
902 73672832 Colin Fleming
				<td class="vtable"><input name="radiussession_timeout" type="checkbox" id="radiussession_timeout" value="yes" <?php if ($pconfig['radiussession_timeout']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Use RADIUS Session-Timeout attributes"); ?></strong><br />
903 16457bdd Renato Botelho
				<?=gettext("When this is enabled, clients will be disconnected after the amount of time retrieved from the RADIUS Session-Timeout attribute."); ?></td>
904 0bd34ed6 Scott Ullrich
			</tr>
905 cf0542ac Scott Ullrich
906 0bd34ed6 Scott Ullrich
			<tr>
907 6fde5a1e Carlos Eduardo Ramos
				<td class="vncell" valign="top"><?=gettext("Type"); ?></td>
908 0bd34ed6 Scott Ullrich
				<td class="vtable"><select name="radiusvendor" id="radiusvendor">
909 eafb21b3 Phil Davis
				<option value="default"><?php echo gettext("default"); ?></option>
910 a5c0b6c7 Scott Ullrich
				<?php
911 0bd34ed6 Scott Ullrich
				$radiusvendors = array("cisco");
912
				foreach ($radiusvendors as $radiusvendor){
913
					if ($pconfig['radiusvendor'] == $radiusvendor)
914 73672832 Colin Fleming
						echo "<option selected=\"selected\" value=\"$radiusvendor\">$radiusvendor</option>\n";
915 0bd34ed6 Scott Ullrich
					else
916
						echo "<option value=\"$radiusvendor\">$radiusvendor</option>\n";
917
				}
918 8cd558b6 ayvis
				?></select><br />
919 3b7f0f53 Erik Fonnesbeck
				<?php printf(gettext("If RADIUS type is set to Cisco, in Access-Requests the value of Calling-Station-Id will be set to the client's IP address and " .
920
				"the Called-Station-Id to the client's MAC address. Default behavior is Calling-Station-Id = client's MAC address and Called-Station-Id = %s's WAN IP address."),
921 16457bdd Renato Botelho
					$g['product_name']);?></td>
922 0bd34ed6 Scott Ullrich
			</tr>
923 720498a0 Michael Newton
924
			<tr>
925
				<td class="vncell" valign="top"><?=gettext("Accounting Style"); ?></td>
926 73672832 Colin Fleming
				<td class="vtable"><input name="reverseacct" type="checkbox" id="reverseacct" value="yes" <?php if ($pconfig['reverseacct']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Invert Acct-Input-Octets and Acct-Output-Octets"); ?></strong><br />
927 720498a0 Michael Newton
				<?=gettext("When this is enabled, data counts for RADIUS accounting packets will be taken from the client perspective, not the NAS. Acct-Input-Octets will represent download, and Acct-Output-Octets will represent upload."); ?></td>
928
			</tr>
929 4cc94535 Michael Newton
930
			<tr>
931
				<td class="vncell" valign="top"><?=gettext("NAS Identifier"); ?></td>
932 73672832 Colin Fleming
				<td class="vtable"><input name="radiusnasid" type="text" maxlength="253" class="formfld unknown" id="radiusnasid" value="<?=htmlspecialchars($pconfig['radiusnasid']);?>" /><br />
933 89b1c40c Michael Newton
					<?=gettext("Specify a NAS identifier to override the default value") . " (" . php_uname("n") . ")"; ?></td>
934 4cc94535 Michael Newton
			</tr>
935 d7fe2e7a Michael Newton
			<tr>
936
				<td class="vncell" valign="top"><?=gettext("MAC address format"); ?></td>
937
				<td class="vtable">
938
					<select name="radmac_format" id="radmac_format">
939
						<option value="default"><?php echo gettext("default"); ?></option>
940
						<?php
941
						$macformats = array("singledash","ietf","cisco","unformatted");
942
						foreach ($macformats as $macformat) {
943
							if ($pconfig['radmac_format'] == $macformat) {
944 73672832 Colin Fleming
								echo "<option selected=\"selected\" value=\"$macformat\">",gettext($macformat),"</option>\n";
945 d7fe2e7a Michael Newton
							} else {
946
								echo "<option value=\"$macformat\">",gettext($macformat),"</option>\n";
947
							}
948
						}
949
						?>
950 8cd558b6 ayvis
					</select><br />
951 d7fe2e7a Michael Newton
					<?=gettext("This option changes the MAC address format used in the whole RADIUS system. Change this if you also"); ?>
952 8cd558b6 ayvis
					<?=gettext("need to change the username format for RADIUS MAC authentication."); ?><br />
953
					<?=gettext("default:"); ?> 00:11:22:33:44:55<br />
954
					<?=gettext("singledash:"); ?> 001122-334455<br />
955
					<?=gettext("ietf:"); ?> 00-11-22-33-44-55<br />
956
					<?=gettext("cisco:"); ?> 0011.2233.4455<br />
957 d7fe2e7a Michael Newton
					<?=gettext("unformatted:"); ?> 001122334455
958
				</td>
959
			</tr>
960 0bd34ed6 Scott Ullrich
		</table>
961 73672832 Colin Fleming
		</td>
962 5b237745 Scott Ullrich
	</tr>
963
	<tr>
964 d7fe2e7a Michael Newton
		<td valign="top" class="vncell"><?=gettext("HTTPS login"); ?></td>
965
		<td class="vtable">
966 73672832 Colin Fleming
			<input name="httpslogin_enable" type="checkbox" class="formfld" id="httpslogin_enable" value="yes" onclick="enable_change(false)" <?php if($pconfig['httpslogin_enable']) echo "checked=\"checked\""; ?> />
967 8cd558b6 ayvis
			<strong><?=gettext("Enable HTTPS login"); ?></strong><br />
968 d7fe2e7a Michael Newton
			<?=gettext("If enabled, the username and password will be transmitted over an HTTPS connection to protect against eavesdroppers. A server name and certificate must also be specified below."); ?></td>
969 36f6ed35 bcyrill
	</tr>
970 5b237745 Scott Ullrich
	<tr>
971 d7fe2e7a Michael Newton
		<td valign="top" class="vncell"><?=gettext("HTTPS server name"); ?> </td>
972
		<td class="vtable">
973 73672832 Colin Fleming
			<input name="httpsname" type="text" class="formfld unknown" id="httpsname" size="30" value="<?=htmlspecialchars($pconfig['httpsname']);?>" /><br />
974 d7fe2e7a Michael Newton
			<?php printf(gettext("This name will be used in the form action for the HTTPS POST and should match the Common Name (CN) in your certificate (otherwise, the client browser will most likely display a security warning). Make sure captive portal clients can resolve this name in DNS and verify on the client that the IP resolves to the correct interface IP on %s."), $g['product_name']);?> </td>
975 36f6ed35 bcyrill
	</tr>
976 adca02c4 bcyrill
	<tr id="ssl_opts">
977
		<td width="22%" valign="top" class="vncell"><?=gettext("SSL Certificate"); ?></td>
978
		<td width="78%" class="vtable">
979
			<?php if (count($a_cert)): ?>
980
			<select name="certref" id="certref" class="formselect">
981
				<?php
982
					foreach($a_cert as $cert):
983
						$selected = "";
984
						if ($pconfig['certref'] == $cert['refid'])
985 fbe0c5ff Colin Fleming
							$selected = " selected=\"selected\"";
986 adca02c4 bcyrill
				?>
987
				<option value="<?=$cert['refid'];?>"<?=$selected;?>><?=$cert['descr'];?></option>
988
			<?php endforeach; ?>
989
			</select>
990
			<?php else: ?>
991 8cd558b6 ayvis
				<b><?=gettext("No Certificates defined."); ?></b> <br />Create one under <a href="system_certmanager.php">System &gt; Cert Manager</a>.
992 adca02c4 bcyrill
			<?php endif; ?>
993
		</td>
994
	</tr>
995 b7b461fc derelict-pf
	<tr>
996
		<td valign="top" class="vncell"><?=gettext("Disable HTTPS forwards"); ?></td>
997
		<td class="vtable">
998 fbe0c5ff Colin Fleming
			<input name="nohttpsforwards" type="checkbox" class="formfld" id="nohttpsforwards" value="yes" <?php if ($pconfig['nohttpsforwards']) echo "checked=\"checked\""; ?> />
999
			<strong><?=gettext("Disable HTTPS forwards"); ?></strong><br/>
1000 b7b461fc derelict-pf
			<?=gettext("If this option is set, attempts to connect to SSL/HTTPS (Port 443) sites will not be forwarded to the captive portal.  This prevents certificate errors from being presented to the user even if HTTPS logins are enabled.  Users must attempt a connecton to an HTTP (Port 80) site to get forwarded to the captive portal. If HTTPS logins are enabled, the user will be redirected to the HTTPS login page."); ?></td>
1001
	</tr>
1002 a5c0b6c7 Scott Ullrich
	<tr>
1003 adca02c4 bcyrill
		<td width="22%" valign="top" class="vncell"><?=gettext("Portal page contents"); ?></td>
1004
		<td width="78%" class="vtable">
1005 73672832 Colin Fleming
		<?=$mandfldhtml;?><input type="file" name="htmlfile" class="formfld file" id="htmlfile" /><br />
1006 16f5fe76 Scott Ullrich
		<?php
1007
			list($host) = explode(":", $_SERVER['HTTP_HOST']);
1008 470d24a3 Darren Embry
			$zoneid = $pconfig['zoneid'] ? $pconfig['zoneid'] : 8000;
1009 36f6ed35 bcyrill
			if ($pconfig['httpslogin_enable']) {
1010 5b4ed0e1 Chris Buechler
				$port = $pconfig['listenporthttps'] ? $pconfig['listenporthttps'] : ($zoneid + 8001);
1011 470d24a3 Darren Embry
				$href = "https://{$host}:{$port}";
1012 16f5fe76 Scott Ullrich
			} else {
1013 5b4ed0e1 Chris Buechler
				$port = $pconfig['listenporthttp']  ? $pconfig['listenporthttp']  : ($zoneid + 8000);
1014 470d24a3 Darren Embry
				$href = "http://{$host}:{$port}";
1015 a5c0b6c7 Scott Ullrich
			}
1016 16f5fe76 Scott Ullrich
		?>
1017 b4792bf8 Ermal
		<?php if ($pconfig['page']['htmltext']): ?>
1018 73672832 Colin Fleming
		<a href="<?=$href?>" target="_blank"><?=gettext("View current page"); ?></a>
1019 aa87cf11 Renato Botelho
		<br />
1020
		<a href="?zone=<?=$cpzone?>&amp;act=gethtmlhtml" target="_blank"><?=gettext("Download current page"); ?></a>
1021 92603e27 Renato Botelho
		<br />
1022
		<a href="?zone=<?=$cpzone?>&amp;act=delhtmlhtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
1023
			<?=gettext("Restore default portal page"); ?>
1024
		</a>
1025 8cd558b6 ayvis
		  <br />
1026
		  <br />
1027 5b237745 Scott Ullrich
		<?php endif; ?>
1028 3b7f0f53 Erik Fonnesbeck
			<?php
1029 16457bdd Renato Botelho
				printf(
1030 3b7f0f53 Erik Fonnesbeck
					gettext('Upload an HTML/PHP file for the portal page here (leave blank to keep the current one). ' .
1031
							'Make sure to include a form (POST to %1$s) with a submit button (%2$s) and a hidden field with %3$s and %4$s. ' .
1032
							'Include the %5$s and %6$s and/or %7$s input fields if authentication is enabled, otherwise it will always fail.'),
1033 cfec8558 Renato Botelho
					'&quot;$PORTAL_ACTION$&quot;',
1034 16457bdd Renato Botelho
					"name=&quot;accept&quot;",
1035
					"name=&quot;redirurl&quot;",
1036 cfec8558 Renato Botelho
					'value=&quot;$PORTAL_REDIRURL$&quot;',
1037 16457bdd Renato Botelho
					"&quot;auth_user&quot;",
1038
					"&quot;auth_pass&quot;",
1039
					"&quot;auth_voucher&quot;");
1040
			?>
1041 8cd558b6 ayvis
			<?=gettext("Example code for the form:"); ?><br />
1042
		  <br />
1043
		  <tt>&lt;form method=&quot;post&quot; action=&quot;$PORTAL_ACTION$&quot;&gt;<br />
1044
		  &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_user&quot; type=&quot;text&quot;&gt;<br />
1045
		  &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_pass&quot; type=&quot;password&quot;&gt;<br />
1046
		  &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_voucher&quot; type=&quot;text&quot;&gt;<br />
1047
		  &nbsp;&nbsp;&nbsp;&lt;input name=&quot;redirurl&quot; type=&quot;hidden&quot; value=&quot;$PORTAL_REDIRURL$&quot;&gt;<br />
1048
&nbsp;&nbsp;&nbsp;&lt;input name=&quot;accept&quot; type=&quot;submit&quot; value=&quot;Continue&quot;&gt;<br />
1049 5b237745 Scott Ullrich
		  &lt;/form&gt;</tt></td>
1050
	</tr>
1051
	<tr>
1052 8cd558b6 ayvis
	  <td width="22%" valign="top" class="vncell"><?=gettext("Authentication"); ?><br />
1053
		<?=gettext("error page"); ?><br />
1054 6fde5a1e Carlos Eduardo Ramos
		<?=gettext("contents"); ?></td>
1055 5b237745 Scott Ullrich
	  <td class="vtable">
1056 73672832 Colin Fleming
		<input name="errfile" type="file" class="formfld file" id="errfile" /><br />
1057 b4792bf8 Ermal
		<?php if ($pconfig['page']['errtext']): ?>
1058 a636682d bcyrill
		<a href="?zone=<?=$cpzone?>&amp;act=viewerrhtml" target="_blank"><?=gettext("View current page"); ?></a>
1059 aa87cf11 Renato Botelho
		<br />
1060
		<a href="?zone=<?=$cpzone?>&amp;act=geterrhtml" target="_blank"><?=gettext("Download current page"); ?></a>
1061 92603e27 Renato Botelho
		<br />
1062
		<a href="?zone=<?=$cpzone?>&amp;act=delerrhtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
1063
			<?=gettext("Restore default error page"); ?>
1064
		</a>
1065 8cd558b6 ayvis
		  <br />
1066
		  <br />
1067 5b237745 Scott Ullrich
		<?php endif; ?>
1068 6fde5a1e Carlos Eduardo Ramos
<?=gettext("The contents of the HTML/PHP file that you upload here are displayed when an authentication error occurs. " .
1069 16457bdd Renato Botelho
"You may include"); ?> &quot;$PORTAL_MESSAGE$&quot;, <?=gettext("which will be replaced by the error or reply messages from the RADIUS server, if any."); ?></td>
1070 5b87b24e Ermal
	</tr>
1071
	<tr>
1072 8cd558b6 ayvis
	  <td width="22%" valign="top" class="vncell"><?=gettext("Logout"); ?><br />
1073
		<?=gettext("page"); ?><br />
1074 6fde5a1e Carlos Eduardo Ramos
		<?=gettext("contents"); ?></td>
1075 5b87b24e Ermal
	  <td class="vtable">
1076 73672832 Colin Fleming
		<input name="logoutfile" type="file" class="formfld file" id="logoutfile" /><br />
1077 b4792bf8 Ermal
		<?php if ($pconfig['page']['logouttext']): ?>
1078 a636682d bcyrill
		<a href="?zone=<?=$cpzone?>&amp;act=viewlogouthtml" target="_blank"><?=gettext("View current page"); ?></a>
1079 aa87cf11 Renato Botelho
		<br />
1080
		<a href="?zone=<?=$cpzone?>&amp;act=getlogouthtml" target="_blank"><?=gettext("Download current page"); ?></a>
1081 92603e27 Renato Botelho
		<br />
1082
		<a href="?zone=<?=$cpzone?>&amp;act=dellogouthtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
1083
			<?=gettext("Restore default logout page"); ?>
1084
		</a>
1085 8cd558b6 ayvis
		  <br />
1086
		  <br />
1087 5b87b24e Ermal
		<?php endif; ?>
1088 a36e98ff Erik Fonnesbeck
<?=gettext("The contents of the HTML/PHP file that you upload here are displayed on authentication success when the logout popup is enabled."); ?></td>
1089 5b237745 Scott Ullrich
	</tr>
1090 a5c0b6c7 Scott Ullrich
	<tr>
1091 5b237745 Scott Ullrich
	  <td width="22%" valign="top">&nbsp;</td>
1092 a5c0b6c7 Scott Ullrich
	  <td width="78%">
1093 73672832 Colin Fleming
		<?php echo "<input name='zone' id='zone' type='hidden' value='" . htmlspecialchars($cpzone) . "' />"; ?>
1094
		<input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
1095
		<a href="services_captiveportal_zones.php"><input name="Cancel" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" onclick="enable_change(true)" /></a>
1096 5b237745 Scott Ullrich
	  </td>
1097
	</tr>
1098 a5c0b6c7 Scott Ullrich
	<tr>
1099 5b237745 Scott Ullrich
	  <td width="22%" valign="top">&nbsp;</td>
1100 8cd558b6 ayvis
	  <td width="78%"><span class="vexpl"><span class="red"><strong><?=gettext("Note:"); ?><br />
1101 16457bdd Renato Botelho
		</strong></span><?=gettext("Changing any settings on this page will disconnect all clients! Don't forget to enable the DHCP server on your captive portal interface! Make sure that the default/maximum DHCP lease time is higher than the timeout entered on this page. Also, the DNS forwarder needs to be enabled for DNS lookups by unauthenticated clients to work."); ?> </span></td>
1102 5b237745 Scott Ullrich
	</tr>
1103
  </table>
1104
  </td>
1105
  </tr>
1106
  </table>
1107
</form>
1108 91f026b0 ayvis
<script type="text/javascript">
1109 73672832 Colin Fleming
//<![CDATA[
1110 5b237745 Scott Ullrich
enable_change(false);
1111 73672832 Colin Fleming
//]]>
1112 5b237745 Scott Ullrich
</script>
1113
<?php include("fend.inc"); ?>
1114 93588e1a Scott Dale
</body>
1115 b7b461fc derelict-pf
</html>