From d893feaeabc0b87b9c24a1aebba6db30e232bb36 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Wed, 3 May 2023 12:42:57 +0200 Subject: [PATCH] unbound: validate against service's dns_ports --- .../app/models/OPNsense/Unbound/Unbound.php | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.php b/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.php index 13af42c11..5026694c1 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.php +++ b/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.php @@ -1,6 +1,7 @@ * All rights reserved. * @@ -28,9 +29,9 @@ namespace OPNsense\Unbound; -use Phalcon\Messages\Message; use OPNsense\Base\BaseModel; -use OPNsense\Core\Config; +use OPNsense\Core\Backend; +use Phalcon\Messages\Message; class Unbound extends BaseModel { @@ -38,17 +39,21 @@ class Unbound extends BaseModel { $messages = parent::performValidation($validateFullModel); - if ($validateFullModel || $this->general->enabled->isFieldChanged() || $this->general->port->isFieldChanged()) { - $config = Config::getInstance()->object(); - - $dnsmasq_port = !empty((string)$config->dnsmasq->port) ? (string)$config->dnsmasq->port : '53'; - $unbound_port = (string)$this->general->port; - - if (!empty((string)$this->general->enabled) && !empty((string)$config->dnsmasq->enable) && $unbound_port == $dnsmasq_port) { - $messages->appendMessage(new Message( - gettext('Dnsmasq is currently using this port.'), - 'general.' . $this->general->port->getInternalXMLTagName() - )); + if ( + ($validateFullModel || $this->general->enabled->isFieldChanged() || $this->general->port->isFieldChanged()) && + !empty((string)$this->general->enabled) + ) { + foreach (json_decode((new Backend())->configdpRun('service list'), true) as $service) { + if (empty($service['dns_ports'])) { + continue; + } + if ($service['name'] != 'unbound' && in_array((string)$this->general->port, $service['dns_ports'])) { + $messages->appendMessage(new Message( + sprintf(gettext('%s is currently using this port.'), $service['description']), + 'general.' . $this->general->port->getInternalXMLTagName() + )); + break; + } } }