From ad5fed3c4d5efed6fe5d7553caac195b4139d4d2 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Wed, 13 Mar 2024 17:54:36 +0100 Subject: [PATCH] dhcrelay: migrate IPv6 data, consolidation cleanups #6983 Menu, ACL and XMLRPC wer consolidated into the IPv4 flag. IPv6 is no longer functional and operates from the shared reimplementation now. Syslog doesn't work on OpenBSD dhcrelay especially since we start it with -d so it tries to spam to stderr which is ignored by daemon -f to background it properly with a pid file (it's a long story, don't ask). --- LICENSE | 1 - plist | 2 +- src/etc/inc/plugins.inc.d/core.inc | 6 - src/etc/inc/plugins.inc.d/dhcpd.inc | 17 -- src/etc/inc/plugins.inc.d/dhcrelay.inc | 4 +- .../mvc/app/models/OPNsense/Core/ACL/ACL.xml | 6 - .../app/models/OPNsense/Core/Menu/Menu.xml | 1 - .../app/models/OPNsense/DHCRelay/DHCRelay.xml | 2 +- .../OPNsense/DHCRelay/Migrations/M1_0_0.php | 4 +- .../OPNsense/DHCRelay/Migrations/M1_0_1.php | 80 ++++++++ .../OPNsense/Syslog/local/dhcpd.conf | 2 +- src/www/services_dhcpv6.php | 10 - src/www/services_dhcpv6_relay.php | 186 ------------------ 13 files changed, 87 insertions(+), 234 deletions(-) create mode 100644 src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_1.php delete mode 100644 src/www/services_dhcpv6_relay.php diff --git a/LICENSE b/LICENSE index 564a641d1..cdf689954 100644 --- a/LICENSE +++ b/LICENSE @@ -30,7 +30,6 @@ Copyright (c) 2009-2012 Jim Pingle Copyright (c) 2012 Jonas von Andrian Copyright (c) 2004-2005 Jonathan Watt Copyright (c) 2015 Jos Schellevis -Copyright (c) 2003-2004 Justin Ellison Copyright (c) 2021 Kyle Evans Copyright (c) 2015 Manuel Faux Copyright (c) 2003-2006 Manuel Kasper diff --git a/plist b/plist index 107f820e9..ea87598f1 100644 --- a/plist +++ b/plist @@ -605,6 +605,7 @@ /usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.xml /usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/Menu/Menu.xml /usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php +/usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_1.php /usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/ACL/ACL.xml /usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/DnsDiagnostics.php /usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/DnsDiagnostics.xml @@ -2080,7 +2081,6 @@ /usr/local/www/services_dhcp_edit.php /usr/local/www/services_dhcpv6.php /usr/local/www/services_dhcpv6_edit.php -/usr/local/www/services_dhcpv6_relay.php /usr/local/www/services_dnsmasq.php /usr/local/www/services_dnsmasq_domainoverride_edit.php /usr/local/www/services_dnsmasq_edit.php diff --git a/src/etc/inc/plugins.inc.d/core.inc b/src/etc/inc/plugins.inc.d/core.inc index fca2fe87c..173abff73 100644 --- a/src/etc/inc/plugins.inc.d/core.inc +++ b/src/etc/inc/plugins.inc.d/core.inc @@ -405,12 +405,6 @@ function core_xmlrpc_sync() 'id' => 'dhcpdv6', 'services' => ["dhcpdv6", "radvd"], ); - $result[] = array( - 'description' => gettext('DHCPv6: Relay'), - 'section' => 'dhcrelay6', - 'id' => 'dhcrelay6', - 'services' => ["dhcrelay6"], - ); $result[] = array( 'description' => gettext('Virtual IPs'), 'help' => gettext('Synchronize the CARP Virtual IPs to the other HA host.'), diff --git a/src/etc/inc/plugins.inc.d/dhcpd.inc b/src/etc/inc/plugins.inc.d/dhcpd.inc index 83c315e12..dd2c08b18 100644 --- a/src/etc/inc/plugins.inc.d/dhcpd.inc +++ b/src/etc/inc/plugins.inc.d/dhcpd.inc @@ -115,16 +115,6 @@ function dhcpd_services() $services[] = $pconfig; } - if (isset($config['dhcrelay6']['enable'])) { - $pconfig = array(); - $pconfig['name'] = "dhcrelay6"; - $pconfig['description'] = gettext("DHCPv6 Relay"); - $pconfig['php']['restart'] = array('dhcpd_dhcrelay6_configure'); - $pconfig['php']['start'] = array('dhcpd_dhcrelay6_configure'); - $pconfig['pidfile'] = '/var/run/dhcrelay6.pid'; - $services[] = $pconfig; - } - if (dhcpd_dhcpv4_enabled()) { $pconfig = array(); $pconfig['name'] = 'dhcpd'; @@ -1599,13 +1589,6 @@ EOD; service_log("done.\n", $verbose); } -function dhcpd_dhcrelay_configure($verbose = false, $family = null, $id = null) -{ - if ($family == null || $family == 'inet6') { - dhcpd_dhcrelay6_configure($verbose); - } -} - function dhcpd_dhcrelay6_configure($verbose = false) { global $config; diff --git a/src/etc/inc/plugins.inc.d/dhcrelay.inc b/src/etc/inc/plugins.inc.d/dhcrelay.inc index a59a92b31..032f73232 100644 --- a/src/etc/inc/plugins.inc.d/dhcrelay.inc +++ b/src/etc/inc/plugins.inc.d/dhcrelay.inc @@ -60,8 +60,8 @@ function dhcrelay_xmlrpc_sync() $result = []; $result[] = [ - 'description' => gettext('DHCPv4: Relay'), - 'section' => 'dhcrelay,OPNsense.DHCRelay', + 'description' => gettext('DHCRelay'), + 'section' => 'dhcrelay,dhcrelay6,OPNsense.DHCRelay', 'services' => ['dhcrelay'], 'id' => 'dhcrelay', ]; diff --git a/src/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml b/src/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml index bc881b9dd..51582e6a0 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml @@ -420,12 +420,6 @@ services_dhcp.php* - - Services: DHCPv6 Relay - - services_dhcpv6_relay.php* - - Services: DHCPv6 Server: Edit static mapping diff --git a/src/opnsense/mvc/app/models/OPNsense/Core/Menu/Menu.xml b/src/opnsense/mvc/app/models/OPNsense/Core/Menu/Menu.xml index ae262222d..026484127 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Core/Menu/Menu.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Core/Menu/Menu.xml @@ -174,7 +174,6 @@ - diff --git a/src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.xml b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.xml index 66fe05641..311b5baef 100644 --- a/src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.xml +++ b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.xml @@ -1,6 +1,6 @@ //OPNsense/DHCRelay - 1.0.0 + 1.0.1 DHCRelay configuration diff --git a/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php index f3a49b695..dc57f99f0 100644 --- a/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php +++ b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php @@ -60,8 +60,8 @@ class M1_0_0 extends BaseModelMigration foreach (explode(',', (string)$legacy->interface) as $interface) { $node = $model->relays->add(); $node->setNodes([ - 'agent_info' => !empty($legacy->agentoption), - 'enabled' => !empty($legacy->enable), + 'agent_info' => !empty($legacy->agentoption) ? '1' : '0', + 'enabled' => !empty($legacy->enable) ? '1' : '0', 'interface' => (string)$interface, 'destination' => $dest_uuid, ]); diff --git a/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_1.php b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_1.php new file mode 100644 index 000000000..eacd663fc --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_1.php @@ -0,0 +1,80 @@ +object(); + + $legacy = $config->dhcrelay6; + if (empty($legacy->interface) || empty($legacy->server)) { + /* no value in partial migration so skip all */ + return; + } + + $node = $model->destinations->add(); + $node->setNodes([ + 'name' => 'Migrated IPv6 server entry', + 'server' => (string)$legacy->server, + ]); + $dest_uuid = $node->getAttribute('uuid'); + + foreach (explode(',', (string)$legacy->interface) as $interface) { + $node = $model->relays->add(); + $node->setNodes([ + 'agent_info' => !empty($legacy->agentoption) ? '1' : '0', + 'enabled' => !empty($legacy->enable) ? '1' : '0', + 'interface' => (string)$interface, + 'destination' => $dest_uuid, + ]); + $node->interface->normalizeValue(); + if (empty((string)$node->interface)) { + $model->relays->del($node->getAttribute('uuid')); + } + } + } + + public function post($model) + { + $config = Config::getInstance()->object(); + unset($config->dhcrelay6); + } +} diff --git a/src/opnsense/service/templates/OPNsense/Syslog/local/dhcpd.conf b/src/opnsense/service/templates/OPNsense/Syslog/local/dhcpd.conf index 759ff46de..1a6a37b0d 100644 --- a/src/opnsense/service/templates/OPNsense/Syslog/local/dhcpd.conf +++ b/src/opnsense/service/templates/OPNsense/Syslog/local/dhcpd.conf @@ -2,5 +2,5 @@ # Local syslog-ng configuration filter definition [dhcpd]. ################################################################### filter f_local_dhcpd { - facility(local7) or program("dhcpd") or program("dhcrelay"); + facility(local7) or program("dhcpd"); }; diff --git a/src/www/services_dhcpv6.php b/src/www/services_dhcpv6.php index 96527c440..9496c5943 100644 --- a/src/www/services_dhcpv6.php +++ b/src/www/services_dhcpv6.php @@ -244,12 +244,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { } } } - - /* make sure that the DHCP Relay isn't enabled on this interface */ - if (isset($config['dhcrelay'][$if]['enable'])) { - $input_errors[] = sprintf(gettext("You must disable the DHCP relay on the %s interface before enabling the DHCP server."), - !empty($config['interfaces'][$if]['descr']) ? htmlspecialchars($config['interfaces'][$if]['descr']) : strtoupper($if)); - } } if (count($input_errors) == 0) { @@ -424,9 +418,6 @@ include("head.inc");
- - - 0) print_input_errors($input_errors); ?>

@@ -798,7 +789,6 @@ include("head.inc");

-
diff --git a/src/www/services_dhcpv6_relay.php b/src/www/services_dhcpv6_relay.php deleted file mode 100644 index 95793bad1..000000000 --- a/src/www/services_dhcpv6_relay.php +++ /dev/null @@ -1,186 +0,0 @@ - - * Copyright (C) 2010 Ermal Luçi - * Copyright (C) 2010 Seth Mos - * 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("interfaces.inc"); - -if ($_SERVER['REQUEST_METHOD'] === 'GET') { - $pconfig['enable'] = isset($config['dhcrelay6']['enable']); - if (empty($config['dhcrelay6']['interface'])) { - $pconfig['interface'] = array(); - } else { - $pconfig['interface'] = explode(",", $config['dhcrelay6']['interface']); - } - if (empty($config['dhcrelay6']['server'])) { - $pconfig['server'] = ""; - } else { - $pconfig['server'] = $config['dhcrelay6']['server']; - } - $pconfig['agentoption'] = isset($config['dhcrelay6']['agentoption']); -} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { - $input_errors = array(); - $pconfig = $_POST; - - /* input validation */ - $reqdfields = explode(" ", "server interface"); - $reqdfieldsn = array(gettext("Destination Server"), gettext("Interface")); - - do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors); - - if (!empty($pconfig['server'])) { - $checksrv = explode(",", $pconfig['server']); - foreach ($checksrv as $srv) { - if (!is_ipaddrv6($srv)) { - $input_errors[] = gettext("A valid Destination Server IPv6 address must be specified."); - } - } - } - - if (count($input_errors) == 0) { - $config['dhcrelay6']['enable'] = !empty($pconfig['enable']); - $config['dhcrelay6']['interface'] = implode(",", $pconfig['interface']); - $config['dhcrelay6']['agentoption'] = !empty($pconfig['agentoption']); - $config['dhcrelay6']['server'] = $pconfig['server']; - write_config(); - plugins_configure('dhcrelay', false, array('inet6')); - header(url_safe('Location: /services_dhcpv6_relay.php')); - exit; - } -} - -/* set the enabled flag which will tell us if DHCP server is enabled - * on any interface. We will use this to disable dhcp-relay since - * the two are not compatible with each other. - */ -$dhcpd_enabled = false; -if (is_array($config['dhcpdv6'])) { - foreach($config['dhcpdv6'] as $intf => $dhcp) { - if (isset($dhcp['enable']) && !empty($config['interfaces'][$intf]['enable'])) { - $dhcpd_enabled = true; - } - } -} - -$service_hook = 'dhcrelay6'; - -include("head.inc"); - -?> - - - - - -
-
-
- - 0) print_input_errors($input_errors); ?> - -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- /> - -
- - -
- /> - -
- " /> - -
- -
-
-
-
-
-
- -
-
-
-