Project

General

Profile

Download (19.5 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 c05363c8 NOYB
$pconfig['dashboardavailablewidgetspanel'] = isset($config['system']['webgui']['dashboardavailablewidgetspanel']);
97
$pconfig['systemlogsfilterpanel'] = isset($config['system']['webgui']['systemlogsfilterpanel']);
98
$pconfig['systemlogsmanagelogpanel'] = isset($config['system']['webgui']['systemlogsmanagelogpanel']);
99 8ca95ed8 jim-p
$pconfig['dnslocalhost'] = isset($config['system']['dnslocalhost']);
100
101 2ee8dea1 Phil Davis
if (!$pconfig['timezone']) {
102 ecaca752 Renato Botelho
	if (isset($g['default_timezone']) && !empty($g['default_timezone'])) {
103
		$pconfig['timezone'] = $g['default_timezone'];
104
	} else {
105
		$pconfig['timezone'] = "Etc/UTC";
106
	}
107 2ee8dea1 Phil Davis
}
108 ecaca752 Renato Botelho
109 2ee8dea1 Phil Davis
if (!$pconfig['timeservers']) {
110 5b237745 Scott Ullrich
	$pconfig['timeservers'] = "pool.ntp.org";
111 2ee8dea1 Phil Davis
}
112 04ad7c7c Scott Ullrich
113 79eaddf4 Renato Botelho
$changedesc = gettext("System") . ": ";
114 62d01225 Bill Marquette
$changecount = 0;
115 417c6042 Bill Marquette
116 5b237745 Scott Ullrich
function is_timezone($elt) {
117
	return !preg_match("/\/$/", $elt);
118
}
119
120 2ee8dea1 Phil Davis
if ($pconfig['timezone'] <> $_POST['timezone']) {
121 744306c6 jim-p
	filter_pflog_start(true);
122 aa1ab1da Scott Ullrich
}
123
124 60ff91f1 Renato Botelho
$timezonelist = system_get_timezone_list();
125 5b237745 Scott Ullrich
126 77446beb Matthew Grooms
$multiwan = false;
127 7922db8a Seth Mos
$interfaces = get_configured_interface_list();
128 2ee8dea1 Phil Davis
foreach ($interfaces as $interface) {
129
	if (interface_has_gateway($interface)) {
130 77446beb Matthew Grooms
		$multiwan = true;
131 7922db8a Seth Mos
	}
132
}
133 77446beb Matthew Grooms
134 5b237745 Scott Ullrich
if ($_POST) {
135
136 c668c964 Scott Ullrich
	$changecount++;
137 1180e4f0 Sjon Hortensius
138 5b237745 Scott Ullrich
	unset($input_errors);
139
	$pconfig = $_POST;
140
141
	/* input validation */
142 cfbfd941 smos
	$reqdfields = explode(" ", "hostname domain");
143 2ee8dea1 Phil Davis
	$reqdfieldsn = array(gettext("Hostname"), gettext("Domain"));
144 04ad7c7c Scott Ullrich
145 1e9b4611 Renato Botelho
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
146 04ad7c7c Scott Ullrich
147 a5995a8e Stephen Beaver
	if ($_POST['webguicss']) {
148
		$config['system']['webgui']['webguicss'] = $_POST['webguicss'];
149
	} else {
150
		unset($config['system']['webgui']['webguicss']);
151
	}
152 8f65151c Phil Davis
153 ddb84143 Stephen Beaver
	if ($_POST['webguifixedmenu']) {
154
		$config['system']['webgui']['webguifixedmenu'] = $_POST['webguifixedmenu'];
155
	} else {
156
		unset($config['system']['webgui']['webguifixedmenu']);
157
	}
158 477db933 Jared Dillard
159
	if ($_POST['dashboardcolumns']) {
160
		$config['system']['webgui']['dashboardcolumns'] = $_POST['dashboardcolumns'];
161
	} else {
162
		unset($config['system']['webgui']['dashboardcolumns']);
163 8f65151c Phil Davis
	}
164
165 2d86ee95 Phil Davis
	if ($_POST['hostname']) {
166
		if (!is_hostname($_POST['hostname'])) {
167
			$input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'. It may not start or end with '-'.");
168
		} else {
169
			if (!is_unqualified_hostname($_POST['hostname'])) {
170
				$input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
171
			}
172
		}
173 5b237745 Scott Ullrich
	}
174
	if ($_POST['domain'] && !is_domain($_POST['domain'])) {
175 7465d12c Carlos Eduardo Ramos
		$input_errors[] = gettext("The domain may only contain the characters a-z, 0-9, '-' and '.'.");
176 5b237745 Scott Ullrich
	}
177 d623f2da Seth Mos
178 df4471e2 Phil Davis
	$ignore_posted_dnsgw = array();
179
180 2ee8dea1 Phil Davis
	for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
181 d623f2da Seth Mos
		$dnsname="dns{$dnscounter}";
182
		$dnsgwname="dns{$dnscounter}gw";
183
		if (($_POST[$dnsname] && !is_ipaddr($_POST[$dnsname]))) {
184 52acb1ff Phil Davis
			$input_errors[] = gettext("A valid IP address must be specified for DNS server $dnscounter.");
185
		} else {
186 2ee8dea1 Phil Davis
			if (($_POST[$dnsgwname] <> "") && ($_POST[$dnsgwname] <> "none")) {
187 52acb1ff Phil Davis
				// A real gateway has been selected.
188
				if (is_ipaddr($_POST[$dnsname])) {
189 2ee8dea1 Phil Davis
					if ((is_ipaddrv4($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
190 52acb1ff Phil Davis
						$input_errors[] = gettext("You can not specify IPv6 gateway '{$_POST[$dnsgwname]}' for IPv4 DNS server '{$_POST[$dnsname]}'");
191
					}
192 2ee8dea1 Phil Davis
					if ((is_ipaddrv6($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
193 52acb1ff Phil Davis
						$input_errors[] = gettext("You can not specify IPv4 gateway '{$_POST[$dnsgwname]}' for IPv6 DNS server '{$_POST[$dnsname]}'");
194
					}
195
				} else {
196 df4471e2 Phil Davis
					// The user selected a gateway but did not provide a DNS address. Be nice and set the gateway back to "none".
197
					$ignore_posted_dnsgw[$dnsgwname] = true;
198 52acb1ff Phil Davis
				}
199 13ea7caa smos
			}
200 d623f2da Seth Mos
		}
201 5b237745 Scott Ullrich
	}
202 d623f2da Seth Mos
203 985fc0fb Ermal Lu?i
	$direct_networks_list = explode(" ", filter_get_direct_networks_list());
204 c98d28e1 Seth Mos
	for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
205
		$dnsitem = "dns{$dnscounter}";
206 d623f2da Seth Mos
		$dnsgwitem = "dns{$dnscounter}gw";
207 c98d28e1 Seth Mos
		if ($_POST[$dnsgwitem]) {
208 2ee8dea1 Phil Davis
			if (interface_has_gateway($_POST[$dnsgwitem])) {
209
				foreach ($direct_networks_list as $direct_network) {
210
					if (ip_in_subnet($_POST[$dnsitem], $direct_network)) {
211
						$input_errors[] = sprintf(gettext("You can not assign a gateway to DNS '%s' server which is on a directly connected network."), $_POST[$dnsitem]);
212 c98d28e1 Seth Mos
					}
213
				}
214
			}
215
		}
216
	}
217
218 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.
219
	$_POST['timeservers'] = preg_replace('/[[:blank:]]+/', ' ', $_POST['timeservers']);
220
	$_POST['timeservers'] = trim($_POST['timeservers']);
221 5b237745 Scott Ullrich
	foreach (explode(' ', $_POST['timeservers']) as $ts) {
222
		if (!is_domain($ts)) {
223 7465d12c Carlos Eduardo Ramos
			$input_errors[] = gettext("A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'.");
224 5b237745 Scott Ullrich
		}
225
	}
226
227
	if (!$input_errors) {
228 f1a34790 N0YB
		update_if_changed("hostname", $config['system']['hostname'], $_POST['hostname']);
229
		update_if_changed("domain", $config['system']['domain'], $_POST['domain']);
230 9eab73da Bill Marquette
		update_if_changed("timezone", $config['system']['timezone'], $_POST['timezone']);
231
		update_if_changed("NTP servers", $config['system']['timeservers'], strtolower($_POST['timeservers']));
232 04ad7c7c Scott Ullrich
233 2ee8dea1 Phil Davis
		if ($_POST['language'] && $_POST['language'] != $config['system']['language']) {
234 3e139f90 Vinicius Coque
			$config['system']['language'] = $_POST['language'];
235 ceecd29b Renato Botelho
			set_language();
236 3e139f90 Vinicius Coque
		}
237
238 24f15b3a NOYB
		unset($config['system']['webgui']['webguileftcolumnhyper']);
239
		$config['system']['webgui']['webguileftcolumnhyper'] = $_POST['webguileftcolumnhyper'] ? true : false;
240
241 c05363c8 NOYB
		unset($config['system']['webgui']['dashboardavailablewidgetspanel']);
242
		$config['system']['webgui']['dashboardavailablewidgetspanel'] = $_POST['dashboardavailablewidgetspanel'] ? true : false;
243
244
		unset($config['system']['webgui']['systemlogsfilterpanel']);
245
		$config['system']['webgui']['systemlogsfilterpanel'] = $_POST['systemlogsfilterpanel'] ? true : false;
246
247
		unset($config['system']['webgui']['systemlogsmanagelogpanel']);
248
		$config['system']['webgui']['systemlogsmanagelogpanel'] = $_POST['systemlogsmanagelogpanel'] ? true : false;
249
250 4fbf63aa Bill Marquette
		/* XXX - billm: these still need updating after figuring out how to check if they actually changed */
251 52acb1ff Phil Davis
		$olddnsservers = $config['system']['dnsserver'];
252 5b237745 Scott Ullrich
		unset($config['system']['dnsserver']);
253 2ee8dea1 Phil Davis
		if ($_POST['dns1']) {
254 5b237745 Scott Ullrich
			$config['system']['dnsserver'][] = $_POST['dns1'];
255 2ee8dea1 Phil Davis
		}
256
		if ($_POST['dns2']) {
257 5b237745 Scott Ullrich
			$config['system']['dnsserver'][] = $_POST['dns2'];
258 2ee8dea1 Phil Davis
		}
259
		if ($_POST['dns3']) {
260 93e0800d Scott Ullrich
			$config['system']['dnsserver'][] = $_POST['dns3'];
261 2ee8dea1 Phil Davis
		}
262
		if ($_POST['dns4']) {
263 93e0800d Scott Ullrich
			$config['system']['dnsserver'][] = $_POST['dns4'];
264 2ee8dea1 Phil Davis
		}
265 04ad7c7c Scott Ullrich
266 07bd3f83 Scott Ullrich
		$olddnsallowoverride = $config['system']['dnsallowoverride'];
267 20b90e0a Scott Ullrich
268 0d8a219e Scott Ullrich
		unset($config['system']['dnsallowoverride']);
269 5b237745 Scott Ullrich
		$config['system']['dnsallowoverride'] = $_POST['dnsallowoverride'] ? true : false;
270 e180a6e3 Scott Ullrich
271 2ee8dea1 Phil Davis
		if ($_POST['dnslocalhost'] == "yes") {
272 8ca95ed8 jim-p
			$config['system']['dnslocalhost'] = true;
273 2ee8dea1 Phil Davis
		} else {
274 8ca95ed8 jim-p
			unset($config['system']['dnslocalhost']);
275 2ee8dea1 Phil Davis
		}
276 8ca95ed8 jim-p
277 e180a6e3 Scott Ullrich
		/* which interface should the dns servers resolve through? */
278 df4471e2 Phil Davis
		$outdnscounter = 0;
279 d623f2da Seth Mos
		for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
280
			$dnsname="dns{$dnscounter}";
281
			$dnsgwname="dns{$dnscounter}gw";
282 52acb1ff Phil Davis
			$olddnsgwname = $config['system'][$dnsgwname];
283 df4471e2 Phil Davis
284 2ee8dea1 Phil Davis
			if ($ignore_posted_dnsgw[$dnsgwname]) {
285 df4471e2 Phil Davis
				$thisdnsgwname = "none";
286 2ee8dea1 Phil Davis
			} else {
287 df4471e2 Phil Davis
				$thisdnsgwname = $pconfig[$dnsgwname];
288 2ee8dea1 Phil Davis
			}
289 df4471e2 Phil Davis
290
			// "Blank" out the settings for this index, then we set them below using the "outdnscounter" index.
291
			$config['system'][$dnsgwname] = "none";
292
			$pconfig[$dnsgwname] = "none";
293
			$pconfig[$dnsname] = "";
294
295
			if ($_POST[$dnsname]) {
296
				// Only the non-blank DNS servers were put into the config above.
297
				// So we similarly only add the corresponding gateways sequentially to the config (and to pconfig), as we find non-blank DNS servers.
298
				// 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.
299
				$outdnscounter++;
300
				$outdnsname="dns{$outdnscounter}";
301
				$outdnsgwname="dns{$outdnscounter}gw";
302
				$pconfig[$outdnsname] = $_POST[$dnsname];
303 2ee8dea1 Phil Davis
				if ($_POST[$dnsgwname]) {
304 df4471e2 Phil Davis
					$config['system'][$outdnsgwname] = $thisdnsgwname;
305
					$pconfig[$outdnsgwname] = $thisdnsgwname;
306
				} else {
307
					// Note: when no DNS GW name is chosen, the entry is set to "none", so actually this case never happens.
308
					unset($config['system'][$outdnsgwname]);
309
					$pconfig[$outdnsgwname] = "";
310
				}
311 d623f2da Seth Mos
			}
312 df4471e2 Phil Davis
			if (($olddnsgwname != "") && ($olddnsgwname != "none") && (($olddnsgwname != $thisdnsgwname) || ($olddnsservers[$dnscounter-1] != $_POST[$dnsname]))) {
313 52acb1ff Phil Davis
				// A previous DNS GW name was specified. It has now gone or changed, or the DNS server address has changed.
314
				// Remove the route. Later calls will add the correct new route if needed.
315 2ee8dea1 Phil Davis
				if (is_ipaddrv4($olddnsservers[$dnscounter-1])) {
316 52acb1ff Phil Davis
					mwexec("/sbin/route delete " . escapeshellarg($olddnsservers[$dnscounter-1]));
317 312c32c9 Renato Botelho
				} else if (is_ipaddrv6($olddnsservers[$dnscounter-1])) {
318
					mwexec("/sbin/route delete -inet6 " . escapeshellarg($olddnsservers[$dnscounter-1]));
319 2ee8dea1 Phil Davis
				}
320 52acb1ff Phil Davis
			}
321 d623f2da Seth Mos
		}
322 04ad7c7c Scott Ullrich
323 2ee8dea1 Phil Davis
		if ($changecount > 0) {
324 62d01225 Bill Marquette
			write_config($changedesc);
325 2ee8dea1 Phil Davis
		}
326 04ad7c7c Scott Ullrich
327 5b237745 Scott Ullrich
		$retval = 0;
328 3cfdba5f Scott Ullrich
		$retval = system_hostname_configure();
329
		$retval |= system_hosts_generate();
330
		$retval |= system_resolvconf_generate();
331 2ee8dea1 Phil Davis
		if (isset($config['dnsmasq']['enable'])) {
332 1e2c8821 Warren Baker
			$retval |= services_dnsmasq_configure();
333 2ee8dea1 Phil Davis
		} elseif (isset($config['unbound']['enable'])) {
334 1e2c8821 Warren Baker
			$retval |= services_unbound_configure();
335 2ee8dea1 Phil Davis
		}
336 3cfdba5f Scott Ullrich
		$retval |= system_timezone_configure();
337
		$retval |= system_ntp_configure();
338
339 2ee8dea1 Phil Davis
		if ($olddnsallowoverride != $config['system']['dnsallowoverride']) {
340 b8292903 Ermal
			$retval |= send_event("service reload dns");
341 2ee8dea1 Phil Davis
		}
342 3cfdba5f Scott Ullrich
343 e7d967d8 Scott Ullrich
		// Reload the filter - plugins might need to be run.
344 0027de0a Ermal Lu?i
		$retval |= filter_configure();
345 1180e4f0 Sjon Hortensius
346 5b237745 Scott Ullrich
		$savemsg = get_std_save_message($retval);
347
	}
348 df4471e2 Phil Davis
349
	unset($ignore_posted_dnsgw);
350 5b237745 Scott Ullrich
}
351 4df96eff Scott Ullrich
352 2ee8dea1 Phil Davis
$pgtitle = array(gettext("System"), gettext("General Setup"));
353 4df96eff Scott Ullrich
include("head.inc");
354
355 8f65151c Phil Davis
if ($input_errors) {
356 41ea4cf3 Sjon Hortensius
	print_input_errors($input_errors);
357 8f65151c Phil Davis
}
358 ddb84143 Stephen Beaver
359 8f65151c Phil Davis
if ($savemsg) {
360 1f70d78c NewEraCracker
	print_info_box($savemsg, 'success');
361 8f65151c Phil Davis
}
362 5b237745 Scott Ullrich
?>
363 41ea4cf3 Sjon Hortensius
<div id="container">
364 b40bcb23 Sjon Hortensius
<?php
365 1180e4f0 Sjon Hortensius
366 b40bcb23 Sjon Hortensius
$form = new Form;
367 a32c0623 Sjon Hortensius
$section = new Form_Section('System');
368
$section->addInput(new Form_Input(
369 a97531c5 Sjon Hortensius
	'hostname',
370 a32c0623 Sjon Hortensius
	'Hostname',
371
	'text',
372
	$pconfig['hostname'],
373
	['placeholder' => 'pfSense']
374
))->setHelp('Name of the firewall host, without domain part');
375
$section->addInput(new Form_Input(
376 a97531c5 Sjon Hortensius
	'domain',
377 a32c0623 Sjon Hortensius
	'Domain',
378
	'text',
379
	$pconfig['domain'],
380
	['placeholder' => 'mycorp.com, home, office, private, etc.']
381
))->setHelp('Do not use \'local\' as a domain name. It will cause local '.
382
	'hosts running mDNS (avahi, bonjour, etc.) to be unable to resolve '.
383
	'local hosts not running mDNS.');
384 b40bcb23 Sjon Hortensius
$form->add($section);
385
386 70dc5cd6 Phil Davis
$section = new Form_Section('DNS Server Settings');
387 b40bcb23 Sjon Hortensius
388 8f65151c Phil Davis
for ($i=1; $i<5; $i++) {
389 54c605d4 Stephen Beaver
//	if (!isset($pconfig['dns'.$i]))
390
//		continue;
391
392
	$group = new Form_Group('DNS Server ' . $i);
393
394
	$group->add(new Form_Input(
395 c52e1c1f Stephen Beaver
		'dns' . $i,
396 54c605d4 Stephen Beaver
		'DNS Server',
397
		'text',
398 c52e1c1f Stephen Beaver
		$pconfig['dns'. $i]
399 54c605d4 Stephen Beaver
	))->setHelp(($i == 4) ? 'Address':null);
400 b40bcb23 Sjon Hortensius
401
	$help = "Enter IP addresses to be used by the system for DNS resolution. " .
402
		"These are also used for the DHCP service, DNS forwarder and for PPTP VPN clients.";
403
404 54c605d4 Stephen Beaver
	if ($multiwan)	{
405 b40bcb23 Sjon Hortensius
		$options = array('none' => 'none');
406
407 8f65151c Phil Davis
		foreach ($arr_gateways as $gwname => $gwitem) {
408
			if ((is_ipaddrv4(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv6($gwitem['gateway'])))) {
409 b40bcb23 Sjon Hortensius
				continue;
410
			}
411 54c605d4 Stephen Beaver
412 8f65151c Phil Davis
			if ((is_ipaddrv6(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv4($gwitem['gateway'])))) {
413 b40bcb23 Sjon Hortensius
				continue;
414
			}
415 1180e4f0 Sjon Hortensius
416 b40bcb23 Sjon Hortensius
			$options[$gwname] = $gwname.' - '.$gwitem['friendlyiface'].' - '.$gwitem['gateway'];
417
		}
418 1180e4f0 Sjon Hortensius
419 a97531c5 Sjon Hortensius
		$group->add(new Form_Select(
420 c52e1c1f Stephen Beaver
			'dns' . $i . 'gw',
421 e4dd8be4 NOYB
			'Gateway',
422 c52e1c1f Stephen Beaver
			$pconfig['dns' . $i . 'gw'],
423 a97531c5 Sjon Hortensius
			$options
424 54c605d4 Stephen Beaver
		))->setHelp(($i == 4) ? 'Gateway':null);;
425 1180e4f0 Sjon Hortensius
426 b40bcb23 Sjon Hortensius
		$help .= '<br/>'. "In addition, optionally select the gateway for each DNS server. " .
427
			"When using multiple WAN connections there should be at least one unique DNS server per gateway.";
428
	}
429 1180e4f0 Sjon Hortensius
430 8f65151c Phil Davis
	if ($i == 4) {
431 54c605d4 Stephen Beaver
		$group->setHelp($help);
432 8f65151c Phil Davis
	}
433 54c605d4 Stephen Beaver
434 b40bcb23 Sjon Hortensius
	$section->add($group);
435
}
436 1180e4f0 Sjon Hortensius
437 a005a836 Sjon Hortensius
$section->addInput(new Form_Checkbox(
438 a97531c5 Sjon Hortensius
	'dnsallowoverride',
439 70dc5cd6 Phil Davis
	'DNS Server Override',
440 b40bcb23 Sjon Hortensius
	'Allow DNS server list to be overridden by DHCP/PPP on WAN',
441
	$pconfig['dnsallowoverride']
442 e4dd8be4 NOYB
))->setHelp(sprintf(gettext('If this option is set, %s will use DNS servers '.
443 a32c0623 Sjon Hortensius
	'assigned by a DHCP/PPP server on WAN for its own purposes (including '.
444
	'the DNS forwarder). However, they will not be assigned to DHCP and PPTP '.
445
	'VPN clients.'), $g['product_name']));
446 b40bcb23 Sjon Hortensius
447 a005a836 Sjon Hortensius
$section->addInput(new Form_Checkbox(
448 a97531c5 Sjon Hortensius
	'dnslocalhost',
449 70dc5cd6 Phil Davis
	'Disable DNS Forwarder',
450 b40bcb23 Sjon Hortensius
	'Do not use the DNS Forwarder as a DNS server for the firewall',
451
	$pconfig['dnslocalhost']
452 e4dd8be4 NOYB
))->setHelp('By default localhost (127.0.0.1) will be used as the first DNS '.
453 a32c0623 Sjon Hortensius
	'server where the DNS Forwarder or DNS Resolver is enabled and set to '.
454 e4dd8be4 NOYB
	'listen on Localhost, so system can use the local DNS service to perform '.
455 a32c0623 Sjon Hortensius
	'lookups. Checking this box omits localhost from the list of DNS servers.');
456 b40bcb23 Sjon Hortensius
457
$form->add($section);
458
459 a005a836 Sjon Hortensius
$section = new Form_Section('Localization');
460
$section->addInput(new Form_Select(
461 a97531c5 Sjon Hortensius
	'timezone',
462 a32c0623 Sjon Hortensius
	'Timezone',
463
	$pconfig['timezone'],
464 64c3b4cd sbeaver
	array_combine($timezonelist, $timezonelist)
465 a32c0623 Sjon Hortensius
))->setHelp('Select the location closest to you');
466 a005a836 Sjon Hortensius
$section->addInput(new Form_Input(
467 a97531c5 Sjon Hortensius
	'timeservers',
468 a32c0623 Sjon Hortensius
	'Timeservers',
469
	'text',
470
	$pconfig['timeservers']
471
))->setHelp('Use a space to separate multiple hosts (only one required). '.
472
	'Remember to set up at least one DNS server if you enter a host name here!');
473 a005a836 Sjon Hortensius
$section->addInput(new Form_Select(
474 a97531c5 Sjon Hortensius
	'language',
475 a32c0623 Sjon Hortensius
	'Language',
476
	$pconfig['language'],
477
	get_locale_list()
478
))->setHelp('Choose a language for the webConfigurator');
479 b40bcb23 Sjon Hortensius
480
$form->add($section);
481
482 a5995a8e Stephen Beaver
$csslist = array();
483 7a2cec8f Stephen Beaver
$css = glob("/usr/local/www/bootstrap/css/*.css");
484 a5995a8e Stephen Beaver
foreach ($css as $file) {
485
	$file = basename($file);
486 8f65151c Phil Davis
	if (substr($file, 0, 9) !== 'bootstrap') {
487 a5995a8e Stephen Beaver
		$csslist[$file] = pathinfo($file, PATHINFO_FILENAME);
488
	}
489
}
490
491 7aaa0663 Stephen Beaver
asort($csslist);
492
493 f0a9dec4 Phil Davis
if (!isset($pconfig['webguicss']) || !isset($csslist[$pconfig['webguicss']])) {
494 c040eeda Phil Davis
	$pconfig['webguicss'] = "pfSense.css";
495
}
496
497 477db933 Jared Dillard
$section = new Form_Section('Web Configurator');
498 a5995a8e Stephen Beaver
499
$section->addInput(new Form_Select(
500
	'webguicss',
501
	'Theme',
502
	$pconfig['webguicss'],
503
	$csslist
504 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');
505 3d29d2eb Jared Dillard
506 ddb84143 Stephen Beaver
$section->addInput(new Form_Select(
507
	'webguifixedmenu',
508 477db933 Jared Dillard
	'Top Navigation',
509 e82778da Stephen Beaver
	$pconfig['webguifixedmenu'],
510 b50d30c3 Stephen Beaver
	["" => gettext("Scrolls with page"), "fixed" => gettext("Fixed (Remains visible at top of page)")]
511 b21e4009 Jared Dillard
))->setHelp("The fixed option is intended for large screens only.");
512 3d29d2eb Jared Dillard
513 477db933 Jared Dillard
$section->addInput(new Form_Input(
514
	'dashboardcolumns',
515
	'Dashboard Columns',
516 9911c685 Stephen Beaver
	'number',
517
	$pconfig['dashboardcolumns'],
518
	[min => 1, max => 4]
519
))->setHelp('<span class="badge" title="This feature is in BETA">BETA</span>');
520 477db933 Jared Dillard
521 54bf2312 NOYB
$group = new Form_Group('Associated Panels Show/Hide');
522 c05363c8 NOYB
523
$group->add(new Form_Checkbox(
524
	'dashboardavailablewidgetspanel',
525
	null,
526
	'Available Widgets',
527
	$pconfig['dashboardavailablewidgetspanel']
528
	))->setHelp('Show the Available Widgets panel on the Dashboard.');
529
530
$group->add(new Form_Checkbox(
531
	'systemlogsfilterpanel',
532
	null,
533
	'Log Filter',
534
	$pconfig['systemlogsfilterpanel']
535
))->setHelp('Show the Log Filter panel in System Logs.');
536
537
$group->add(new Form_Checkbox(
538
	'systemlogsmanagelogpanel',
539
	null,
540 643bfab8 NOYB
	'Manage Log',
541 c05363c8 NOYB
	$pconfig['systemlogsmanagelogpanel']
542
))->setHelp('Show the Manage Log panel in System Logs.');
543
544 069442e7 NOYB
$group->setHelp('These options allow certain panels to be automatically hidden on page load. A control is provided in the title bar to un-hide the panel.
545 c05363c8 NOYB
<br /><span class="badge" title="This feature is in BETA">BETA</span>');
546
547
$section->add($group);
548
549 24f15b3a NOYB
$section->addInput(new Form_Checkbox(
550
	'webguileftcolumnhyper',
551
	'Left Column Labels',
552
	'Active',
553
	$pconfig['webguileftcolumnhyper']
554 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>');
555 24f15b3a NOYB
556 a5995a8e Stephen Beaver
$form->add($section);
557
558 b40bcb23 Sjon Hortensius
print $form;
559 8c4ef875 NOYB
?>
560
</div>
561
<?php
562 60ff91f1 Renato Botelho
include("foot.inc");
563 8c4ef875 NOYB
?>