Project

General

Profile

Download (18.9 KB) Statistics
| Branch: | Tag: | Revision:
1 7ed0e844 Warren Baker
<?php
2
/*
3
	services_unbound.php
4
*/
5 df6cb8fe Stephen Beaver
/* ====================================================================
6
 *	Copyright (c)  2004-2015  Electric Sheep Fencing, LLC. All rights reserved.
7
 *	Copyright (c)  2014 Warren Baker (warren@pfsense.org)
8
 *
9
 *	Redistribution and use in source and binary forms, with or without modification,
10
 *	are permitted provided that the following conditions are met:
11
 *
12
 *	1. Redistributions of source code must retain the above copyright notice,
13
 *		this list of conditions and the following disclaimer.
14
 *
15
 *	2. Redistributions in binary form must reproduce the above copyright
16
 *		notice, this list of conditions and the following disclaimer in
17
 *		the documentation and/or other materials provided with the
18
 *		distribution.
19
 *
20
 *	3. All advertising materials mentioning features or use of this software
21
 *		must display the following acknowledgment:
22
 *		"This product includes software developed by the pfSense Project
23
 *		 for use in the pfSense software distribution. (http://www.pfsense.org/).
24
 *
25
 *	4. The names "pfSense" and "pfSense Project" must not be used to
26
 *		 endorse or promote products derived from this software without
27
 *		 prior written permission. For written permission, please contact
28
 *		 coreteam@pfsense.org.
29
 *
30
 *	5. Products derived from this software may not be called "pfSense"
31
 *		nor may "pfSense" appear in their names without prior written
32
 *		permission of the Electric Sheep Fencing, LLC.
33
 *
34
 *	6. Redistributions of any form whatsoever must retain the following
35
 *		acknowledgment:
36
 *
37
 *	"This product includes software developed by the pfSense Project
38
 *	for use in the pfSense software distribution (http://www.pfsense.org/).
39
 *
40
 *	THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
41
 *	EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
 *	IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
 *	PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
44
 *	ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
 *	SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
 *	NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
 *	LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 *	HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
 *	STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
 *	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
 *	OF THE POSSIBILITY OF SUCH DAMAGE.
52
 *
53
 *	====================================================================
54
 *
55
 */
56 7ed0e844 Warren Baker
57
##|+PRIV
58 0b8328c5 jim-p
##|*IDENT=page-services-dnsresolver
59 5230f468 jim-p
##|*NAME=Services: DNS Resolver
60 7ed0e844 Warren Baker
##|*DESCR=Allow access to the 'Services: DNS Resolver' page.
61
##|*MATCH=services_unbound.php*
62 9c8a7b13 Stephen Beaver
##|-PRIV
63 7ed0e844 Warren Baker
64
require_once("guiconfig.inc");
65
require_once("unbound.inc");
66 4dbcf2fb Renato Botelho
require_once("system.inc");
67 7ed0e844 Warren Baker
68 be11b6f1 Warren Baker
if (!is_array($config['unbound'])) {
69 2783e408 Renato Botelho
	$config['unbound'] = array();
70 be11b6f1 Warren Baker
}
71
72 7ed0e844 Warren Baker
$a_unboundcfg =& $config['unbound'];
73
74 932711c7 Matt Smith
if (!is_array($a_unboundcfg['hosts'])) {
75
	$a_unboundcfg['hosts'] = array();
76 be11b6f1 Warren Baker
}
77
78 932711c7 Matt Smith
$a_hosts =& $a_unboundcfg['hosts'];
79 7ed0e844 Warren Baker
80 932711c7 Matt Smith
if (!is_array($a_unboundcfg['domainoverrides'])) {
81
	$a_unboundcfg['domainoverrides'] = array();
82 be11b6f1 Warren Baker
}
83
84 932711c7 Matt Smith
$a_domainOverrides = &$a_unboundcfg['domainoverrides'];
85 7ed0e844 Warren Baker
86 932711c7 Matt Smith
if (isset($a_unboundcfg['enable'])) {
87 fe9d4894 Renato Botelho
	$pconfig['enable'] = true;
88 be11b6f1 Warren Baker
}
89 932711c7 Matt Smith
if (isset($a_unboundcfg['dnssec'])) {
90 fe9d4894 Renato Botelho
	$pconfig['dnssec'] = true;
91 be11b6f1 Warren Baker
}
92 932711c7 Matt Smith
if (isset($a_unboundcfg['forwarding'])) {
93 fe9d4894 Renato Botelho
	$pconfig['forwarding'] = true;
94 be11b6f1 Warren Baker
}
95 932711c7 Matt Smith
if (isset($a_unboundcfg['regdhcp'])) {
96 fe9d4894 Renato Botelho
	$pconfig['regdhcp'] = true;
97 be11b6f1 Warren Baker
}
98 932711c7 Matt Smith
if (isset($a_unboundcfg['regdhcpstatic'])) {
99 fe9d4894 Renato Botelho
	$pconfig['regdhcpstatic'] = true;
100 be11b6f1 Warren Baker
}
101 615ae81f Renato Botelho
102 932711c7 Matt Smith
$pconfig['port'] = $a_unboundcfg['port'];
103
$pconfig['custom_options'] = base64_decode($a_unboundcfg['custom_options']);
104 615ae81f Renato Botelho
105 932711c7 Matt Smith
if (empty($a_unboundcfg['active_interface'])) {
106 2783e408 Renato Botelho
	$pconfig['active_interface'] = array();
107 be11b6f1 Warren Baker
} else {
108 932711c7 Matt Smith
	$pconfig['active_interface'] = explode(",", $a_unboundcfg['active_interface']);
109 be11b6f1 Warren Baker
}
110 51c224bc sbeaver
111 932711c7 Matt Smith
if (empty($a_unboundcfg['outgoing_interface'])) {
112 2783e408 Renato Botelho
	$pconfig['outgoing_interface'] = array();
113 be11b6f1 Warren Baker
} else {
114 932711c7 Matt Smith
	$pconfig['outgoing_interface'] = explode(",", $a_unboundcfg['outgoing_interface']);
115 be11b6f1 Warren Baker
}
116 615ae81f Renato Botelho
117 ca47c065 NOYB
if (empty($a_unboundcfg['system_domain_local_zone_type'])) {
118
	$pconfig['system_domain_local_zone_type'] = "transparent";
119
} else {
120
	$pconfig['system_domain_local_zone_type'] = $a_unboundcfg['system_domain_local_zone_type'];
121
}
122
123 7ed0e844 Warren Baker
if ($_POST) {
124 2783e408 Renato Botelho
	if ($_POST['apply']) {
125
		$retval = services_unbound_configure();
126
		$savemsg = get_std_save_message($retval);
127
		if ($retval == 0) {
128
			clear_subsystem_dirty('unbound');
129 fe9d4894 Renato Botelho
		}
130 2783e408 Renato Botelho
		/* Update resolv.conf in case the interface bindings exclude localhost. */
131
		system_resolvconf_generate();
132 4dbcf2fb Renato Botelho
		/* Start or restart dhcpleases when it's necessary */
133
		system_dhcpleases_configure();
134 2783e408 Renato Botelho
	} else {
135 7aeae838 Matt Smith
		$pconfig = $_POST;
136
		unset($input_errors);
137
138 932711c7 Matt Smith
		if (isset($pconfig['enable']) && isset($config['dnsmasq']['enable'])) {
139
			if ($pconfig['port'] == $config['dnsmasq']['port']) {
140 4bb7c0d1 bruno
				$input_errors[] = gettext("The DNS Forwarder is enabled using this port. Choose a non-conflicting port, or disable the DNS Forwarder.");
141 e92ee598 Phil Davis
			}
142 fe9d4894 Renato Botelho
		}
143 615ae81f Renato Botelho
144 7b03ef63 Chris Buechler
		// forwarding mode requires having valid DNS servers
145
		if (isset($pconfig['forwarding'])) {
146
			$founddns = false;
147
			if (isset($config['system']['dnsallowoverride'])) {
148 5e946f38 Chris Buechler
				$dns_servers = get_dns_servers();
149
				if (is_array($dns_servers)) {
150
					foreach ($dns_servers as $dns_server) {
151
						if (!ip_in_subnet($dns_server, "127.0.0.0/8")) {
152 7b03ef63 Chris Buechler
							$founddns = true;
153
						}
154
					}
155
				}
156
			}
157
			if (is_array($config['system']['dnsserver'])) {
158
				foreach ($config['system']['dnsserver'] as $dnsserver) {
159
					if (is_ipaddr($dnsserver)) {
160
						$founddns = true;
161
					}
162
				}
163
			}
164
			if ($founddns == false) {
165
				$input_errors[] = gettext("At least one DNS server must be specified under System>General Setup to enable Forwarding mode.");
166
			}
167
		}
168
169 932711c7 Matt Smith
		if (empty($pconfig['active_interface'])) {
170 4bb7c0d1 bruno
			$input_errors[] = gettext("One or more Network Interfaces must be selected for binding.");
171 932711c7 Matt Smith
		} else if (!isset($config['system']['dnslocalhost']) && (!in_array("lo0", $pconfig['active_interface']) && !in_array("all", $pconfig['active_interface']))) {
172 4bb7c0d1 bruno
			$input_errors[] = gettext("This system is configured to use the DNS Resolver as its DNS server, so Localhost or All must be selected in Network Interfaces.");
173 fe9d4894 Renato Botelho
		}
174 7ed0e844 Warren Baker
175 932711c7 Matt Smith
		if (empty($pconfig['outgoing_interface'])) {
176 4bb7c0d1 bruno
			$input_errors[] = gettext("One or more Outgoing Network Interfaces must be selected.");
177 fe9d4894 Renato Botelho
		}
178 7ed0e844 Warren Baker
179 932711c7 Matt Smith
		if ($pconfig['port'] && !is_port($pconfig['port'])) {
180 359cc8d9 NOYB
			$input_errors[] = gettext("A valid port number must be specified.");
181 fe9d4894 Renato Botelho
		}
182 fff4a9d1 Warren Baker
183 932711c7 Matt Smith
		if (is_array($pconfig['active_interface']) && !empty($pconfig['active_interface'])) {
184
			$display_active_interface = $pconfig['active_interface'];
185
			$pconfig['active_interface'] = implode(",", $pconfig['active_interface']);
186 fe9d4894 Renato Botelho
		}
187 7ed0e844 Warren Baker
188 932711c7 Matt Smith
		$display_custom_options = $pconfig['custom_options'];
189
		$pconfig['custom_options'] = base64_encode(str_replace("\r\n", "\n", $pconfig['custom_options']));
190
191
		if (is_array($pconfig['outgoing_interface']) && !empty($pconfig['outgoing_interface'])) {
192
			$display_outgoing_interface = $pconfig['outgoing_interface'];
193
			$pconfig['outgoing_interface'] = implode(",", $pconfig['outgoing_interface']);
194 fe9d4894 Renato Botelho
		}
195 188609c6 Warren Baker
196 932711c7 Matt Smith
		$test_output = array();
197
		if (test_unbound_config($pconfig, $test_output)) {
198
			$input_errors[] = gettext("The generated config file cannot be parsed by unbound. Please correct the following errors:");
199
			$input_errors = array_merge($input_errors, $test_output);
200
		}
201 7ed0e844 Warren Baker
202 2783e408 Renato Botelho
		if (!$input_errors) {
203 932711c7 Matt Smith
			$a_unboundcfg['enable'] = isset($pconfig['enable']);
204 439ba83c NOYB
			$a_unboundcfg['port'] = $pconfig['port'];
205 932711c7 Matt Smith
			$a_unboundcfg['dnssec'] = isset($pconfig['dnssec']);
206
			$a_unboundcfg['forwarding'] = isset($pconfig['forwarding']);
207
			$a_unboundcfg['regdhcp'] = isset($pconfig['regdhcp']);
208
			$a_unboundcfg['regdhcpstatic'] = isset($pconfig['regdhcpstatic']);
209
			$a_unboundcfg['active_interface'] = $pconfig['active_interface'];
210
			$a_unboundcfg['outgoing_interface'] = $pconfig['outgoing_interface'];
211 ca47c065 NOYB
			$a_unboundcfg['system_domain_local_zone_type'] = $pconfig['system_domain_local_zone_type'];
212 932711c7 Matt Smith
			$a_unboundcfg['custom_options'] = $pconfig['custom_options'];
213
214 4bb7c0d1 bruno
			write_config(gettext("DNS Resolver configured."));
215 2783e408 Renato Botelho
			mark_subsystem_dirty('unbound');
216
		}
217 932711c7 Matt Smith
218
		$pconfig['active_interface'] = $display_active_interface;
219
		$pconfig['outgoing_interface'] = $display_outgoing_interface;
220
		$pconfig['custom_options'] = $display_custom_options;
221 2783e408 Renato Botelho
	}
222 7ed0e844 Warren Baker
}
223
224 c154cd7d NOYB
if ($pconfig['custom_options']) {
225
	$customoptions = true;
226
} else {
227
	$customoptions = false;
228
}
229
230 f2bc186f Warren Baker
if ($_GET['act'] == "del") {
231 2783e408 Renato Botelho
	if ($_GET['type'] == 'host') {
232
		if ($a_hosts[$_GET['id']]) {
233
			unset($a_hosts[$_GET['id']]);
234
			write_config();
235
			mark_subsystem_dirty('unbound');
236
			header("Location: services_unbound.php");
237
			exit;
238
		}
239
	} elseif ($_GET['type'] == 'doverride') {
240
		if ($a_domainOverrides[$_GET['id']]) {
241
			unset($a_domainOverrides[$_GET['id']]);
242
			write_config();
243
			mark_subsystem_dirty('unbound');
244
			header("Location: services_unbound.php");
245
			exit;
246
		}
247
	}
248 f2bc186f Warren Baker
}
249
250 7aeae838 Matt Smith
function build_if_list($selectedifs) {
251 51c224bc sbeaver
	$interface_addresses = get_possible_listen_ips(true);
252
	$iflist = array('options' => array(), 'selected' => array());
253
254 4bb7c0d1 bruno
	$iflist['options']['all']	= gettext("All");
255 7aeae838 Matt Smith
	if (empty($selectedifs) || empty($selectedifs[0]) || in_array("all", $selectedifs)) {
256 7275a7a2 Stephen Beaver
		array_push($iflist['selected'], "all");
257 7aeae838 Matt Smith
	}
258 51c224bc sbeaver
259
	foreach ($interface_addresses as $laddr => $ldescr) {
260
		$iflist['options'][$laddr] = htmlspecialchars($ldescr);
261
262 20db3e1a Phil Davis
		if ($selectedifs && in_array($laddr, $selectedifs)) {
263 51c224bc sbeaver
			array_push($iflist['selected'], $laddr);
264 20db3e1a Phil Davis
		}
265 51c224bc sbeaver
	}
266
267
	unset($interface_addresses);
268
269
	return($iflist);
270
}
271
272 c8f6b745 k-paulius
$pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("General Settings"));
273 db88a3a2 Phil Davis
$shortcut_section = "resolver";
274 7ed0e844 Warren Baker
275 51c224bc sbeaver
include_once("head.inc");
276 7ed0e844 Warren Baker
277 20db3e1a Phil Davis
if ($input_errors) {
278 51c224bc sbeaver
	print_input_errors($input_errors);
279 20db3e1a Phil Davis
}
280 51c224bc sbeaver
281 20db3e1a Phil Davis
if ($savemsg) {
282 51c224bc sbeaver
	print_info_box($savemsg, 'success');
283 20db3e1a Phil Davis
}
284 51c224bc sbeaver
285 7aeae838 Matt Smith
if (is_subsystem_dirty('unbound')) {
286 359cc8d9 NOYB
	print_apply_box(gettext("The DNS resolver configuration has been changed.") . "<br />" . gettext("The changes must be applied for them to take effect."));
287 7aeae838 Matt Smith
}
288
289 51c224bc sbeaver
$tab_array = array();
290 c8f6b745 k-paulius
$tab_array[] = array(gettext("General Settings"), true, "services_unbound.php");
291
$tab_array[] = array(gettext("Advanced Settings"), false, "services_unbound_advanced.php");
292 51c224bc sbeaver
$tab_array[] = array(gettext("Access Lists"), false, "/services_unbound_acls.php");
293
display_top_tabs($tab_array, true);
294
295
$form = new Form();
296
297
$section = new Form_Section('General DNS Resolver Options');
298
299
$section->addInput(new Form_Checkbox(
300
	'enable',
301
	'Enable',
302
	'Enable DNS resolver',
303
	$pconfig['enable']
304
));
305
306
$section->addInput(new Form_Input(
307
	'port',
308
	'Listen Port',
309 d5a9e030 NOYB
	'number',
310 3e568739 NOYB
	$pconfig['port'],
311
	['placeholder' => '53']
312 51c224bc sbeaver
))->setHelp('The port used for responding to DNS queries. It should normally be left blank unless another service needs to bind to TCP/UDP port 53.');
313
314 7aeae838 Matt Smith
$activeiflist = build_if_list($pconfig['active_interface']);
315 51c224bc sbeaver
316
$section->addInput(new Form_Select(
317
	'active_interface',
318
	'Network Interfaces',
319 7aeae838 Matt Smith
	$activeiflist['selected'],
320
	$activeiflist['options'],
321 51c224bc sbeaver
	true
322 d3a3eef0 Francisco Cavalcante
))->addClass('general')->setHelp('Interface IPs used by the DNS Resolver for responding to queries from clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries to other interface IPs not selected below are discarded. ' .
323 51c224bc sbeaver
			'The default behavior is to respond to queries on every available IPv4 and IPv6 address.');
324
325 7aeae838 Matt Smith
$outiflist = build_if_list($pconfig['outgoing_interface']);
326
327 51c224bc sbeaver
$section->addInput(new Form_Select(
328
	'outgoing_interface',
329
	'Outgoing Network Interfaces',
330 7aeae838 Matt Smith
	$outiflist['selected'],
331
	$outiflist['options'],
332 51c224bc sbeaver
	true
333 d3a3eef0 Francisco Cavalcante
))->addClass('general')->setHelp('Utilize different network interface(s) that the DNS Resolver will use to send queries to authoritative servers and receive their replies. By default all interfaces are used.');
334 51c224bc sbeaver
335 ca47c065 NOYB
$section->addInput(new Form_Select(
336
	'system_domain_local_zone_type',
337
	'System Domain Local Zone Type',
338
	$pconfig['system_domain_local_zone_type'],
339 9a83872f NOYB
	unbound_local_zone_types()
340 ca47c065 NOYB
))->setHelp('The local-zone type used for the pfSense system domain (System | General Setup | Domain).  Transparent is the default.  Local-Zone type descriptions are available in the unbound.conf(5) manual pages.');
341
342 51c224bc sbeaver
$section->addInput(new Form_Checkbox(
343
	'dnssec',
344
	'DNSSEC',
345
	'Enable DNSSEC Support',
346
	$pconfig['dnssec']
347
));
348
349
$section->addInput(new Form_Checkbox(
350
	'forwarding',
351
	'DNS Query Forwarding',
352
	'Enable Forwarding Mode',
353
	$pconfig['forwarding']
354
));
355
356
$section->addInput(new Form_Checkbox(
357
	'regdhcp',
358
	'DHCP Registration',
359
	'Register DHCP leases in the DNS Resolver',
360
	$pconfig['regdhcp']
361
))->setHelp(sprintf('If this option is set, then machines that specify their hostname when requesting a DHCP lease will be registered'.
362
					' in the DNS Resolver, so that their name can be resolved.'.
363 0cb4d4a6 NOYB
					' The domain in %sSystem: General Setup%s should also be set to the proper value.','<a href="system.php">','</a>'));
364 51c224bc sbeaver
365
$section->addInput(new Form_Checkbox(
366
	'regdhcpstatic',
367
	'Static DHCP',
368
	'Register DHCP static mappings in the DNS Resolver',
369
	$pconfig['regdhcpstatic']
370 359cc8d9 NOYB
))->setHelp(sprintf('If this option is set, then DHCP static mappings will be registered in the DNS Resolver, so that their name can be resolved. '.
371 0cb4d4a6 NOYB
					'The domain in %sSystem: General Setup%s should also be set to the proper value.','<a href="system.php">','</a>'));
372 51c224bc sbeaver
373 2c95f1cd Phil Davis
$btnadv = new Form_Button(
374
	'btnadvcustom',
375 faab522f Renato Botelho
	'Custom options',
376 3314e626 jim-p
	null,
377
	'fa-cog'
378 51c224bc sbeaver
);
379
380 49d3b157 NOYB
$btnadv->setAttribute('type','button')->addClass('btn-info btn-sm');
381 51c224bc sbeaver
382
$section->addInput(new Form_StaticText(
383 2c95f1cd Phil Davis
	'Display Custom Options',
384
	$btnadv
385 51c224bc sbeaver
));
386
387 1fcfea39 Stephen Beaver
$section->addInput(new Form_Textarea (
388 51c224bc sbeaver
	'custom_options',
389
	'Custom options',
390
	$pconfig['custom_options']
391 e78ecb96 NOYB
))->setHelp('Enter any additional configuration parameters to add to the DNS Resolver configuration here, separated by a newline.');
392 51c224bc sbeaver
393
$form->add($section);
394
print($form);
395
?>
396 932711c7 Matt Smith
397 8fd9052f Colin Fleming
<script type="text/javascript">
398 51c224bc sbeaver
//<![CDATA[
399 20db3e1a Phil Davis
events.push(function() {
400 51c224bc sbeaver
401 2c95f1cd Phil Davis
	// Show advanced custom options ==============================================
402
	var showadvcustom = false;
403
404
	function show_advcustom(ispageload) {
405
		var text;
406
		// On page load decide the initial state based on the data.
407
		if (ispageload) {
408 28e3d579 NewEraCracker
			showadvcustom = <?=($customoptions ? 'true' : 'false');?>;
409 2c95f1cd Phil Davis
		} else {
410
			// It was a click, swap the state.
411
			showadvcustom = !showadvcustom;
412
		}
413
414
		hideInput('custom_options', !showadvcustom);
415
416
		if (showadvcustom) {
417
			text = "<?=gettext('Hide Custom Options');?>";
418
		} else {
419
			text = "<?=gettext('Display Custom Options');?>";
420
		}
421
		$('#btnadvcustom').html('<i class="fa fa-cog"></i> ' + text);
422
	}
423
424 d3a3eef0 Francisco Cavalcante
	// If the enable checkbox is not checked, hide all inputs
425
	function hideGeneral() {
426 51c224bc sbeaver
		var hide = ! $('#enable').prop('checked');
427
428 d3a3eef0 Francisco Cavalcante
		hideMultiClass('general', hide);
429
		hideInput('port', hide);
430
		hideSelect('system_domain_local_zone_type', hide);
431
		hideCheckbox('dnssec', hide);
432
		hideCheckbox('forwarding', hide);
433
		hideCheckbox('regdhcp', hide);
434
		hideCheckbox('regdhcpstatic', hide);
435 2c95f1cd Phil Davis
		hideInput('btnadvcustom', hide);
436
		hideInput('custom_options', hide || !showadvcustom);
437 51c224bc sbeaver
	}
438
439 2c95f1cd Phil Davis
	// Un-hide additional controls
440
	$('#btnadvcustom').click(function(event) {
441
		show_advcustom();
442 51c224bc sbeaver
	});
443
444 d3a3eef0 Francisco Cavalcante
	// When 'enable' is clicked, disable/enable the following hide inputs
445 51c224bc sbeaver
	$('#enable').click(function() {
446 d3a3eef0 Francisco Cavalcante
		hideGeneral();
447 51c224bc sbeaver
	});
448
449
	// On initial load
450 20db3e1a Phil Davis
	if ($('#custom_options').val().length == 0) {
451 df6cb8fe Stephen Beaver
		hideInput('custom_options', true);
452
	}
453
454 d3a3eef0 Francisco Cavalcante
	hideGeneral();
455 2c95f1cd Phil Davis
	show_advcustom(true);
456 51c224bc sbeaver
457
});
458
//]]>
459
</script>
460
461
<div class="panel panel-default">
462 f17594c7 Sjon Hortensius
	<div class="panel-heading"><h2 class="panel-title"><?=gettext("Host Overrides")?></h2></div>
463 51c224bc sbeaver
	<div class="panel-body table-responsive">
464 1c10ce97 PiBa-NL
		<table class="table table-striped table-hover table-condensed sortable-theme-bootstrap table-rowdblclickedit" data-sortable>
465 51c224bc sbeaver
			<thead>
466 2783e408 Renato Botelho
				<tr>
467 51c224bc sbeaver
					<th><?=gettext("Host")?></th>
468
					<th><?=gettext("Domain")?></th>
469
					<th><?=gettext("IP")?></th>
470
					<th><?=gettext("Description")?></th>
471 21d973b2 Phil Davis
					<th><?=gettext("Actions")?></th>
472 2783e408 Renato Botelho
				</tr>
473 51c224bc sbeaver
			</thead>
474
			<tbody>
475
<?php
476
$i = 0;
477
foreach ($a_hosts as $hostent):
478
?>
479 2783e408 Renato Botelho
				<tr>
480 51c224bc sbeaver
					<td>
481 c8a7d17c NOYB
						<?=$hostent['host']?>
482 51c224bc sbeaver
					</td>
483
					<td>
484 c8a7d17c NOYB
						<?=$hostent['domain']?>
485 51c224bc sbeaver
					</td>
486
					<td>
487 de038a27 Stephen Beaver
						<?=$hostent['ip']?>
488 51c224bc sbeaver
					</td>
489
					<td>
490
						<?=htmlspecialchars($hostent['descr'])?>
491
					</td>
492
					<td>
493 33f0b0d5 Stephen Beaver
						<a class="fa fa-pencil"	title="<?=gettext('Edit host override')?>" href="services_unbound_host_edit.php?id=<?=$i?>"></a>
494
						<a class="fa fa-trash"	title="<?=gettext('Delete host override')?>" href="services_unbound.php?type=host&amp;act=del&amp;id=<?=$i?>"></a>
495 51c224bc sbeaver
					</td>
496 2783e408 Renato Botelho
				</tr>
497 51c224bc sbeaver
498
<?php
499
	if ($hostent['aliases']['item'] && is_array($hostent['aliases']['item'])):
500
		foreach ($hostent['aliases']['item'] as $alias):
501
?>
502 2783e408 Renato Botelho
				<tr>
503 51c224bc sbeaver
					<td>
504 c8a7d17c NOYB
						<?=$alias['host']?>
505 51c224bc sbeaver
					</td>
506
					<td>
507 c8a7d17c NOYB
						<?=$alias['domain']?>
508 51c224bc sbeaver
					</td>
509
					<td>
510 4bb7c0d1 bruno
						<?=gettext("Alias for ");?><?=$hostent['host'] ? $hostent['host'] . '.' . $hostent['domain'] : $hostent['domain']?>
511 51c224bc sbeaver
					</td>
512
					<td>
513 39bd0b51 Stephen Beaver
						<i class="fa fa-angle-double-right text-info"></i>
514 51c224bc sbeaver
						<?=htmlspecialchars($alias['description'])?>
515
					</td>
516
					<td>
517 1c10ce97 PiBa-NL
						<a class="fa fa-pencil"	title="<?=gettext('Edit host override')?>" 	href="services_unbound_host_edit.php?id=<?=$i?>"></a>
518 51c224bc sbeaver
					</td>
519 2783e408 Renato Botelho
				</tr>
520 51c224bc sbeaver
<?php
521
		endforeach;
522
	endif;
523
	$i++;
524
endforeach;
525
?>
526
			</tbody>
527
		</table>
528
	</div>
529
</div>
530
531 c10cb196 Stephen Beaver
<nav class="action-buttons">
532 782922c2 Stephen Beaver
	<a href="services_unbound_host_edit.php" class="btn btn-sm btn-success">
533 9d5a20cf heper
		<i class="fa fa-plus icon-embed-btn"></i>
534 782922c2 Stephen Beaver
		<?=gettext('Add')?>
535
	</a>
536 51c224bc sbeaver
</nav>
537
538
<div class="panel panel-default">
539 f17594c7 Sjon Hortensius
	<div class="panel-heading"><h2 class="panel-title"><?=gettext("Domain Overrides")?></h2></div>
540 51c224bc sbeaver
	<div class="panel-body table-responsive">
541 1c10ce97 PiBa-NL
		<table class="table table-striped table-hover table-condensed sortable-theme-bootstrap table-rowdblclickedit" data-sortable>
542 51c224bc sbeaver
			<thead>
543 2783e408 Renato Botelho
				<tr>
544 51c224bc sbeaver
					<th><?=gettext("Domain")?></th>
545
					<th><?=gettext("IP")?></th>
546
					<th><?=gettext("Description")?></th>
547 21d973b2 Phil Davis
					<th><?=gettext("Actions")?></th>
548 2783e408 Renato Botelho
				</tr>
549 51c224bc sbeaver
			</thead>
550
551
			<tbody>
552
<?php
553
$i = 0;
554
foreach ($a_domainOverrides as $doment):
555
?>
556 2783e408 Renato Botelho
				<tr>
557 51c224bc sbeaver
					<td>
558 c8a7d17c NOYB
						<?=$doment['domain']?>&nbsp;
559 51c224bc sbeaver
					</td>
560
					<td>
561
						<?=$doment['ip']?>&nbsp;
562
					</td>
563
					<td>
564
						<?=htmlspecialchars($doment['descr'])?>&nbsp;
565
					</td>
566
					<td>
567 33f0b0d5 Stephen Beaver
						<a class="fa fa-pencil"	title="<?=gettext('Edit domain override')?>" href="services_unbound_domainoverride_edit.php?id=<?=$i?>"></a>
568
						<a class="fa fa-trash"	title="<?=gettext('Delete domain override')?>" href="services_unbound.php?act=del&amp;type=doverride&amp;id=<?=$i?>"></a>
569 51c224bc sbeaver
					</td>
570 2783e408 Renato Botelho
				</tr>
571 51c224bc sbeaver
<?php
572
	$i++;
573
endforeach;
574
?>
575
			</tbody>
576
		</table>
577
	</div>
578
</div>
579
580 c10cb196 Stephen Beaver
<nav class="action-buttons">
581 782922c2 Stephen Beaver
	<a href="services_unbound_domainoverride_edit.php" class="btn btn-sm btn-success">
582 9d5a20cf heper
		<i class="fa fa-plus icon-embed-btn"></i>
583 782922c2 Stephen Beaver
		<?=gettext('Add')?>
584
	</a>
585 51c224bc sbeaver
</nav>
586 782922c2 Stephen Beaver
587 35681930 Stephen Beaver
<div class="infoblock">
588 f6aebbcc NewEraCracker
	<?php print_info_box(sprintf(gettext("If the DNS Resolver is enabled, the DHCP".
589 782922c2 Stephen Beaver
		" service (if enabled) will automatically serve the LAN IP".
590
		" address as a DNS server to DHCP clients so they will use".
591 520ee1d0 Phil Davis
		" the DNS Resolver. If Forwarding is enabled, the DNS Resolver will use the DNS servers".
592 0cb4d4a6 NOYB
		" entered in %sSystem: General Setup%s".
593 520ee1d0 Phil Davis
		" or those obtained via DHCP or PPP on WAN if &quot;Allow".
594 782922c2 Stephen Beaver
		" DNS server list to be overridden by DHCP/PPP on WAN&quot;".
595 f6aebbcc NewEraCracker
		" is checked."), '<a href="system.php">', '</a>'), 'info', false); ?>
596 782922c2 Stephen Beaver
</div>
597 82afb104 Stephen Beaver
598 6f65dc19 Chris Buechler
<?php include("foot.inc");