From 4e97afba06d4cc7b51c78a4e832101eedb7aa952 Mon Sep 17 00:00:00 2001 From: Frank Brendel Date: Fri, 25 Jan 2019 15:06:55 +0100 Subject: [PATCH 1/2] monit: add validation for test type --- .../mvc/app/models/OPNsense/Monit/Monit.php | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.php b/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.php index 53a6d3478..5f93d5da6 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.php +++ b/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.php @@ -73,8 +73,22 @@ class Monit extends BaseModel $parentNode = $node->getParentNode(); // perform plugin specific validations switch ($parentNode->getInternalXMLTagName()) { + case 'test': + // test node validations + switch ($node->getInternalXMLTagName()) { + case 'type': + if ($node->isFieldChanged() && + $this->isTestServiceRelated($parentNode->getAttribute('uuid'))) { + $messages->appendMessage(new \Phalcon\Validation\Message( + gettext("Cannot change the type. Test is linked to a service."), + $key + )); + } + break; + } + break; case 'service': - // service type node validations + // service node validations switch ($node->getInternalXMLTagName()) { case 'tests': // test dependencies defined in $this->testSyntax @@ -186,4 +200,22 @@ class Monit extends BaseModel { return @unlink("/tmp/monit.dirty"); } + + /** + * determine if services have links to this test node + * @param uuid of the test node + * @return bool + */ + public function isTestServiceRelated($testUUID = null) + { + $serviceNodes = $this->service->getNodes(); + foreach ($serviceNodes as $serviceNode) { + if (is_array($serviceNode['tests']) && + array_key_exists($testUUID, $serviceNode['tests']) && + $serviceNode['tests'][$testUUID]['selected'] == 1) { + return true; + } + } + return false; + } } From 5bde17012df138d36a211433db7704749e0b391e Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Fri, 1 Mar 2019 10:45:23 +0100 Subject: [PATCH 2/2] Monit, minor cleanups and fixes for https://github.com/opnsense/core/pull/3155 --- .../mvc/app/models/OPNsense/Monit/Monit.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.php b/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.php index 5f93d5da6..69610ace8 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.php +++ b/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.php @@ -77,8 +77,8 @@ class Monit extends BaseModel // test node validations switch ($node->getInternalXMLTagName()) { case 'type': - if ($node->isFieldChanged() && - $this->isTestServiceRelated($parentNode->getAttribute('uuid'))) { + $testUuid = $parentNode->getAttribute('uuid'); + if ($node->isFieldChanged() && $this->isTestServiceRelated($testUuid)) { $messages->appendMessage(new \Phalcon\Validation\Message( gettext("Cannot change the type. Test is linked to a service."), $key @@ -203,17 +203,15 @@ class Monit extends BaseModel /** * determine if services have links to this test node - * @param uuid of the test node + * @param uuid of the test node * @return bool */ public function isTestServiceRelated($testUUID = null) { $serviceNodes = $this->service->getNodes(); - foreach ($serviceNodes as $serviceNode) { - if (is_array($serviceNode['tests']) && - array_key_exists($testUUID, $serviceNode['tests']) && - $serviceNode['tests'][$testUUID]['selected'] == 1) { - return true; + foreach ($this->service->iterateItems() as $serviceNode) { + if (in_array($testUUID, explode(',', (string)$serviceNode->tests))) { + return true; } } return false;