* Copyright (C) 2018 Fabian Franz * Copyright (C) 2014-2016 Deciso B.V. * Copyright (C) 2014 Warren Baker * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ require_once("guiconfig.inc"); require_once("system.inc"); require_once("interfaces.inc"); require_once("plugins.inc.d/unbound.inc"); $a_unboundcfg = &config_read_array('unbound'); if ($_SERVER['REQUEST_METHOD'] === 'GET') { $pconfig = array(); // boolean values $pconfig['enable'] = isset($a_unboundcfg['enable']); $pconfig['enable_wpad'] = isset($a_unboundcfg['enable_wpad']); $pconfig['dnssec'] = isset($a_unboundcfg['dnssec']); $pconfig['dns64'] = isset($a_unboundcfg['dns64']); $pconfig['forwarding'] = isset($a_unboundcfg['forwarding']); $pconfig['reglladdr6'] = empty($a_unboundcfg['noreglladdr6']); $pconfig['regdhcp'] = isset($a_unboundcfg['regdhcp']); $pconfig['regdhcpstatic'] = isset($a_unboundcfg['regdhcpstatic']); $pconfig['txtsupport'] = isset($a_unboundcfg['txtsupport']); $pconfig['cacheflush'] = isset($a_unboundcfg['cacheflush']); // text values $pconfig['port'] = !empty($a_unboundcfg['port']) ? $a_unboundcfg['port'] : null; $pconfig['regdhcpdomain'] = !empty($a_unboundcfg['regdhcpdomain']) ? $a_unboundcfg['regdhcpdomain'] : null; $pconfig['dns64prefix'] = !empty($a_unboundcfg['dns64prefix']) ? $a_unboundcfg['dns64prefix'] : null; // array types $pconfig['active_interface'] = !empty($a_unboundcfg['active_interface']) ? explode(",", $a_unboundcfg['active_interface']) : array(); $pconfig['outgoing_interface'] = !empty($a_unboundcfg['outgoing_interface']) ? explode(",", $a_unboundcfg['outgoing_interface']) : array(); $pconfig['local_zone_type'] = !empty($a_unboundcfg['local_zone_type']) ? $a_unboundcfg['local_zone_type'] : null; } elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { $input_errors = array(); $pconfig = $_POST; if (!empty($pconfig['apply'])) { system_resolvconf_generate(); /* checks for 'enable' */ unbound_configure_do(); plugins_configure('dhcp'); /* checks for 'enable' */ clear_subsystem_dirty('unbound'); header(url_safe('Location: /services_unbound.php')); exit; } else { // perform validations $unbound_port = empty($pconfig['port']) ? "53" : $pconfig['port']; $dnsmasq_port = empty($config['dnsmasq']['port']) ? "53" : $config['dnsmasq']['port']; if (isset($pconfig['enable']) && isset($config['dnsmasq']['enable']) && $unbound_port == $dnsmasq_port) { $input_errors[] = gettext('Dnsmasq is still active on the same port. Disable it before enabling Unbound.'); } if (!empty($pconfig['regdhcpdomain']) && !is_domain($pconfig['regdhcpdomain'])) { $input_errors[] = gettext("The domain may only contain the characters a-z, 0-9, '-' and '.'."); } if (!empty($pconfig['dns64prefix']) && !is_subnetv6($pconfig['dns64prefix'])) { $input_errors[] = gettext("You must specify a valid DNS64 prefix."); } if (!empty($pconfig['port']) && !is_port($pconfig['port'])) { $input_errors[] = gettext("You must specify a valid port number."); } if (!empty($pconfig['local_zone_type']) && !array_key_exists($pconfig['local_zone_type'], unbound_local_zone_types())) { $input_errors[] = sprintf(gettext('Local zone type "%s" is not known.'), $pconfig['local_zone_type']); } if (count($input_errors) == 0) { // text types if (!empty($pconfig['port'])) { $a_unboundcfg['port'] = $pconfig['port']; } elseif (isset($a_unboundcfg['port'])) { unset($a_unboundcfg['port']); } if (!empty($pconfig['regdhcpdomain'])) { $a_unboundcfg['regdhcpdomain'] = $pconfig['regdhcpdomain']; } elseif (isset($a_unboundcfg['regdhcpdomain'])) { unset($a_unboundcfg['regdhcpdomain']); } if (!empty($pconfig['dns64prefix'])) { $a_unboundcfg['dns64prefix'] = $pconfig['dns64prefix']; } elseif (isset($a_unboundcfg['dns64prefix'])) { unset($a_unboundcfg['dns64prefix']); } if (!empty($pconfig['local_zone_type'])) { $a_unboundcfg['local_zone_type'] = $pconfig['local_zone_type']; } elseif (isset($a_unboundcfg['local_zone_type'])) { unset($a_unboundcfg['local_zone_type']); } // boolean values $a_unboundcfg['cacheflush'] = !empty($pconfig['cacheflush']); $a_unboundcfg['dns64'] = !empty($pconfig['dns64']); $a_unboundcfg['dnssec'] = !empty($pconfig['dnssec']); $a_unboundcfg['enable'] = !empty($pconfig['enable']); $a_unboundcfg['enable_wpad'] = !empty($pconfig['enable_wpad']); $a_unboundcfg['forwarding'] = !empty($pconfig['forwarding']); $a_unboundcfg['noreglladdr6'] = empty($pconfig['reglladdr6']); $a_unboundcfg['regdhcp'] = !empty($pconfig['regdhcp']); $a_unboundcfg['regdhcpstatic'] = !empty($pconfig['regdhcpstatic']); $a_unboundcfg['txtsupport'] = !empty($pconfig['txtsupport']); // array types if (!empty($pconfig['active_interface'])) { $a_unboundcfg['active_interface'] = implode(',', $pconfig['active_interface']); } elseif (isset($a_unboundcfg['active_interface'])) { unset($a_unboundcfg['active_interface']); } if (!empty($pconfig['outgoing_interface'])) { $a_unboundcfg['outgoing_interface'] = implode(',', $pconfig['outgoing_interface']); } elseif (isset($a_unboundcfg['outgoing_interface'])) { unset($a_unboundcfg['outgoing_interface']); } write_config('Unbound general configuration changed.'); mark_subsystem_dirty('unbound'); header(url_safe('Location: /services_unbound.php')); exit; } } } $interfaces = get_configured_interface_with_descr(); foreach (array('server', 'client') as $mode) { foreach (config_read_array('openvpn', "openvpn-{$mode}") as $id => $setting) { if (!isset($setting['disable'])) { $interfaces['ovpn' . substr($mode, 0, 1) . $setting['vpnid']] = "OpenVPN {$mode} (" . (!empty($setting['description']) ? $setting['description'] : $setting['vpnid']) . ")"; } } } legacy_html_escape_form_data($pconfig); $service_hook = 'unbound'; include_once("head.inc"); ?>
0) print_input_errors($input_errors); ?>
/>
/>
/> " title="" name="dns64prefix" type="text" id="dns64prefix" value="" />
/>
/>
/>
/>
/>
/>
','');?>