Project

General

Profile

Download (17.9 KB) Statistics
| Branch: | Tag: | Revision:
1 04ad7c7c Scott Ullrich
<?php
2 5b237745 Scott Ullrich
/*
3
	system.php
4
*/
5 54c605d4 Stephen Beaver
/* ====================================================================
6
 *	Copyright (c)  2004-2015  Electric Sheep Fencing, LLC. All rights reserved.
7 191cb31d Stephen Beaver
 *
8 cb41dd63 Renato Botelho
 *	Some or all of this file is based on the m0n0wall project which is
9
 *	Copyright (c)  2004 Manuel Kasper (BSD 2 clause)
10 54c605d4 Stephen Beaver
 *
11
 *	Redistribution and use in source and binary forms, with or without modification,
12
 *	are permitted provided that the following conditions are met:
13
 *
14
 *	1. Redistributions of source code must retain the above copyright notice,
15
 *		this list of conditions and the following disclaimer.
16
 *
17
 *	2. Redistributions in binary form must reproduce the above copyright
18
 *		notice, this list of conditions and the following disclaimer in
19
 *		the documentation and/or other materials provided with the
20
 *		distribution.
21
 *
22
 *	3. All advertising materials mentioning features or use of this software
23
 *		must display the following acknowledgment:
24
 *		"This product includes software developed by the pfSense Project
25
 *		 for use in the pfSense software distribution. (http://www.pfsense.org/).
26
 *
27
 *	4. The names "pfSense" and "pfSense Project" must not be used to
28
 *		 endorse or promote products derived from this software without
29
 *		 prior written permission. For written permission, please contact
30
 *		 coreteam@pfsense.org.
31
 *
32
 *	5. Products derived from this software may not be called "pfSense"
33
 *		nor may "pfSense" appear in their names without prior written
34
 *		permission of the Electric Sheep Fencing, LLC.
35
 *
36
 *	6. Redistributions of any form whatsoever must retain the following
37
 *		acknowledgment:
38
 *
39
 *	"This product includes software developed by the pfSense Project
40
 *	for use in the pfSense software distribution (http://www.pfsense.org/).
41
 *
42
 *	THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
43
 *	EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44
 *	IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
45
 *	PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
46
 *	ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47
 *	SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
48
 *	NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
49
 *	LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50
 *	HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
51
 *	STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
52
 *	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
53
 *	OF THE POSSIBILITY OF SUCH DAMAGE.
54
 *
55
 *	====================================================================
56
 *
57
 */
58 5b237745 Scott Ullrich
59 6b07c15a Matthew Grooms
##|+PRIV
60
##|*IDENT=page-system-generalsetup
61 5230f468 jim-p
##|*NAME=System: General Setup
62 6b07c15a Matthew Grooms
##|*DESCR=Allow access to the 'System: General Setup' page.
63
##|*MATCH=system.php*
64
##|-PRIV
65
66 5b237745 Scott Ullrich
require("guiconfig.inc");
67 7a927e67 Scott Ullrich
require_once("functions.inc");
68
require_once("filter.inc");
69
require_once("shaper.inc");
70 60ff91f1 Renato Botelho
require_once("system.inc");
71 5b237745 Scott Ullrich
72
$pconfig['hostname'] = $config['system']['hostname'];
73
$pconfig['domain'] = $config['system']['domain'];
74 2ee8dea1 Phil Davis
list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $config['system']['dnsserver'];
75 0d8a219e Scott Ullrich
76 d623f2da Seth Mos
$arr_gateways = return_gateways_array();
77
78 477db933 Jared Dillard
// set default colmns to two if unset
79 8f65151c Phil Davis
if (!isset($config['system']['webgui']['dashboardcolumns'])) {
80 477db933 Jared Dillard
	$config['system']['webgui']['dashboardcolumns'] = 2;
81
}
82
83 d623f2da Seth Mos
$pconfig['dns1gw'] = $config['system']['dns1gw'];
84
$pconfig['dns2gw'] = $config['system']['dns2gw'];
85
$pconfig['dns3gw'] = $config['system']['dns3gw'];
86
$pconfig['dns4gw'] = $config['system']['dns4gw'];
87 e180a6e3 Scott Ullrich
88 5b237745 Scott Ullrich
$pconfig['dnsallowoverride'] = isset($config['system']['dnsallowoverride']);
89
$pconfig['timezone'] = $config['system']['timezone'];
90
$pconfig['timeservers'] = $config['system']['timeservers'];
91 3e139f90 Vinicius Coque
$pconfig['language'] = $config['system']['language'];
92 a5995a8e Stephen Beaver
$pconfig['webguicss'] = $config['system']['webgui']['webguicss'];
93 3d29d2eb Jared Dillard
$pconfig['webguifixedmenu'] = $config['system']['webgui']['webguifixedmenu'];
94 477db933 Jared Dillard
$pconfig['dashboardcolumns'] = $config['system']['webgui']['dashboardcolumns'];
95 24f15b3a NOYB
$pconfig['webguileftcolumnhyper'] = isset($config['system']['webgui']['webguileftcolumnhyper']);
96 8ca95ed8 jim-p
$pconfig['dnslocalhost'] = isset($config['system']['dnslocalhost']);
97
98 2ee8dea1 Phil Davis
if (!$pconfig['timezone']) {
99 ecaca752 Renato Botelho
	if (isset($g['default_timezone']) && !empty($g['default_timezone'])) {
100
		$pconfig['timezone'] = $g['default_timezone'];
101
	} else {
102
		$pconfig['timezone'] = "Etc/UTC";
103
	}
104 2ee8dea1 Phil Davis
}
105 ecaca752 Renato Botelho
106 2ee8dea1 Phil Davis
if (!$pconfig['timeservers']) {
107 5b237745 Scott Ullrich
	$pconfig['timeservers'] = "pool.ntp.org";
108 2ee8dea1 Phil Davis
}
109 04ad7c7c Scott Ullrich
110 79eaddf4 Renato Botelho
$changedesc = gettext("System") . ": ";
111 62d01225 Bill Marquette
$changecount = 0;
112 417c6042 Bill Marquette
113 5b237745 Scott Ullrich
function is_timezone($elt) {
114
	return !preg_match("/\/$/", $elt);
115
}
116
117 2ee8dea1 Phil Davis
if ($pconfig['timezone'] <> $_POST['timezone']) {
118 744306c6 jim-p
	filter_pflog_start(true);
119 aa1ab1da Scott Ullrich
}
120
121 60ff91f1 Renato Botelho
$timezonelist = system_get_timezone_list();
122 5b237745 Scott Ullrich
123 77446beb Matthew Grooms
$multiwan = false;
124 7922db8a Seth Mos
$interfaces = get_configured_interface_list();
125 2ee8dea1 Phil Davis
foreach ($interfaces as $interface) {
126
	if (interface_has_gateway($interface)) {
127 77446beb Matthew Grooms
		$multiwan = true;
128 7922db8a Seth Mos
	}
129
}
130 77446beb Matthew Grooms
131 5b237745 Scott Ullrich
if ($_POST) {
132
133 c668c964 Scott Ullrich
	$changecount++;
134 1180e4f0 Sjon Hortensius
135 5b237745 Scott Ullrich
	unset($input_errors);
136
	$pconfig = $_POST;
137
138
	/* input validation */
139 cfbfd941 smos
	$reqdfields = explode(" ", "hostname domain");
140 2ee8dea1 Phil Davis
	$reqdfieldsn = array(gettext("Hostname"), gettext("Domain"));
141 04ad7c7c Scott Ullrich
142 1e9b4611 Renato Botelho
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
143 04ad7c7c Scott Ullrich
144 a5995a8e Stephen Beaver
	if ($_POST['webguicss']) {
145
		$config['system']['webgui']['webguicss'] = $_POST['webguicss'];
146
	} else {
147
		unset($config['system']['webgui']['webguicss']);
148
	}
149 8f65151c Phil Davis
150 ddb84143 Stephen Beaver
	if ($_POST['webguifixedmenu']) {
151
		$config['system']['webgui']['webguifixedmenu'] = $_POST['webguifixedmenu'];
152
	} else {
153
		unset($config['system']['webgui']['webguifixedmenu']);
154
	}
155 477db933 Jared Dillard
156
	if ($_POST['dashboardcolumns']) {
157
		$config['system']['webgui']['dashboardcolumns'] = $_POST['dashboardcolumns'];
158
	} else {
159
		unset($config['system']['webgui']['dashboardcolumns']);
160 8f65151c Phil Davis
	}
161
162 2d86ee95 Phil Davis
	if ($_POST['hostname']) {
163
		if (!is_hostname($_POST['hostname'])) {
164
			$input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'. It may not start or end with '-'.");
165
		} else {
166
			if (!is_unqualified_hostname($_POST['hostname'])) {
167
				$input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
168
			}
169
		}
170 5b237745 Scott Ullrich
	}
171
	if ($_POST['domain'] && !is_domain($_POST['domain'])) {
172 7465d12c Carlos Eduardo Ramos
		$input_errors[] = gettext("The domain may only contain the characters a-z, 0-9, '-' and '.'.");
173 5b237745 Scott Ullrich
	}
174 d623f2da Seth Mos
175 df4471e2 Phil Davis
	$ignore_posted_dnsgw = array();
176
177 2ee8dea1 Phil Davis
	for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
178 d623f2da Seth Mos
		$dnsname="dns{$dnscounter}";
179
		$dnsgwname="dns{$dnscounter}gw";
180
		if (($_POST[$dnsname] && !is_ipaddr($_POST[$dnsname]))) {
181 52acb1ff Phil Davis
			$input_errors[] = gettext("A valid IP address must be specified for DNS server $dnscounter.");
182
		} else {
183 2ee8dea1 Phil Davis
			if (($_POST[$dnsgwname] <> "") && ($_POST[$dnsgwname] <> "none")) {
184 52acb1ff Phil Davis
				// A real gateway has been selected.
185
				if (is_ipaddr($_POST[$dnsname])) {
186 2ee8dea1 Phil Davis
					if ((is_ipaddrv4($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
187 52acb1ff Phil Davis
						$input_errors[] = gettext("You can not specify IPv6 gateway '{$_POST[$dnsgwname]}' for IPv4 DNS server '{$_POST[$dnsname]}'");
188
					}
189 2ee8dea1 Phil Davis
					if ((is_ipaddrv6($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
190 52acb1ff Phil Davis
						$input_errors[] = gettext("You can not specify IPv4 gateway '{$_POST[$dnsgwname]}' for IPv6 DNS server '{$_POST[$dnsname]}'");
191
					}
192
				} else {
193 df4471e2 Phil Davis
					// The user selected a gateway but did not provide a DNS address. Be nice and set the gateway back to "none".
194
					$ignore_posted_dnsgw[$dnsgwname] = true;
195 52acb1ff Phil Davis
				}
196 13ea7caa smos
			}
197 d623f2da Seth Mos
		}
198 5b237745 Scott Ullrich
	}
199 d623f2da Seth Mos
200 985fc0fb Ermal Lu?i
	$direct_networks_list = explode(" ", filter_get_direct_networks_list());
201 c98d28e1 Seth Mos
	for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
202
		$dnsitem = "dns{$dnscounter}";
203 d623f2da Seth Mos
		$dnsgwitem = "dns{$dnscounter}gw";
204 c98d28e1 Seth Mos
		if ($_POST[$dnsgwitem]) {
205 2ee8dea1 Phil Davis
			if (interface_has_gateway($_POST[$dnsgwitem])) {
206
				foreach ($direct_networks_list as $direct_network) {
207
					if (ip_in_subnet($_POST[$dnsitem], $direct_network)) {
208
						$input_errors[] = sprintf(gettext("You can not assign a gateway to DNS '%s' server which is on a directly connected network."), $_POST[$dnsitem]);
209 c98d28e1 Seth Mos
					}
210
				}
211
			}
212
		}
213
	}
214
215 8adb814b David P Hilton
	# it's easy to have a little too much whitespace in the field, clean it up for the user before processing.
216
	$_POST['timeservers'] = preg_replace('/[[:blank:]]+/', ' ', $_POST['timeservers']);
217
	$_POST['timeservers'] = trim($_POST['timeservers']);
218 5b237745 Scott Ullrich
	foreach (explode(' ', $_POST['timeservers']) as $ts) {
219
		if (!is_domain($ts)) {
220 7465d12c Carlos Eduardo Ramos
			$input_errors[] = gettext("A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'.");
221 5b237745 Scott Ullrich
		}
222
	}
223
224
	if (!$input_errors) {
225 f1a34790 N0YB
		update_if_changed("hostname", $config['system']['hostname'], $_POST['hostname']);
226
		update_if_changed("domain", $config['system']['domain'], $_POST['domain']);
227 9eab73da Bill Marquette
		update_if_changed("timezone", $config['system']['timezone'], $_POST['timezone']);
228
		update_if_changed("NTP servers", $config['system']['timeservers'], strtolower($_POST['timeservers']));
229 04ad7c7c Scott Ullrich
230 2ee8dea1 Phil Davis
		if ($_POST['language'] && $_POST['language'] != $config['system']['language']) {
231 3e139f90 Vinicius Coque
			$config['system']['language'] = $_POST['language'];
232
			set_language($config['system']['language']);
233
		}
234
235 24f15b3a NOYB
		unset($config['system']['webgui']['webguileftcolumnhyper']);
236
		$config['system']['webgui']['webguileftcolumnhyper'] = $_POST['webguileftcolumnhyper'] ? true : false;
237
238 4fbf63aa Bill Marquette
		/* XXX - billm: these still need updating after figuring out how to check if they actually changed */
239 52acb1ff Phil Davis
		$olddnsservers = $config['system']['dnsserver'];
240 5b237745 Scott Ullrich
		unset($config['system']['dnsserver']);
241 2ee8dea1 Phil Davis
		if ($_POST['dns1']) {
242 5b237745 Scott Ullrich
			$config['system']['dnsserver'][] = $_POST['dns1'];
243 2ee8dea1 Phil Davis
		}
244
		if ($_POST['dns2']) {
245 5b237745 Scott Ullrich
			$config['system']['dnsserver'][] = $_POST['dns2'];
246 2ee8dea1 Phil Davis
		}
247
		if ($_POST['dns3']) {
248 93e0800d Scott Ullrich
			$config['system']['dnsserver'][] = $_POST['dns3'];
249 2ee8dea1 Phil Davis
		}
250
		if ($_POST['dns4']) {
251 93e0800d Scott Ullrich
			$config['system']['dnsserver'][] = $_POST['dns4'];
252 2ee8dea1 Phil Davis
		}
253 04ad7c7c Scott Ullrich
254 07bd3f83 Scott Ullrich
		$olddnsallowoverride = $config['system']['dnsallowoverride'];
255 20b90e0a Scott Ullrich
256 0d8a219e Scott Ullrich
		unset($config['system']['dnsallowoverride']);
257 5b237745 Scott Ullrich
		$config['system']['dnsallowoverride'] = $_POST['dnsallowoverride'] ? true : false;
258 e180a6e3 Scott Ullrich
259 2ee8dea1 Phil Davis
		if ($_POST['dnslocalhost'] == "yes") {
260 8ca95ed8 jim-p
			$config['system']['dnslocalhost'] = true;
261 2ee8dea1 Phil Davis
		} else {
262 8ca95ed8 jim-p
			unset($config['system']['dnslocalhost']);
263 2ee8dea1 Phil Davis
		}
264 8ca95ed8 jim-p
265 e180a6e3 Scott Ullrich
		/* which interface should the dns servers resolve through? */
266 df4471e2 Phil Davis
		$outdnscounter = 0;
267 d623f2da Seth Mos
		for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
268
			$dnsname="dns{$dnscounter}";
269
			$dnsgwname="dns{$dnscounter}gw";
270 52acb1ff Phil Davis
			$olddnsgwname = $config['system'][$dnsgwname];
271 df4471e2 Phil Davis
272 2ee8dea1 Phil Davis
			if ($ignore_posted_dnsgw[$dnsgwname]) {
273 df4471e2 Phil Davis
				$thisdnsgwname = "none";
274 2ee8dea1 Phil Davis
			} else {
275 df4471e2 Phil Davis
				$thisdnsgwname = $pconfig[$dnsgwname];
276 2ee8dea1 Phil Davis
			}
277 df4471e2 Phil Davis
278
			// "Blank" out the settings for this index, then we set them below using the "outdnscounter" index.
279
			$config['system'][$dnsgwname] = "none";
280
			$pconfig[$dnsgwname] = "none";
281
			$pconfig[$dnsname] = "";
282
283
			if ($_POST[$dnsname]) {
284
				// Only the non-blank DNS servers were put into the config above.
285
				// So we similarly only add the corresponding gateways sequentially to the config (and to pconfig), as we find non-blank DNS servers.
286
				// This keeps the DNS server IP and corresponding gateway "lined up" when the user blanks out a DNS server IP in the middle of the list.
287
				$outdnscounter++;
288
				$outdnsname="dns{$outdnscounter}";
289
				$outdnsgwname="dns{$outdnscounter}gw";
290
				$pconfig[$outdnsname] = $_POST[$dnsname];
291 2ee8dea1 Phil Davis
				if ($_POST[$dnsgwname]) {
292 df4471e2 Phil Davis
					$config['system'][$outdnsgwname] = $thisdnsgwname;
293
					$pconfig[$outdnsgwname] = $thisdnsgwname;
294
				} else {
295
					// Note: when no DNS GW name is chosen, the entry is set to "none", so actually this case never happens.
296
					unset($config['system'][$outdnsgwname]);
297
					$pconfig[$outdnsgwname] = "";
298
				}
299 d623f2da Seth Mos
			}
300 df4471e2 Phil Davis
			if (($olddnsgwname != "") && ($olddnsgwname != "none") && (($olddnsgwname != $thisdnsgwname) || ($olddnsservers[$dnscounter-1] != $_POST[$dnsname]))) {
301 52acb1ff Phil Davis
				// A previous DNS GW name was specified. It has now gone or changed, or the DNS server address has changed.
302
				// Remove the route. Later calls will add the correct new route if needed.
303 2ee8dea1 Phil Davis
				if (is_ipaddrv4($olddnsservers[$dnscounter-1])) {
304 52acb1ff Phil Davis
					mwexec("/sbin/route delete " . escapeshellarg($olddnsservers[$dnscounter-1]));
305 312c32c9 Renato Botelho
				} else if (is_ipaddrv6($olddnsservers[$dnscounter-1])) {
306
					mwexec("/sbin/route delete -inet6 " . escapeshellarg($olddnsservers[$dnscounter-1]));
307 2ee8dea1 Phil Davis
				}
308 52acb1ff Phil Davis
			}
309 d623f2da Seth Mos
		}
310 04ad7c7c Scott Ullrich
311 2ee8dea1 Phil Davis
		if ($changecount > 0) {
312 62d01225 Bill Marquette
			write_config($changedesc);
313 2ee8dea1 Phil Davis
		}
314 04ad7c7c Scott Ullrich
315 5b237745 Scott Ullrich
		$retval = 0;
316 3cfdba5f Scott Ullrich
		$retval = system_hostname_configure();
317
		$retval |= system_hosts_generate();
318
		$retval |= system_resolvconf_generate();
319 2ee8dea1 Phil Davis
		if (isset($config['dnsmasq']['enable'])) {
320 1e2c8821 Warren Baker
			$retval |= services_dnsmasq_configure();
321 2ee8dea1 Phil Davis
		} elseif (isset($config['unbound']['enable'])) {
322 1e2c8821 Warren Baker
			$retval |= services_unbound_configure();
323 2ee8dea1 Phil Davis
		}
324 3cfdba5f Scott Ullrich
		$retval |= system_timezone_configure();
325
		$retval |= system_ntp_configure();
326
327 2ee8dea1 Phil Davis
		if ($olddnsallowoverride != $config['system']['dnsallowoverride']) {
328 b8292903 Ermal
			$retval |= send_event("service reload dns");
329 2ee8dea1 Phil Davis
		}
330 3cfdba5f Scott Ullrich
331 e7d967d8 Scott Ullrich
		// Reload the filter - plugins might need to be run.
332 0027de0a Ermal Lu?i
		$retval |= filter_configure();
333 1180e4f0 Sjon Hortensius
334 5b237745 Scott Ullrich
		$savemsg = get_std_save_message($retval);
335
	}
336 df4471e2 Phil Davis
337
	unset($ignore_posted_dnsgw);
338 5b237745 Scott Ullrich
}
339 4df96eff Scott Ullrich
340 2ee8dea1 Phil Davis
$pgtitle = array(gettext("System"), gettext("General Setup"));
341 4df96eff Scott Ullrich
include("head.inc");
342
343 8f65151c Phil Davis
if ($input_errors) {
344 41ea4cf3 Sjon Hortensius
	print_input_errors($input_errors);
345 8f65151c Phil Davis
}
346 ddb84143 Stephen Beaver
347 8f65151c Phil Davis
if ($savemsg) {
348 1f70d78c NewEraCracker
	print_info_box($savemsg, 'success');
349 8f65151c Phil Davis
}
350 5b237745 Scott Ullrich
?>
351 41ea4cf3 Sjon Hortensius
<div id="container">
352 b40bcb23 Sjon Hortensius
<?php
353 1180e4f0 Sjon Hortensius
354 b40bcb23 Sjon Hortensius
$form = new Form;
355 a32c0623 Sjon Hortensius
$section = new Form_Section('System');
356
$section->addInput(new Form_Input(
357 a97531c5 Sjon Hortensius
	'hostname',
358 a32c0623 Sjon Hortensius
	'Hostname',
359
	'text',
360
	$pconfig['hostname'],
361
	['placeholder' => 'pfSense']
362
))->setHelp('Name of the firewall host, without domain part');
363
$section->addInput(new Form_Input(
364 a97531c5 Sjon Hortensius
	'domain',
365 a32c0623 Sjon Hortensius
	'Domain',
366
	'text',
367
	$pconfig['domain'],
368
	['placeholder' => 'mycorp.com, home, office, private, etc.']
369
))->setHelp('Do not use \'local\' as a domain name. It will cause local '.
370
	'hosts running mDNS (avahi, bonjour, etc.) to be unable to resolve '.
371
	'local hosts not running mDNS.');
372 b40bcb23 Sjon Hortensius
$form->add($section);
373
374 a005a836 Sjon Hortensius
$section = new Form_Section('DNS server settings');
375 b40bcb23 Sjon Hortensius
376 8f65151c Phil Davis
for ($i=1; $i<5; $i++) {
377 54c605d4 Stephen Beaver
//	if (!isset($pconfig['dns'.$i]))
378
//		continue;
379
380
	$group = new Form_Group('DNS Server ' . $i);
381
382
	$group->add(new Form_Input(
383 c52e1c1f Stephen Beaver
		'dns' . $i,
384 54c605d4 Stephen Beaver
		'DNS Server',
385
		'text',
386 c52e1c1f Stephen Beaver
		$pconfig['dns'. $i]
387 54c605d4 Stephen Beaver
	))->setHelp(($i == 4) ? 'Address':null);
388 b40bcb23 Sjon Hortensius
389
	$help = "Enter IP addresses to be used by the system for DNS resolution. " .
390
		"These are also used for the DHCP service, DNS forwarder and for PPTP VPN clients.";
391
392 54c605d4 Stephen Beaver
	if ($multiwan)	{
393 b40bcb23 Sjon Hortensius
		$options = array('none' => 'none');
394
395 8f65151c Phil Davis
		foreach ($arr_gateways as $gwname => $gwitem) {
396
			if ((is_ipaddrv4(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv6($gwitem['gateway'])))) {
397 b40bcb23 Sjon Hortensius
				continue;
398
			}
399 54c605d4 Stephen Beaver
400 8f65151c Phil Davis
			if ((is_ipaddrv6(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv4($gwitem['gateway'])))) {
401 b40bcb23 Sjon Hortensius
				continue;
402
			}
403 1180e4f0 Sjon Hortensius
404 b40bcb23 Sjon Hortensius
			$options[$gwname] = $gwname.' - '.$gwitem['friendlyiface'].' - '.$gwitem['gateway'];
405
		}
406 1180e4f0 Sjon Hortensius
407 a97531c5 Sjon Hortensius
		$group->add(new Form_Select(
408 c52e1c1f Stephen Beaver
			'dns' . $i . 'gw',
409 e4dd8be4 NOYB
			'Gateway',
410 c52e1c1f Stephen Beaver
			$pconfig['dns' . $i . 'gw'],
411 a97531c5 Sjon Hortensius
			$options
412 54c605d4 Stephen Beaver
		))->setHelp(($i == 4) ? 'Gateway':null);;
413 1180e4f0 Sjon Hortensius
414 b40bcb23 Sjon Hortensius
		$help .= '<br/>'. "In addition, optionally select the gateway for each DNS server. " .
415
			"When using multiple WAN connections there should be at least one unique DNS server per gateway.";
416
	}
417 1180e4f0 Sjon Hortensius
418 8f65151c Phil Davis
	if ($i == 4) {
419 54c605d4 Stephen Beaver
		$group->setHelp($help);
420 8f65151c Phil Davis
	}
421 54c605d4 Stephen Beaver
422 b40bcb23 Sjon Hortensius
	$section->add($group);
423
}
424 1180e4f0 Sjon Hortensius
425 a005a836 Sjon Hortensius
$section->addInput(new Form_Checkbox(
426 a97531c5 Sjon Hortensius
	'dnsallowoverride',
427 b40bcb23 Sjon Hortensius
	'DNS server override',
428
	'Allow DNS server list to be overridden by DHCP/PPP on WAN',
429
	$pconfig['dnsallowoverride']
430 e4dd8be4 NOYB
))->setHelp(sprintf(gettext('If this option is set, %s will use DNS servers '.
431 a32c0623 Sjon Hortensius
	'assigned by a DHCP/PPP server on WAN for its own purposes (including '.
432
	'the DNS forwarder). However, they will not be assigned to DHCP and PPTP '.
433
	'VPN clients.'), $g['product_name']));
434 b40bcb23 Sjon Hortensius
435 a005a836 Sjon Hortensius
$section->addInput(new Form_Checkbox(
436 a97531c5 Sjon Hortensius
	'dnslocalhost',
437 b40bcb23 Sjon Hortensius
	'Disable DNS forwarder',
438
	'Do not use the DNS Forwarder as a DNS server for the firewall',
439
	$pconfig['dnslocalhost']
440 e4dd8be4 NOYB
))->setHelp('By default localhost (127.0.0.1) will be used as the first DNS '.
441 a32c0623 Sjon Hortensius
	'server where the DNS Forwarder or DNS Resolver is enabled and set to '.
442 e4dd8be4 NOYB
	'listen on Localhost, so system can use the local DNS service to perform '.
443 a32c0623 Sjon Hortensius
	'lookups. Checking this box omits localhost from the list of DNS servers.');
444 b40bcb23 Sjon Hortensius
445
$form->add($section);
446
447 a005a836 Sjon Hortensius
$section = new Form_Section('Localization');
448
$section->addInput(new Form_Select(
449 a97531c5 Sjon Hortensius
	'timezone',
450 a32c0623 Sjon Hortensius
	'Timezone',
451
	$pconfig['timezone'],
452 64c3b4cd sbeaver
	array_combine($timezonelist, $timezonelist)
453 a32c0623 Sjon Hortensius
))->setHelp('Select the location closest to you');
454 a005a836 Sjon Hortensius
$section->addInput(new Form_Input(
455 a97531c5 Sjon Hortensius
	'timeservers',
456 a32c0623 Sjon Hortensius
	'Timeservers',
457
	'text',
458
	$pconfig['timeservers']
459
))->setHelp('Use a space to separate multiple hosts (only one required). '.
460
	'Remember to set up at least one DNS server if you enter a host name here!');
461 a005a836 Sjon Hortensius
$section->addInput(new Form_Select(
462 a97531c5 Sjon Hortensius
	'language',
463 a32c0623 Sjon Hortensius
	'Language',
464
	$pconfig['language'],
465
	get_locale_list()
466
))->setHelp('Choose a language for the webConfigurator');
467 b40bcb23 Sjon Hortensius
468
$form->add($section);
469
470 a5995a8e Stephen Beaver
$csslist = array();
471 7a2cec8f Stephen Beaver
$css = glob("/usr/local/www/bootstrap/css/*.css");
472 a5995a8e Stephen Beaver
foreach ($css as $file) {
473
	$file = basename($file);
474 8f65151c Phil Davis
	if (substr($file, 0, 9) !== 'bootstrap') {
475 a5995a8e Stephen Beaver
		$csslist[$file] = pathinfo($file, PATHINFO_FILENAME);
476
	}
477
}
478
479 7aaa0663 Stephen Beaver
asort($csslist);
480
481 f0a9dec4 Phil Davis
if (!isset($pconfig['webguicss']) || !isset($csslist[$pconfig['webguicss']])) {
482 c040eeda Phil Davis
	$pconfig['webguicss'] = "pfSense.css";
483
}
484
485 477db933 Jared Dillard
$section = new Form_Section('Web Configurator');
486 a5995a8e Stephen Beaver
487
$section->addInput(new Form_Select(
488
	'webguicss',
489
	'Theme',
490
	$pconfig['webguicss'],
491
	$csslist
492 192f3fd5 Jared Dillard
))->setHelp('Choose an alternative css file (if installed) to change the appearance of the Web configurator. css files are located in /usr/local/www/bootstrap/css');
493 3d29d2eb Jared Dillard
494 ddb84143 Stephen Beaver
$section->addInput(new Form_Select(
495
	'webguifixedmenu',
496 477db933 Jared Dillard
	'Top Navigation',
497 e82778da Stephen Beaver
	$pconfig['webguifixedmenu'],
498
	["" => "Scrolls with page", "fixed" => "Fixed (Remains visible at top of page)"]
499 b21e4009 Jared Dillard
))->setHelp("The fixed option is intended for large screens only.");
500 3d29d2eb Jared Dillard
501 477db933 Jared Dillard
$section->addInput(new Form_Input(
502
	'dashboardcolumns',
503
	'Dashboard Columns',
504 9911c685 Stephen Beaver
	'number',
505
	$pconfig['dashboardcolumns'],
506
	[min => 1, max => 4]
507
))->setHelp('<span class="badge" title="This feature is in BETA">BETA</span>');
508 477db933 Jared Dillard
509 24f15b3a NOYB
$section->addInput(new Form_Checkbox(
510
	'webguileftcolumnhyper',
511
	'Left Column Labels',
512
	'Active',
513
	$pconfig['webguileftcolumnhyper']
514 8c186a5a Stephen Beaver
))->setHelp('If selected, clicking a label in the left column will select/toggle the first item of the group.<br /><span class="badge" title="This feature is in BETA">BETA</span>');
515 24f15b3a NOYB
516 a5995a8e Stephen Beaver
$form->add($section);
517
518 b40bcb23 Sjon Hortensius
print $form;
519 8c4ef875 NOYB
?>
520
</div>
521
<?php
522 60ff91f1 Renato Botelho
include("foot.inc");
523 8c4ef875 NOYB
?>