From 7612aa7d8680cbf173a40c7414e7e6b4ded9cea6 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Wed, 2 Nov 2022 12:32:36 -0500 Subject: [PATCH] Support regex in os field replace (#14563) * Support regex in os field replace * Support regex in os field replace --- LibreNMS/OS/Traits/YamlOSDiscovery.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/LibreNMS/OS/Traits/YamlOSDiscovery.php b/LibreNMS/OS/Traits/YamlOSDiscovery.php index 843413588e..436c2dbc59 100644 --- a/LibreNMS/OS/Traits/YamlOSDiscovery.php +++ b/LibreNMS/OS/Traits/YamlOSDiscovery.php @@ -165,10 +165,20 @@ trait YamlOSDiscovery { foreach ($this->osFields as $field) { foreach ($os_yaml["{$field}_replace"] ?? [] as $replacements) { + $search = $replacements; + $replacement = ''; + + // check for a given replacement string (otherwise, remove) if (is_array($replacements) && count($replacements) == 2) { - $device->$field = str_replace($replacements[0], $replacements[1], $device->$field); - } elseif (is_string($replacements)) { - $device->$field = str_replace($replacements, '', $device->$field); + $search = $replacements[0]; + $replacement = $replacements[1]; + } + + // check for regex + if (preg_match($search, $device->$field)) { + $device->$field = preg_replace($search, $replacement, $device->$field); + } else { + $device->$field = str_replace($search, $replacement, $device->$field); } } }