From fad0bffc439b2910d22aacb18e377c2e10b57436 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Sun, 16 Dec 2018 07:42:50 -0600 Subject: [PATCH] Escape SNMP & IPMI shell commands (#9537) hopefully doesn't break anything Mostly issues with snmp oids and options containing spaces. Try to remove all of those. DO NOT DELETE THIS TEXT #### Please note > Please read this information carefully. You can run `./scripts/pre-commit.php` to check your code before submitting. - [x] Have you followed our [code guidelines?](http://docs.librenms.org/Developing/Code-Guidelines/) #### Testers If you would like to test this pull request then please run: `./scripts/github-apply `, i.e `./scripts/github-apply 5926` After you are done testing, you can remove the changes with `./scripts/github-remove`. If there are schema changes, you can ask on discord how to revert. --- LibreNMS/Device/YamlDiscovery.php | 6 +- LibreNMS/Util/ModuleTestHelper.php | 2 +- html/includes/output/capture.inc.php | 35 ++-- includes/billing.php | 2 +- includes/common.php | 46 ++++- includes/definitions/discovery/zynos.yaml | 2 +- includes/discovery/cisco-vrf-lite.inc.php | 4 +- includes/discovery/core.inc.php | 2 +- includes/discovery/ipv6-addresses.inc.php | 4 +- includes/discovery/mempools/arubaos.inc.php | 2 +- includes/discovery/mempools/bdcom.inc.php | 2 +- includes/discovery/mempools/benuos.inc.php | 2 +- includes/discovery/mempools/edgecos.inc.php | 2 +- includes/discovery/mempools/fortios.inc.php | 2 +- includes/discovery/mempools/hpe-ilo.inc.php | 2 +- .../discovery/mempools/juniper-mss.inc.php | 2 +- .../mempools/moxa-etherdevice.inc.php | 2 +- includes/discovery/route.inc.php | 2 +- .../discovery/sensors/fanspeed/benuos.inc.php | 2 +- .../discovery/sensors/humidity/ipoman.inc.php | 2 +- includes/discovery/sensors/ipmi.inc.php | 17 +- .../sensors/temperature/benuos.inc.php | 2 +- .../sensors/temperature/ipoman.inc.php | 2 +- .../sensors/temperature/raritan-pdu.inc.php | 2 +- .../discovery/sensors/voltage/benuos.inc.php | 2 +- includes/discovery/storage/oceanstor.inc.php | 2 +- includes/discovery/storage/onefs.inc.php | 2 +- includes/discovery/vlans/boss.inc.php | 2 +- includes/discovery/vlans/junos.inc.php | 8 +- includes/discovery/vlans/q-bridge-mib.inc.php | 4 +- includes/polling/applications/apache.inc.php | 2 +- .../polling/applications/asterisk.inc.php | 2 +- includes/polling/applications/bind.inc.php | 2 +- .../polling/applications/dhcp-stats.inc.php | 2 +- includes/polling/applications/entropy.inc.php | 2 +- .../applications/fbsd-nfs-client.inc.php | 2 +- .../applications/fbsd-nfs-server.inc.php | 2 +- .../polling/applications/freeradius.inc.php | 2 +- .../polling/applications/freeswitch.inc.php | 2 +- .../polling/applications/mailscanner.inc.php | 2 +- includes/polling/applications/nvidia.inc.php | 2 +- .../polling/applications/os-updates.inc.php | 2 +- includes/polling/applications/php-fpm.inc.php | 2 +- includes/polling/applications/pi-hole.inc.php | 2 +- includes/polling/applications/postfix.inc.php | 2 +- .../polling/applications/postgres.inc.php | 2 +- .../applications/powerdns-dnsdist.inc.php | 2 +- .../polling/applications/powerdns.inc.php | 2 +- includes/polling/applications/proxmox.inc.php | 2 +- .../polling/applications/sdfsinfo.inc.php | 2 +- .../polling/applications/shoutcast.inc.php | 2 +- includes/polling/applications/smart.inc.php | 2 +- includes/polling/applications/unbound.inc.php | 2 +- .../cisco-remote-access-monitor.inc.php | 2 +- includes/polling/core.inc.php | 4 +- includes/polling/functions.inc.php | 2 +- includes/polling/hr-mib.inc.php | 2 +- includes/polling/ipmi.inc.php | 6 +- includes/polling/mempools/3com.inc.php | 2 +- includes/polling/mempools/arubaos.inc.php | 2 +- includes/polling/mempools/bdcom.inc.php | 2 +- includes/polling/mempools/benuos.inc.php | 2 +- .../polling/mempools/dcn-software.inc.php | 2 +- includes/polling/mempools/edgecos.inc.php | 2 +- includes/polling/mempools/fortios.inc.php | 2 +- includes/polling/mempools/hpe-ilo.inc.php | 2 +- includes/polling/mempools/juniper-mss.inc.php | 2 +- .../mempools/moxa-etherdevice-mem.inc.php | 2 +- includes/polling/mempools/stoneos.inc.php | 2 +- includes/polling/os/acos.inc.php | 2 +- includes/polling/os/acsw.inc.php | 2 +- includes/polling/os/airos-af-ltu.inc.php | 2 +- includes/polling/os/alcoma-almp.inc.php | 2 +- includes/polling/os/allied.inc.php | 4 +- includes/polling/os/allworx_voip.inc.php | 2 +- includes/polling/os/aos-emu2.inc.php | 2 +- includes/polling/os/apc.inc.php | 8 +- includes/polling/os/apsoluteos.inc.php | 2 +- includes/polling/os/asa.inc.php | 2 +- includes/polling/os/audiocodes.inc.php | 2 +- includes/polling/os/avocent.inc.php | 2 +- includes/polling/os/ceraos.inc.php | 7 +- includes/polling/os/cimc.inc.php | 2 +- includes/polling/os/cisco.inc.php | 2 +- includes/polling/os/ciscoepc.inc.php | 2 +- includes/polling/os/ciscosrp.inc.php | 2 +- includes/polling/os/ciscowlc.inc.php | 2 +- includes/polling/os/cnpilote.inc.php | 2 +- includes/polling/os/cnpilotr.inc.php | 2 +- includes/polling/os/cxr-ts.inc.php | 2 +- includes/polling/os/cyberoam-utm.inc.php | 2 +- includes/polling/os/dasan-nos.inc.php | 2 +- includes/polling/os/dcn-software.inc.php | 2 +- includes/polling/os/dell-rpdu.inc.php | 2 +- includes/polling/os/dell-ups.inc.php | 2 +- includes/polling/os/dsm.inc.php | 2 +- includes/polling/os/edgecos.inc.php | 2 +- includes/polling/os/ees.inc.php | 2 +- includes/polling/os/eltek-webpower.inc.php | 2 +- includes/polling/os/epmp.inc.php | 2 +- includes/polling/os/extendair.inc.php | 2 +- includes/polling/os/fiberhome-switch.inc.php | 2 +- includes/polling/os/fortios.inc.php | 2 +- includes/polling/os/fortiweb.inc.php | 2 +- includes/polling/os/fortiwlc.inc.php | 2 +- includes/polling/os/fusion.inc.php | 2 +- includes/polling/os/fxm.inc.php | 2 +- includes/polling/os/gaia.inc.php | 2 +- includes/polling/os/generex-ups.inc.php | 2 +- includes/polling/os/gw-eydfa.inc.php | 2 +- includes/polling/os/helios.inc.php | 2 +- includes/polling/os/heliosip.inc.php | 2 +- includes/polling/os/hiveos-wireless.inc.php | 2 +- includes/polling/os/hpe-ilo.inc.php | 2 +- includes/polling/os/hpe-ipdu.inc.php | 2 +- includes/polling/os/hpe-msa.inc.php | 2 +- includes/polling/os/hpe-msl.inc.php | 2 +- includes/polling/os/hpe-rtups.inc.php | 2 +- includes/polling/os/ios.inc.php | 2 +- includes/polling/os/lcos.inc.php | 2 +- includes/polling/os/luminato.inc.php | 2 +- includes/polling/os/mimosa.inc.php | 2 +- includes/polling/os/mrv-od.inc.php | 2 +- includes/polling/os/netagent2.inc.php | 2 +- includes/polling/os/netguardian.inc.php | 2 +- includes/polling/os/ns-bsd.inc.php | 2 +- includes/polling/os/nxos.inc.php | 2 +- includes/polling/os/openbsd.inc.php | 2 +- includes/polling/os/panos.inc.php | 2 +- includes/polling/os/pfsense.inc.php | 2 +- includes/polling/os/pmp.inc.php | 2 +- includes/polling/os/powerlogic.inc.php | 2 +- includes/polling/os/remoteye4.inc.php | 2 +- includes/polling/os/rittal-lcp.inc.php | 2 +- includes/polling/os/secureplatform.inc.php | 2 +- includes/polling/os/sgos.inc.php | 2 +- includes/polling/os/snom.inc.php | 11 +- includes/polling/os/solidserver.inc.php | 2 +- includes/polling/os/sonicwall.inc.php | 2 +- includes/polling/os/stoneos.inc.php | 2 +- includes/polling/os/tpdin.inc.php | 2 +- includes/polling/os/waas.inc.php | 2 +- includes/polling/os/zyxelnwa.inc.php | 2 +- includes/polling/storage/oceanstor.inc.php | 2 +- includes/polling/storage/onefs.inc.php | 2 +- includes/polling/ucd-mib.inc.php | 4 +- .../polling/wireless/cambium-epmp.inc.php | 2 +- .../polling/wireless/canopy-generic.inc.php | 2 +- includes/snmp.inc.php | 190 +++++++++--------- misc/discovery_schema.json | 15 +- tests/YamlTest.php | 19 +- tests/data/ird.json | 52 +---- 152 files changed, 353 insertions(+), 357 deletions(-) diff --git a/LibreNMS/Device/YamlDiscovery.php b/LibreNMS/Device/YamlDiscovery.php index 33cf59d939..cb04010c47 100644 --- a/LibreNMS/Device/YamlDiscovery.php +++ b/LibreNMS/Device/YamlDiscovery.php @@ -199,11 +199,11 @@ class YamlDiscovery foreach ((array)$data['oid'] as $oid) { if (!array_key_exists($oid, $pre_cache)) { if (isset($data['snmp_flags'])) { - $snmp_flag = $data['snmp_flags']; + $snmp_flag = array_wrap($data['snmp_flags']); } else { - $snmp_flag = '-OteQUs'; + $snmp_flag = ['-OteQUs']; } - $snmp_flag .= ' -Ih'; + $snmp_flag[] = '-Ih'; $mib = $device['dynamic_discovery']['mib']; $pre_cache[$oid] = snmpwalk_cache_oid($device, $oid, $pre_cache[$oid], $mib, null, $snmp_flag); diff --git a/LibreNMS/Util/ModuleTestHelper.php b/LibreNMS/Util/ModuleTestHelper.php index 11491253f0..9661816a2e 100644 --- a/LibreNMS/Util/ModuleTestHelper.php +++ b/LibreNMS/Util/ModuleTestHelper.php @@ -144,7 +144,7 @@ class ModuleTestHelper foreach ($snmp_oids as $oid_data) { $this->qPrint(" " . $oid_data['oid']); - $snmp_options = '-OUneb -Ih'; + $snmp_options = ['-OUneb', '-Ih']; if ($oid_data['method'] == 'walk') { $data = snmp_walk($device, $oid_data['oid'], $snmp_options, $oid_data['mib']); } elseif ($oid_data['method'] == 'get') { diff --git a/html/includes/output/capture.inc.php b/html/includes/output/capture.inc.php index 93b1f4bb67..57dc35d099 100644 --- a/html/includes/output/capture.inc.php +++ b/html/includes/output/capture.inc.php @@ -35,48 +35,39 @@ $type = $_REQUEST['type']; switch ($type) { case 'poller': - $cmd = "php ${config['install_dir']}/poller.php -h $hostname -r -f -d"; + $cmd = ['php', $config['install_dir'] . '/poller.php', '-h', $hostname, '-r', '-f', '-d']; $filename = "poller-$hostname.txt"; break; case 'snmpwalk': - $device = device_by_name(mres($hostname)); + $device = device_by_name($hostname); - $cmd = gen_snmpwalk_cmd($device, '.', ' -OUneb'); - - if ($debug) { - $cmd .= ' 2>&1'; - } + $cmd = gen_snmpwalk_cmd($device, '.', '-OUneb'); $filename = $device['os'] . '-' . $device['hostname'] . '.snmpwalk'; break; case 'discovery': - $cmd = "php ${config['install_dir']}/discovery.php -h $hostname -d"; + $cmd = ['php', $config['install_dir'] . '/discovery.php', '-h', $hostname, '-d']; $filename = "discovery-$hostname.txt"; break; default: echo 'You must specify a valid type'; - exit(); + exit; } // ---- Output ---- - +$proc = new \Symfony\Component\Process\Process($cmd); if ($_GET['format'] == 'text') { header("Content-type: text/plain"); header('X-Accel-Buffering: no'); - if (($fp = popen($cmd, "r"))) { - while (!feof($fp)) { - $line = stream_get_line($fp, 1024, PHP_EOL); - echo preg_replace('/\033\[[\d;]+m/', '', $line) . PHP_EOL; - ob_flush(); - flush(); // you have to flush buffer - } - fclose($fp); - } + $proc->run(function ($type, $buffer) { + echo preg_replace('/\033\[[\d;]+m/', '', $buffer) . PHP_EOL; + ob_flush(); + flush(); // you have to flush buffer + }); } elseif ($_GET['format'] == 'download') { - ob_start(); - $output = shell_exec($cmd); - ob_end_clean(); + $proc->run(); + $output = $proc->getOutput(); $output = preg_replace('/\033\[[\d;]+m/', '', $output); diff --git a/includes/billing.php b/includes/billing.php index 5b84776e86..3551e7aacd 100644 --- a/includes/billing.php +++ b/includes/billing.php @@ -79,7 +79,7 @@ function getValue($host, $port, $id, $inout) $oid = 'IF-MIB::ifHC'.$inout.'Octets.'.$id; $device = dbFetchRow("SELECT * from `devices` WHERE `hostname` = '".mres($host)."' LIMIT 1"); - $value = snmp_get($device, $oid, '-O qv'); + $value = snmp_get($device, $oid, '-Oqv'); if (!is_numeric($value)) { $oid = 'IF-MIB::if'.$inout.'Octets.'.$id; diff --git a/includes/common.php b/includes/common.php index 85528fe113..4d9aa8c9fe 100644 --- a/includes/common.php +++ b/includes/common.php @@ -73,25 +73,48 @@ function graylog_severity_label($severity) return ''; } +/** + * Execute and snmp command, filter debug output unless -v is specified + * + * @param array $command + * @return null|string + */ function external_exec($command) { - global $debug,$vdebug; + global $debug, $vdebug; + + $proc = new \Symfony\Component\Process\Process($command); if ($debug && !$vdebug) { - $debug_command = preg_replace('/-c [\S]+/', '-c COMMUNITY', $command); - $debug_command = preg_replace('/-u [\S]+/', '-u USER', $debug_command); - $debug_command = preg_replace('/-U [\S]+/', '-u USER', $debug_command); - $debug_command = preg_replace('/-A [\S]+/', '-A PASSWORD', $debug_command); - $debug_command = preg_replace('/-X [\S]+/', '-X PASSWORD', $debug_command); - $debug_command = preg_replace('/-P [\S]+/', '-P PASSWORD', $debug_command); - $debug_command = preg_replace('/-H [\S]+/', '-H HOSTNAME', $debug_command); - $debug_command = preg_replace('/(udp|udp6|tcp|tcp6):([^:]+):([\d]+)/', '\1:HOSTNAME:\3', $debug_command); + $patterns = [ + '/-c\' \'[\S]+/', + '/-u\' \'[\S]+/', + '/-U\' \'[\S]+/', + '/-A\' \'[\S]+/', + '/-X\' \'[\S]+/', + '/-P\' \'[\S]+/', + '/-H\' \'[\S]+/', + '/(udp|udp6|tcp|tcp6):([^:]+):([\d]+)/', + ]; + $replacements = [ + '-c\' \'COMMUNITY', + '-u\' \'USER', + '-u\' \'USER', + '-A\' \'PASSWORD', + '-X\' \'PASSWORD', + '-P\' \'PASSWORD', + '-H\' \'HOSTNAME', + '\1:HOSTNAME:\3', + ]; + + $debug_command = preg_replace($patterns, $replacements, $proc->getCommandLine()); c_echo('SNMP[%c' . $debug_command . "%n]\n"); } elseif ($vdebug) { - c_echo('SNMP[%c'.$command."%n]\n"); + c_echo('SNMP[%c'.$proc->getCommandLine()."%n]\n"); } - $output = shell_exec($command); + $proc->run(); + $output = $proc->getOutput(); if ($debug && !$vdebug) { $ip_regex = '/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/'; @@ -100,6 +123,7 @@ function external_exec($command) } elseif ($vdebug) { d_echo($output . PHP_EOL); } + d_echo($proc->getErrorOutput()); return $output; } diff --git a/includes/definitions/discovery/zynos.yaml b/includes/definitions/discovery/zynos.yaml index cf9826e69f..6beb3c5a1b 100644 --- a/includes/definitions/discovery/zynos.yaml +++ b/includes/definitions/discovery/zynos.yaml @@ -5,7 +5,7 @@ modules: - oid: ZYXEL-GS2200-24-MIB::sysMgmtCPUUsage value: sysMgmtCPUUsage - snmp_flags: '-OeQUs -Pu' # workaround for underscores in mib + snmp_flags: ['-OeQUs', '-Pu'] # workaround for underscores in mib num_oid: '.1.3.6.1.4.1.890.1.5.8.55.12.7.{{ $index }}' - oid: sysMgmtCPU5SecUsage diff --git a/includes/discovery/cisco-vrf-lite.inc.php b/includes/discovery/cisco-vrf-lite.inc.php index cf781e6d22..5661788f36 100644 --- a/includes/discovery/cisco-vrf-lite.inc.php +++ b/includes/discovery/cisco-vrf-lite.inc.php @@ -28,7 +28,7 @@ if (Config::get('enable_vrf_lite_cisco')) { $mib = "SNMP-COMMUNITY-MIB"; $mib = "CISCO-CONTEXT-MAPPING-MIB"; //-Osq because if i put the n the oid from the first command is not the same of this one - $listVrf = snmp_walk($device, "cContextMappingVrfName", "-Osq -Ln", $mib, null); + $listVrf = snmp_walk($device, "cContextMappingVrfName", ['-Osq', '-Ln'], $mib, null); $listVrf = str_replace("cContextMappingVrfName.", "", $listVrf); $listVrf = str_replace('"', "", $listVrf); $listVrf = trim($listVrf); @@ -45,7 +45,7 @@ if (Config::get('enable_vrf_lite_cisco')) { } unset($listVrf); - $listIntance = snmp_walk($device, "cContextMappingProtoInstName", "-Osq -Ln", $mib, null); + $listIntance = snmp_walk($device, "cContextMappingProtoInstName", ['-Osq', '-Ln'], $mib, null); $listIntance = str_replace("cContextMappingProtoInstName.", "", $listIntance); $listIntance = str_replace('"', "", $listIntance); $listIntance = trim($listIntance); diff --git a/includes/discovery/core.inc.php b/includes/discovery/core.inc.php index a7c1a6bc22..936a9e11a3 100644 --- a/includes/discovery/core.inc.php +++ b/includes/discovery/core.inc.php @@ -1,6 +1,6 @@ $snmpdata['.1.3.6.1.2.1.1.2.0'], diff --git a/includes/discovery/ipv6-addresses.inc.php b/includes/discovery/ipv6-addresses.inc.php index 3ea1f51597..e561b3112a 100644 --- a/includes/discovery/ipv6-addresses.inc.php +++ b/includes/discovery/ipv6-addresses.inc.php @@ -8,7 +8,7 @@ if (key_exists('vrf_lite_cisco', $device) && (count($device['vrf_lite_cisco'])!= foreach ($vrfs_lite_cisco as $vrf) { $device['context_name']=$vrf['context_name']; - $oids = snmp_walk($device, 'ipAddressIfIndex.ipv6', '-Ln -Osq', 'IP-MIB'); + $oids = snmp_walk($device, 'ipAddressIfIndex.ipv6', ['-Osq', '-Ln'], 'IP-MIB'); $oids = str_replace('ipAddressIfIndex.ipv6.', '', $oids); $oids = str_replace('"', '', $oids); $oids = str_replace('IP-MIB::', '', $oids); @@ -48,7 +48,7 @@ foreach ($vrfs_lite_cisco as $vrf) { } //end foreach if (!$oids) { - $oids = snmp_walk($device, 'ipv6AddrPfxLength', '-Ln -Osq -OnU', 'IPV6-MIB'); + $oids = snmp_walk($device, 'ipv6AddrPfxLength', ['-OsqnU', '-Ln'], 'IPV6-MIB'); $oids = str_replace('.1.3.6.1.2.1.55.1.8.1.2.', '', $oids); $oids = str_replace('"', '', $oids); $oids = trim($oids); diff --git a/includes/discovery/mempools/arubaos.inc.php b/includes/discovery/mempools/arubaos.inc.php index 50a6f02bd7..26c7b1a073 100644 --- a/includes/discovery/mempools/arubaos.inc.php +++ b/includes/discovery/mempools/arubaos.inc.php @@ -3,7 +3,7 @@ if ($device['os'] === 'arubaos') { echo 'ARUBAOS-MEMORY-POOL: '; - $memory_pool = snmp_get_multi_oid($device, 'sysXMemorySize.1 sysXMemoryUsed.1 sysXMemoryFree.1', '-OQUs', 'WLSX-SWITCH-MIB'); + $memory_pool = snmp_get_multi_oid($device, ['sysXMemorySize.1', 'sysXMemoryUsed.1', 'sysXMemoryFree.1'], '-OQUs', 'WLSX-SWITCH-MIB'); $total = $memory_pool['sysXMemorySize.1']; $used = $memory_pool['sysXMemoryUsed.1']; diff --git a/includes/discovery/mempools/bdcom.inc.php b/includes/discovery/mempools/bdcom.inc.php index b7ad6edab7..9d48962ec0 100644 --- a/includes/discovery/mempools/bdcom.inc.php +++ b/includes/discovery/mempools/bdcom.inc.php @@ -19,7 +19,7 @@ if ($device['os'] == 'bdcom') { echo 'BDCOM: '; - $memory_pool = snmp_get_multi_oid($device, 'bdcomMemoryPoolUsed.0 bdcomMemoryPoolFree.0', '-OQUs', 'BDCOM-MEMORY-POOL-MIB'); + $memory_pool = snmp_get_multi_oid($device, ['bdcomMemoryPoolUsed.0', 'bdcomMemoryPoolFree.0'], '-OQUs', 'BDCOM-MEMORY-POOL-MIB'); if (is_numeric($memory_pool['bdcomMemoryPoolUsed.0']) && is_numeric($memory_pool['bdcomMemoryPoolFree.0'])) { discover_mempool($valid_mempool, $device, 0, 'bdcom', 'Memory', '1', null, null); diff --git a/includes/discovery/mempools/benuos.inc.php b/includes/discovery/mempools/benuos.inc.php index 2c6315c7da..bef2f6b506 100644 --- a/includes/discovery/mempools/benuos.inc.php +++ b/includes/discovery/mempools/benuos.inc.php @@ -2,7 +2,7 @@ if ($device['os'] === 'benuos') { echo 'BENU-HOST-MIB: '; - $memdata = snmp_get_multi($device, 'bSysTotalMem.0 bSysMemUsed.0 bSysMemFree.0', '-OQUs', 'BENU-HOST-MIB'); + $memdata = snmp_get_multi($device, ['bSysTotalMem.0', 'bSysMemUsed.0', 'bSysMemFree.0'], '-OQUs', 'BENU-HOST-MIB'); $total = $memdata[0]['bSysTotalMem']; $used = $memdata[0]['bSysMemUsed']; $free = $memdata[0]['bSysMemFree']; diff --git a/includes/discovery/mempools/edgecos.inc.php b/includes/discovery/mempools/edgecos.inc.php index cb5b3265da..29c7cc0a8b 100644 --- a/includes/discovery/mempools/edgecos.inc.php +++ b/includes/discovery/mempools/edgecos.inc.php @@ -39,7 +39,7 @@ if ($device['os'] == 'edgecos') { $temp_mibs = 'ES3510MA-MIB'; }; - $temp_data = snmp_get_multi_oid($device, 'memoryTotal.0 memoryFreed.0', '-OUQs', $temp_mibs); + $temp_data = snmp_get_multi_oid($device, ['memoryTotal.0', 'memoryFreed.0'], '-OUQs', $temp_mibs); $total = $temp_data['memoryTotal.0']; $avail = $temp_data['memoryFreed.0']; $used = $total - $avail; diff --git a/includes/discovery/mempools/fortios.inc.php b/includes/discovery/mempools/fortios.inc.php index 66811b8197..424b87a349 100644 --- a/includes/discovery/mempools/fortios.inc.php +++ b/includes/discovery/mempools/fortios.inc.php @@ -2,7 +2,7 @@ if ($device['os'] == 'fortios') { d_echo('FortiOS Memory:'); - $temp_data = snmp_get_multi_oid($device, 'fmSysMemCapacity.0 fmSysMemUsed.0', '-OUQs', 'FORTINET-FORTIMANAGER-FORTIANALYZER-MIB'); + $temp_data = snmp_get_multi_oid($device, ['fmSysMemCapacity.0', 'fmSysMemUsed.0'], '-OUQs', 'FORTINET-FORTIMANAGER-FORTIANALYZER-MIB'); if ((is_numeric($temp_data['fmSysMemCapacity.0'])) && (is_numeric($temp_data['fmSysMemUsed.0']))) { discover_mempool($valid_mempool, $device, 0, 'fortios', 'Main Memory', '1', null, null); } diff --git a/includes/discovery/mempools/hpe-ilo.inc.php b/includes/discovery/mempools/hpe-ilo.inc.php index 9f2a8ccd06..da589529c8 100644 --- a/includes/discovery/mempools/hpe-ilo.inc.php +++ b/includes/discovery/mempools/hpe-ilo.inc.php @@ -3,7 +3,7 @@ if ($device['os'] == 'hpe-ilo') { echo 'HPE ILO4 '; - $memory_pool = snmp_get_multi_oid($device, 'cpqHoPhysicalMemoryFree.0 cpqHoPhysicalMemorySize.0 cpqHoPagingMemoryFree.0 cpqHoPagingMemorySize.0', '-OQUs', 'CPQHOST-MIB'); + $memory_pool = snmp_get_multi_oid($device, ['cpqHoPhysicalMemoryFree.0', 'cpqHoPhysicalMemorySize.0', 'cpqHoPagingMemoryFree.0', 'cpqHoPagingMemorySize.0'], '-OQUs', 'CPQHOST-MIB'); $mem_free = $memory_pool['cpqHoPhysicalMemoryFree.0']; $mem_capacity = $memory_pool['cpqHoPhysicalMemorySize.0']; diff --git a/includes/discovery/mempools/juniper-mss.inc.php b/includes/discovery/mempools/juniper-mss.inc.php index 4e86afec95..23df025a07 100644 --- a/includes/discovery/mempools/juniper-mss.inc.php +++ b/includes/discovery/mempools/juniper-mss.inc.php @@ -13,7 +13,7 @@ if ($device['os'] == "juniper-mss") { d_echo('Juniper MSS : '); - $memory_pool = snmp_get_multi_oid($device, 'trpzSysCpuMemoryInstantUsage.0 trpzSysCpuMemorySize.0', '-OQUs', 'TRAPEZE-NETWORKS-SYSTEM-MIB'); + $memory_pool = snmp_get_multi_oid($device, ['trpzSysCpuMemoryInstantUsage.0', 'trpzSysCpuMemorySize.0'], '-OQUs', 'TRAPEZE-NETWORKS-SYSTEM-MIB'); $used = $memory_pool['trpzSysCpuMemoryInstantUsage.0']; $total = $memory_pool['trpzSysCpuMemorySize.0']; diff --git a/includes/discovery/mempools/moxa-etherdevice.inc.php b/includes/discovery/mempools/moxa-etherdevice.inc.php index 31ca8e829b..4aa1bbd275 100644 --- a/includes/discovery/mempools/moxa-etherdevice.inc.php +++ b/includes/discovery/mempools/moxa-etherdevice.inc.php @@ -21,7 +21,7 @@ if ($device['os'] == 'moxa-etherdevice') { $mibmod = 'MOXA-EDSG508E-MIB'; } - $mem_res = snmp_get_multi_oid($device, 'totalMemory.0 freeMemory.0', '-OQUs', $mibmod); + $mem_res = snmp_get_multi_oid($device, ['totalMemory.0', 'freeMemory.0'], '-OQUs', $mibmod); $total = $mem_res['totalMemory.0']; $avail = $mem_res['freeMemory.0']; diff --git a/includes/discovery/route.inc.php b/includes/discovery/route.inc.php index 2e58a8db4c..151462c356 100644 --- a/includes/discovery/route.inc.php +++ b/includes/discovery/route.inc.php @@ -124,7 +124,7 @@ if ($device['os_group'] == "cisco") { ///////////ipRouteMask////////////////////// $oid = '.1.3.6.1.2.1.4.21.1.11'; - $resultHelp = snmp_walk($device, $oid, "-Osqn -Ln", $mib, null); + $resultHelp = snmp_walk($device, $oid, ['-Osq', '-Ln'], $mib, null); $resultHelp = trim($resultHelp); $resultHelp = str_replace("$oid.", "", $resultHelp); diff --git a/includes/discovery/sensors/fanspeed/benuos.inc.php b/includes/discovery/sensors/fanspeed/benuos.inc.php index 837ce5f391..afa489c48e 100644 --- a/includes/discovery/sensors/fanspeed/benuos.inc.php +++ b/includes/discovery/sensors/fanspeed/benuos.inc.php @@ -3,7 +3,7 @@ // Adapated from Bluecoat sgos discovery echo 'Benu Sensors '; -$data = snmp_get_multi($device, 'benuSensorName.1.4 benuSensorName.1.5 benuSensorName.1.6 benuSensorName.1.7 benuSensorName.1.8 benuSensorName.1.9 benuSensorValue.1.4 benuSensorValue.1.5 benuSensorValue.1.6 benuSensorValue.1.7 benuSensorValue.1.8 benuSensorValue.1.9', '-OQUs', 'BENU-CHASSIS-MIB'); +$data = snmp_get_multi($device, ['benuSensorName.1.4', 'benuSensorName.1.5', 'benuSensorName.1.6', 'benuSensorName.1.7', 'benuSensorName.1.8', 'benuSensorName.1.9', 'benuSensorValue.1.4', 'benuSensorValue.1.5', 'benuSensorValue.1.6', 'benuSensorValue.1.7', 'benuSensorValue.1.8', 'benuSensorValue.1.9'], '-OQUs', 'BENU-CHASSIS-MIB'); $sensor_index = 0; for ($index = 4; $index <= 9; $index++) { //Benu Fans are index 4 thru 9 diff --git a/includes/discovery/sensors/humidity/ipoman.inc.php b/includes/discovery/sensors/humidity/ipoman.inc.php index 75a9bcb369..678e048505 100644 --- a/includes/discovery/sensors/humidity/ipoman.inc.php +++ b/includes/discovery/sensors/humidity/ipoman.inc.php @@ -3,7 +3,7 @@ // FIXME: EMD "stack" support // FIXME: What to do with IPOMANII-MIB::ipmEnvEmdConfigHumiOffset.0 ? echo ' IPOMANII-MIB '; -$emd_installed = snmp_get($device, 'IPOMANII-MIB::ipmEnvEmdStatusEmdType.0', ' -Oqv'); +$emd_installed = snmp_get($device, 'IPOMANII-MIB::ipmEnvEmdStatusEmdType.0', '-Oqv'); if ($emd_installed == 'eMD-HT') { $descr = snmp_get($device, 'IPOMANII-MIB::ipmEnvEmdConfigHumiName.0', '-Oqv'); diff --git a/includes/discovery/sensors/ipmi.inc.php b/includes/discovery/sensors/ipmi.inc.php index 1030b37a23..b7e8349902 100644 --- a/includes/discovery/sensors/ipmi.inc.php +++ b/includes/discovery/sensors/ipmi.inc.php @@ -9,13 +9,19 @@ if ($ipmi['host'] = get_dev_attrib($device, 'ipmi_hostname')) { $ipmi['user'] = get_dev_attrib($device, 'ipmi_username'); $ipmi['password'] = get_dev_attrib($device, 'ipmi_password'); + $cmd = [Config::get('ipmitool', 'ipmitool')]; if (Config::get('own_hostname') != $device['hostname'] || $ipmi['host'] != 'localhost') { - $remote = " -H ".$ipmi['host']." -U '".$ipmi['user']."' -P '".$ipmi['password']."' -L USER"; + array_push($cmd, '-H', $ipmi['host'], '-U', $ipmi['user'], '-P', $ipmi['password'], '-L', 'USER'); } - foreach (Config::get('ipmi.type', array()) as $ipmi_type) { - $results = external_exec(Config::get('ipmitool')." -I $ipmi_type".$remote.' sensor 2>/dev/null|sort|sed \'/discrete/d\''); - if ($results != '') { + foreach (Config::get('ipmi.type', []) as $ipmi_type) { + $results = explode(PHP_EOL, external_exec(array_merge($cmd, ['-I', $ipmi_type, 'sensor']))); + + array_filter($results, function ($line) { + return !str_contains($line, 'discrete'); + }); + + if (!empty($results)) { set_dev_attrib($device, 'ipmi_type', $ipmi_type); echo "$ipmi_type "; break; @@ -24,7 +30,8 @@ if ($ipmi['host'] = get_dev_attrib($device, 'ipmi_hostname')) { $index = 0; - foreach (explode("\n", $results) as $sensor) { + sort($results); + foreach ($results as $sensor) { // BB +1.1V IOH | 1.089 | Volts | ok | na | 1.027 | 1.054 | 1.146 | 1.177 | na $values = array_map('trim', explode('|', $sensor)); list($desc,$current,$unit,$state,$low_nonrecoverable,$low_limit,$low_warn,$high_warn,$high_limit,$high_nonrecoverable) = $values; diff --git a/includes/discovery/sensors/temperature/benuos.inc.php b/includes/discovery/sensors/temperature/benuos.inc.php index 5ec9daa2ff..24370145bb 100644 --- a/includes/discovery/sensors/temperature/benuos.inc.php +++ b/includes/discovery/sensors/temperature/benuos.inc.php @@ -4,7 +4,7 @@ echo 'Benu Sensors '; -$data = snmp_get_multi($device, 'benuSensorName.1.1 benuSensorName.1.2 benuSensorName.1.3 benuSensorValue.1.1 benuSensorValue.1.2 benuSensorValue.1.3', '-OQUs', 'BENU-CHASSIS-MIB'); +$data = snmp_get_multi($device, ['benuSensorName.1.1', 'benuSensorName.1.2', 'benuSensorName.1.3', 'benuSensorValue.1.1', 'benuSensorValue.1.2', 'benuSensorValue.1.3'], '-OQUs', 'BENU-CHASSIS-MIB'); $sensor_index = 0; for ($index = 1; $index <= 3; $index++) { //Benu Temp Sensors are index 1 thru 3 diff --git a/includes/discovery/sensors/temperature/ipoman.inc.php b/includes/discovery/sensors/temperature/ipoman.inc.php index a908206221..9b7120e526 100644 --- a/includes/discovery/sensors/temperature/ipoman.inc.php +++ b/includes/discovery/sensors/temperature/ipoman.inc.php @@ -3,7 +3,7 @@ // FIXME: EMD "stack" support? // FIXME: What to do with IPOMANII-MIB::ipmEnvEmdConfigTempOffset.0 ? echo ' IPOMANII-MIB '; -$emd_installed = snmp_get($device, 'IPOMANII-MIB::ipmEnvEmdStatusEmdType.0', ' -Oqv'); +$emd_installed = snmp_get($device, 'IPOMANII-MIB::ipmEnvEmdStatusEmdType.0', '-Oqv'); if ($emd_installed != 'disabled') { $descr = snmp_get($device, 'IPOMANII-MIB::ipmEnvEmdConfigTempName.0', '-Oqv'); diff --git a/includes/discovery/sensors/temperature/raritan-pdu.inc.php b/includes/discovery/sensors/temperature/raritan-pdu.inc.php index 4f4441c80d..b5eb4307dd 100644 --- a/includes/discovery/sensors/temperature/raritan-pdu.inc.php +++ b/includes/discovery/sensors/temperature/raritan-pdu.inc.php @@ -27,7 +27,7 @@ $index = 'unitCpuTemp.0'; $oid = '.1.3.6.1.4.1.13742.4.1.3.1.5.0'; $descr = 'Processor Temp'; $divisor = 10; -$raritan_data = snmp_get_multi_oid($device, 'unitCpuTemp.0 unitTempLowerWarning.0 unitTempLowerCritical.0 unitTempUpperWarning.0 unitTempUpperCritical.0', '-OUQs', 'PDU-MIB'); +$raritan_data = snmp_get_multi_oid($device, ['unitCpuTemp.0', 'unitTempLowerWarning.0', 'unitTempLowerCritical.0', 'unitTempUpperWarning.0', 'unitTempUpperCritical.0'], '-OUQs', 'PDU-MIB'); if (is_array($raritan_data) && !empty($raritan_data)) { $low_limit = $raritan_data['unitTempLowerCritical.0']; $low_warn_limit = $raritan_data['unitTempLowerWarning.0']; diff --git a/includes/discovery/sensors/voltage/benuos.inc.php b/includes/discovery/sensors/voltage/benuos.inc.php index 03150ea4f8..ad98778cf3 100644 --- a/includes/discovery/sensors/voltage/benuos.inc.php +++ b/includes/discovery/sensors/voltage/benuos.inc.php @@ -4,7 +4,7 @@ echo 'Benu Sensors '; $sensor_index = 0; -$data = snmp_get_multi($device, 'benuSensorName.1.10 benuSensorName.1.11 benuSensorValue.1.10 benuSensorValue.1.11', '-OQUs', 'BENU-CHASSIS-MIB'); +$data = snmp_get_multi($device, ['benuSensorName.1.10', 'benuSensorName.1.11', 'benuSensorValue.1.10', 'benuSensorValue.1.11'], '-OQUs', 'BENU-CHASSIS-MIB'); $sensor_index = 0; for ($index = 10; $index <= 11; $index++) { //Benu Voltage Sensors are index 10 and 11 diff --git a/includes/discovery/storage/oceanstor.inc.php b/includes/discovery/storage/oceanstor.inc.php index 4a4bc01062..190323278d 100644 --- a/includes/discovery/storage/oceanstor.inc.php +++ b/includes/discovery/storage/oceanstor.inc.php @@ -24,7 +24,7 @@ */ if ($device['os'] === 'oceanstor') { - $oceanstor_tmp = snmp_get_multi_oid($device, 'usedCapacity.0 totalCapacity.0', '-OUQs', 'ISM-STORAGE-SVC-MIB'); + $oceanstor_tmp = snmp_get_multi_oid($device, ['usedCapacity.0', 'totalCapacity.0'], '-OUQs', 'ISM-STORAGE-SVC-MIB'); $fstype = "dsk"; $descr = "File System"; diff --git a/includes/discovery/storage/onefs.inc.php b/includes/discovery/storage/onefs.inc.php index d0f0f52d91..8df576f03b 100644 --- a/includes/discovery/storage/onefs.inc.php +++ b/includes/discovery/storage/onefs.inc.php @@ -24,7 +24,7 @@ */ if ($device['os'] === 'onefs') { - $oids = snmp_get_multi_oid($device, 'ifsTotalBytes.0 ifsUsedBytes.0 ifsAvailableBytes.0', '-OUQn', 'ISILON-MIB'); + $oids = snmp_get_multi_oid($device, ['ifsTotalBytes.0', 'ifsUsedBytes.0', 'ifsAvailableBytes.0'], '-OUQn', 'ISILON-MIB'); $fstype = "ifs"; $descr = "Internal File System"; diff --git a/includes/discovery/vlans/boss.inc.php b/includes/discovery/vlans/boss.inc.php index b2150db468..78e8f738ee 100644 --- a/includes/discovery/vlans/boss.inc.php +++ b/includes/discovery/vlans/boss.inc.php @@ -5,7 +5,7 @@ echo 'RC-VLAN-MIB VLANs: '; if ($device['os'] == 'boss') { $vtpdomain_id = '1'; $vlans = snmpwalk_cache_oid($device, 'rcVlanName', array(), 'RC-VLAN-MIB'); - $tagoruntag = snmpwalk_cache_oid($device, 'rcVlanPortMembers', array(), 'RC-VLAN-MIB', null, '-OQUs --hexOutputLength=0'); + $tagoruntag = snmpwalk_cache_oid($device, 'rcVlanPortMembers', array(), 'RC-VLAN-MIB', null, ['-OQUs', '--hexOutputLength=0']); $port_pvids = snmpwalk_cache_oid($device, 'rcVlanPortDefaultVlanId', array(), 'RC-VLAN-MIB'); $port_mode = snmpwalk_cache_oid($device, 'rcVlanPortPerformTagging', array(), 'RC-VLAN-MIB'); diff --git a/includes/discovery/vlans/junos.inc.php b/includes/discovery/vlans/junos.inc.php index e2798896f8..eb4ca89ea2 100644 --- a/includes/discovery/vlans/junos.inc.php +++ b/includes/discovery/vlans/junos.inc.php @@ -10,13 +10,13 @@ if ($vlanversion == 'version1' || $vlanversion == '2') { $vlans = snmpwalk_cache_oid($device, 'jnxExVlanName', array(), 'JUNIPER-VLAN-MIB'); if (empty($vlans)) { $vlans = snmpwalk_cache_oid($device, 'jnxL2aldVlanName', array(), 'JUNIPER-L2ALD-MIB'); - $tagoruntag = snmpwalk_cache_oid($device, 'jnxL2aldVlanTag', array(), 'JUNIPER-L2ALD-MIB', null, '-OQUs --hexOutputLength=0'); - $untag = snmpwalk_cache_oid($device, 'jnxExVlanPortTagness', array(), 'JUNIPER-VLAN-MIB', null, '-OQeUs --hexOutputLength=0'); + $tagoruntag = snmpwalk_cache_oid($device, 'jnxL2aldVlanTag', array(), 'JUNIPER-L2ALD-MIB', null, ['-OQUs', '--hexOutputLength=0']); + $untag = snmpwalk_cache_oid($device, 'jnxExVlanPortTagness', array(), 'JUNIPER-VLAN-MIB', null, ['-OQeUs', '--hexOutputLength=0']); $tmp_tag = 'jnxL2aldVlanTag'; $tmp_name = 'jnxL2aldVlanName'; } else { - $tagoruntag = snmpwalk_cache_oid($device, 'jnxExVlanTag', array(), 'JUNIPER-VLAN-MIB', null, '-OQUs --hexOutputLength=0'); - $untag = snmpwalk_cache_oid($device, 'jnxExVlanPortTagness', array(), 'JUNIPER-VLAN-MIB', null, '-OQeUs --hexOutputLength=0'); + $tagoruntag = snmpwalk_cache_oid($device, 'jnxExVlanTag', array(), 'JUNIPER-VLAN-MIB', null, ['-OQUs', '--hexOutputLength=0']); + $untag = snmpwalk_cache_oid($device, 'jnxExVlanPortTagness', array(), 'JUNIPER-VLAN-MIB', null, ['-OQeUs', '--hexOutputLength=0']); $tmp_tag = 'jnxExVlanTag'; $tmp_name = 'jnxExVlanName'; } diff --git a/includes/discovery/vlans/q-bridge-mib.inc.php b/includes/discovery/vlans/q-bridge-mib.inc.php index 26cbb6346b..2cbef9361f 100644 --- a/includes/discovery/vlans/q-bridge-mib.inc.php +++ b/includes/discovery/vlans/q-bridge-mib.inc.php @@ -8,8 +8,8 @@ if ($vlanversion == 'version1' || $vlanversion == '2') { $vtpdomain_id = '1'; $vlans = snmpwalk_cache_oid($device, 'dot1qVlanStaticName', array(), 'Q-BRIDGE-MIB'); - $tagoruntag = snmpwalk_cache_oid($device, 'dot1qVlanCurrentEgressPorts', array(), 'Q-BRIDGE-MIB', null, '-OQUs --hexOutputLength=0'); - $untag = snmpwalk_cache_oid($device, 'dot1qVlanCurrentUntaggedPorts', array(), 'Q-BRIDGE-MIB', null, '-OQUs --hexOutputLength=0'); + $tagoruntag = snmpwalk_cache_oid($device, 'dot1qVlanCurrentEgressPorts', array(), 'Q-BRIDGE-MIB', null, ['-OQUs', '--hexOutputLength=0']); + $untag = snmpwalk_cache_oid($device, 'dot1qVlanCurrentUntaggedPorts', array(), 'Q-BRIDGE-MIB', null, ['-OQUs', '--hexOutputLength=0']); // drop dot1qVlanTimeMark, we don't care about it $tagoruntag = array_reduce(array_keys($tagoruntag), function ($result, $key) use ($tagoruntag) { diff --git a/includes/polling/applications/apache.inc.php b/includes/polling/applications/apache.inc.php index f4a59c37f8..aecb661a19 100644 --- a/includes/polling/applications/apache.inc.php +++ b/includes/polling/applications/apache.inc.php @@ -8,7 +8,7 @@ $app_id = $app['app_id']; if (!empty($agent_data['app'][$name])) { $apache = $agent_data['app'][$name]; } else { - $options = '-O qv'; + $options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.6.97.112.97.99.104.101'; $apache = snmp_get($device, $oid, $options); } diff --git a/includes/polling/applications/asterisk.inc.php b/includes/polling/applications/asterisk.inc.php index 0edbc3ecb0..e58d46d470 100644 --- a/includes/polling/applications/asterisk.inc.php +++ b/includes/polling/applications/asterisk.inc.php @@ -7,7 +7,7 @@ $app_id = $app['app_id']; if (!empty($agent_data[$name])) { $rawdata = $agent_data[$name]; } else { - $options = '-O qv'; + $options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.97.115.116.101.114.105.115.107'; $rawdata = snmp_walk($device, $oid, $options); $rawdata = str_replace("<<>>\n", '', $rawdata); diff --git a/includes/polling/applications/bind.inc.php b/includes/polling/applications/bind.inc.php index f676fae7ce..8ffc64d8bd 100644 --- a/includes/polling/applications/bind.inc.php +++ b/includes/polling/applications/bind.inc.php @@ -10,7 +10,7 @@ echo " $name"; if (!empty($agent_data['app'][$name])) { $bind = $agent_data['app'][$name]; } else { - $options = '-O qv'; + $options = '-Oqv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = 'nsExtendOutputFull.4.98.105.110.100'; $bind = snmp_get($device, $oid, $options, $mib); diff --git a/includes/polling/applications/dhcp-stats.inc.php b/includes/polling/applications/dhcp-stats.inc.php index df143e4659..464b9476e6 100644 --- a/includes/polling/applications/dhcp-stats.inc.php +++ b/includes/polling/applications/dhcp-stats.inc.php @@ -4,7 +4,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'dhcp-stats'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.9.100.104.99.112.115.116.97.116.115'; diff --git a/includes/polling/applications/entropy.inc.php b/includes/polling/applications/entropy.inc.php index a9941b941b..dc223dd80d 100644 --- a/includes/polling/applications/entropy.inc.php +++ b/includes/polling/applications/entropy.inc.php @@ -3,7 +3,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'entropy'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.7.101.110.116.114.111.112.121.1'; diff --git a/includes/polling/applications/fbsd-nfs-client.inc.php b/includes/polling/applications/fbsd-nfs-client.inc.php index 73539b14a0..bbd5d1b18b 100644 --- a/includes/polling/applications/fbsd-nfs-client.inc.php +++ b/includes/polling/applications/fbsd-nfs-client.inc.php @@ -4,7 +4,7 @@ $app_id = $app['app_id']; use LibreNMS\RRD\RrdDefinition; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.13.102.98.115.100.110.102.115.99.108.105.101.110.116'; $nfsclient = snmp_walk($device, $oid, $options); diff --git a/includes/polling/applications/fbsd-nfs-server.inc.php b/includes/polling/applications/fbsd-nfs-server.inc.php index 063247b262..88d66f1877 100644 --- a/includes/polling/applications/fbsd-nfs-server.inc.php +++ b/includes/polling/applications/fbsd-nfs-server.inc.php @@ -4,7 +4,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'fbsd-nfs-server'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.13.102.98.115.100.110.102.115.115.101.114.118.101.114'; $nfsserver = snmp_walk($device, $oid, $options); diff --git a/includes/polling/applications/freeradius.inc.php b/includes/polling/applications/freeradius.inc.php index e94d84cd1d..15975f8508 100644 --- a/includes/polling/applications/freeradius.inc.php +++ b/includes/polling/applications/freeradius.inc.php @@ -10,7 +10,7 @@ echo " $name"; if (!empty($agent_data['app'][$name])) { $rawdata = $agent_data['app'][$name]; } else { - $options = '-O qv'; + $options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.10.102.114.101.101.114.97.100.105.117.115'; $rawdata = snmp_get($device, $oid, $options); } diff --git a/includes/polling/applications/freeswitch.inc.php b/includes/polling/applications/freeswitch.inc.php index 3d84eca6dd..e06d49e60e 100644 --- a/includes/polling/applications/freeswitch.inc.php +++ b/includes/polling/applications/freeswitch.inc.php @@ -7,7 +7,7 @@ $app_id = $app['app_id']; if (!empty($agent_data[$name])) { $rawdata = $agent_data[$name]; } else { - $options = '-O qv'; + $options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.10.102.114.101.101.115.119.105.116.99.104'; $rawdata = snmp_walk($device, $oid, $options); $rawdata = str_replace("<<>>\n", '', $rawdata); diff --git a/includes/polling/applications/mailscanner.inc.php b/includes/polling/applications/mailscanner.inc.php index 2093914894..39e4399787 100644 --- a/includes/polling/applications/mailscanner.inc.php +++ b/includes/polling/applications/mailscanner.inc.php @@ -4,7 +4,7 @@ use LibreNMS\RRD\RrdDefinition; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.11.109.97.105.108.115.99.97.110.110.101.114'; $mailscanner = snmp_get($device, $oid, $options); diff --git a/includes/polling/applications/nvidia.inc.php b/includes/polling/applications/nvidia.inc.php index 6eb097d433..98af8d675a 100644 --- a/includes/polling/applications/nvidia.inc.php +++ b/includes/polling/applications/nvidia.inc.php @@ -5,7 +5,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'nvidia'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.6.110.118.105.100.105.97'; $gpus = snmp_walk($device, $oid, $options); diff --git a/includes/polling/applications/os-updates.inc.php b/includes/polling/applications/os-updates.inc.php index 9c294d126f..c61c903ba8 100644 --- a/includes/polling/applications/os-updates.inc.php +++ b/includes/polling/applications/os-updates.inc.php @@ -3,7 +3,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'os-updates'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.111.115.117.112.100.97.116.101.1'; diff --git a/includes/polling/applications/php-fpm.inc.php b/includes/polling/applications/php-fpm.inc.php index fe5ff6677b..2506556831 100644 --- a/includes/polling/applications/php-fpm.inc.php +++ b/includes/polling/applications/php-fpm.inc.php @@ -5,7 +5,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'php-fpm'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.8.112.104.112.102.112.109.115.112'; $phpfpm = snmp_walk($device, $oid, $options); diff --git a/includes/polling/applications/pi-hole.inc.php b/includes/polling/applications/pi-hole.inc.php index 725f114738..e4c32b67db 100644 --- a/includes/polling/applications/pi-hole.inc.php +++ b/includes/polling/applications/pi-hole.inc.php @@ -17,7 +17,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'pi-hole'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.7.112.105.45.104.111.108.101'; $pihole = snmp_walk($device, $oid, $options); diff --git a/includes/polling/applications/postfix.inc.php b/includes/polling/applications/postfix.inc.php index 511f4ce1b5..4915daa450 100644 --- a/includes/polling/applications/postfix.inc.php +++ b/includes/polling/applications/postfix.inc.php @@ -4,7 +4,7 @@ $app_id = $app['app_id']; use LibreNMS\RRD\RrdDefinition; -$options = '-O qv'; +$options = '-Oqv'; $queueOID = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.5.109.97.105.108.113'; $detailOID = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.15.112.111.115.116.102.105.120.100.101.116.97.105.108.101.100'; $mailq = snmp_walk($device, $queueOID, $options); diff --git a/includes/polling/applications/postgres.inc.php b/includes/polling/applications/postgres.inc.php index 6d005ec042..4cc35b784a 100644 --- a/includes/polling/applications/postgres.inc.php +++ b/includes/polling/applications/postgres.inc.php @@ -6,7 +6,7 @@ use LibreNMS\RRD\RrdDefinition; echo "postgres"; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.8.112.111.115.116.103.114.101.115'; $postgres = snmp_walk($device, $oid, $options); diff --git a/includes/polling/applications/powerdns-dnsdist.inc.php b/includes/polling/applications/powerdns-dnsdist.inc.php index 28be286fe0..8f8cb1eca4 100644 --- a/includes/polling/applications/powerdns-dnsdist.inc.php +++ b/includes/polling/applications/powerdns-dnsdist.inc.php @@ -23,7 +23,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'powerdns-dnsdist'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; //NET-SNMP-EXTEND-MIB::nsExtendOutputFull."powerdns-dnsdist" $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.16.112.111.119.101.114.100.110.115.45.100.110.115.100.105.115.116'; diff --git a/includes/polling/applications/powerdns.inc.php b/includes/polling/applications/powerdns.inc.php index 8b084e0cfa..d0c0b8350b 100644 --- a/includes/polling/applications/powerdns.inc.php +++ b/includes/polling/applications/powerdns.inc.php @@ -4,7 +4,7 @@ use LibreNMS\RRD\RrdDefinition; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.8.112.111.119.101.114.100.110.115'; $name = 'powerdns'; diff --git a/includes/polling/applications/proxmox.inc.php b/includes/polling/applications/proxmox.inc.php index 979a5940f3..6d36b656ec 100644 --- a/includes/polling/applications/proxmox.inc.php +++ b/includes/polling/applications/proxmox.inc.php @@ -45,7 +45,7 @@ $app_id = $app['app_id']; if (isset($config['enable_proxmox']) && $config['enable_proxmox'] && !empty($agent_data['app'][$name])) { $proxmox = $agent_data['app'][$name]; } elseif (isset($config['enable_proxmox']) && $config['enable_proxmox']) { - $options = '-O qv'; + $options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.7.112.114.111.120.109.111.120'; $proxmox = snmp_get($device, $oid, $options); $proxmox = preg_replace('/^.+\n/', '', $proxmox); diff --git a/includes/polling/applications/sdfsinfo.inc.php b/includes/polling/applications/sdfsinfo.inc.php index 4d320703d7..f170f78f72 100644 --- a/includes/polling/applications/sdfsinfo.inc.php +++ b/includes/polling/applications/sdfsinfo.inc.php @@ -23,7 +23,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'sdfsinfo'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.8.115.100.102.115.105.110.102.111'; d_echo($name); diff --git a/includes/polling/applications/shoutcast.inc.php b/includes/polling/applications/shoutcast.inc.php index 6b88ff0efc..e8f92091ee 100644 --- a/includes/polling/applications/shoutcast.inc.php +++ b/includes/polling/applications/shoutcast.inc.php @@ -7,7 +7,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'shoutcast'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.9.115.104.111.117.116.99.97.115.116'; $shoutcast = snmp_get($device, $oid, $options); diff --git a/includes/polling/applications/smart.inc.php b/includes/polling/applications/smart.inc.php index db9a3d0961..9c6b6202a9 100644 --- a/includes/polling/applications/smart.inc.php +++ b/includes/polling/applications/smart.inc.php @@ -7,7 +7,7 @@ echo('SMART'); $name = 'smart'; $app_id = $app['app_id']; -$options = '-O qv'; +$options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.5.115.109.97.114.116'; $output = snmp_walk($device, $oid, $options); diff --git a/includes/polling/applications/unbound.inc.php b/includes/polling/applications/unbound.inc.php index aaf27df40e..1f2ee8e144 100644 --- a/includes/polling/applications/unbound.inc.php +++ b/includes/polling/applications/unbound.inc.php @@ -7,7 +7,7 @@ $app_id = $app['app_id']; if (!empty($agent_data['app'][$name])) { $rawdata = $agent_data['app'][$name]; } else { - $options = '-O qv'; + $options = '-Oqv'; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.7.117.110.98.111.117.110.100'; $rawdata = snmp_get($device, $oid, $options); } diff --git a/includes/polling/cisco-remote-access-monitor.inc.php b/includes/polling/cisco-remote-access-monitor.inc.php index c669d2efe8..8236358ee1 100644 --- a/includes/polling/cisco-remote-access-monitor.inc.php +++ b/includes/polling/cisco-remote-access-monitor.inc.php @@ -33,7 +33,7 @@ use LibreNMS\RRD\RrdDefinition; // CISCO-REMOTE-ACCESS-MONITOR-MIB::crasWebvpnCumulateSessions.0 = Counter32: 29 Sessions // CISCO-REMOTE-ACCESS-MONITOR-MIB::crasWebvpnPeakConcurrentSessions.0 = Gauge32: 9 Sessions if ($device['os_group'] == 'cisco') { - $oid_list = 'crasEmailNumSessions.0 crasIPSecNumSessions.0 crasL2LNumSessions.0 crasLBNumSessions.0 crasSVCNumSessions.0 crasWebvpnNumSessions.0'; + $oid_list = ['crasEmailNumSessions.0', 'crasIPSecNumSessions.0', 'crasL2LNumSessions.0', 'crasLBNumSessions.0', 'crasSVCNumSessions.0', 'crasWebvpnNumSessions.0']; $data = snmp_get_multi($device, $oid_list, '-OUQs', 'CISCO-REMOTE-ACCESS-MONITOR-MIB'); $data = $data[0]; diff --git a/includes/polling/core.inc.php b/includes/polling/core.inc.php index 3aca31e2fc..1e151f4ab3 100644 --- a/includes/polling/core.inc.php +++ b/includes/polling/core.inc.php @@ -15,7 +15,7 @@ use App\Models\Location; use LibreNMS\Config; use LibreNMS\RRD\RrdDefinition; -$snmpdata = snmp_get_multi_oid($device, 'sysUpTime.0 sysLocation.0 sysContact.0 sysName.0 sysObjectID.0 sysDescr.0', '-OQnUt', 'SNMPv2-MIB'); +$snmpdata = snmp_get_multi_oid($device, ['sysUpTime.0', 'sysLocation.0', 'sysContact.0', 'sysName.0', 'sysObjectID.0', 'sysDescr.0'], '-OQnUt', 'SNMPv2-MIB'); $poll_device['sysUptime'] = $snmpdata['.1.3.6.1.2.1.1.3.0']; $poll_device['sysLocation'] = $snmpdata['.1.3.6.1.2.1.1.6.0']; @@ -29,7 +29,7 @@ if (!empty($agent_data['uptime'])) { $uptime = round($uptime); echo "Using UNIX Agent Uptime ($uptime)\n"; } else { - $uptime_data = snmp_get_multi($device, 'snmpEngineTime.0 hrSystemUptime.0', '-OQnUst', 'HOST-RESOURCES-MIB:SNMP-FRAMEWORK-MIB'); + $uptime_data = snmp_get_multi($device, ['snmpEngineTime.0', 'hrSystemUptime.0'], '-OQnUst', 'HOST-RESOURCES-MIB:SNMP-FRAMEWORK-MIB'); $uptime = max( round($poll_device['sysUptime'] / 100), diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index eeb30b6129..298689bfc5 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -514,7 +514,7 @@ function poll_mib_def($device, $mib_name_table, $mib_subdir, $mib_oids, $mib_gra function get_main_serial($device) { if ($device['os_group'] == 'cisco') { - $serial_output = snmp_get_multi($device, 'entPhysicalSerialNum.1 entPhysicalSerialNum.1001', '-OQUs', 'ENTITY-MIB:OLD-CISCO-CHASSIS-MIB'); + $serial_output = snmp_get_multi($device, ['entPhysicalSerialNum.1', 'entPhysicalSerialNum.1001'], '-OQUs', 'ENTITY-MIB:OLD-CISCO-CHASSIS-MIB'); if (!empty($serial_output[1]['entPhysicalSerialNum'])) { return $serial_output[1]['entPhysicalSerialNum']; } elseif (!empty($serial_output[1000]['entPhysicalSerialNum'])) { diff --git a/includes/polling/hr-mib.inc.php b/includes/polling/hr-mib.inc.php index f5f3bd615c..efa73d0b9a 100644 --- a/includes/polling/hr-mib.inc.php +++ b/includes/polling/hr-mib.inc.php @@ -4,7 +4,7 @@ // Generic System Statistics use LibreNMS\RRD\RrdDefinition; -$oid_list = 'hrSystemProcesses.0 hrSystemNumUsers.0'; +$oid_list = ['hrSystemProcesses.0', 'hrSystemNumUsers.0']; $hrSystem = snmp_get_multi($device, $oid_list, '-OUQs', 'HOST-RESOURCES-MIB'); if (is_numeric($hrSystem[0]['hrSystemProcesses'])) { diff --git a/includes/polling/ipmi.inc.php b/includes/polling/ipmi.inc.php index 2ad7f84de6..9773956eea 100644 --- a/includes/polling/ipmi.inc.php +++ b/includes/polling/ipmi.inc.php @@ -14,14 +14,16 @@ if (is_array($ipmi_rows)) { echo 'Fetching IPMI sensor data...'; + $cmd = [Config::get('ipmitool', 'ipmitool')]; if ($config['own_hostname'] != $device['hostname'] || $ipmi['host'] != 'localhost') { - $remote = " -H " . $ipmi['host'] . " -U '" . $ipmi['user'] . "' -P '" . $ipmi['password'] . "' -L USER"; + array_push($cmd, '-H', $ipmi['host'], '-U', $ipmi['user'], '-P', $ipmi['password'], '-L', 'USER'); } // Check to see if we know which IPMI interface to use // so we dont use wrong arguments for ipmitool if ($ipmi['type'] != '') { - $results = external_exec($config['ipmitool'] . ' -I ' . $ipmi['type'] . ' -c ' . $remote . ' sdr 2>/dev/null'); + array_push($cmd, '-I', $ipmi['type'], '-c', 'sdr'); + $results = external_exec($cmd); d_echo($results); echo " done.\n"; } else { diff --git a/includes/polling/mempools/3com.inc.php b/includes/polling/mempools/3com.inc.php index 5c067f059c..fa9adc9ce4 100644 --- a/includes/polling/mempools/3com.inc.php +++ b/includes/polling/mempools/3com.inc.php @@ -26,7 +26,7 @@ if ($device['os'] === '3com') { echo '3COM:'; - $tmp_data = snmp_get_multi_oid($device, '.1.3.6.1.4.1.43.45.1.6.1.2.1.1.3.65536 .1.3.6.1.4.1.43.45.1.6.1.2.1.1.2.65536'); + $tmp_data = snmp_get_multi_oid($device, ['.1.3.6.1.4.1.43.45.1.6.1.2.1.1.3.65536', '.1.3.6.1.4.1.43.45.1.6.1.2.1.1.2.65536']); $mempool['total'] = $tmp_data['.1.3.6.1.4.1.43.45.1.6.1.2.1.1.2.65536']; $mempool['free'] = $tmp_data['.1.3.6.1.4.1.43.45.1.6.1.2.1.1.3.65536']; diff --git a/includes/polling/mempools/arubaos.inc.php b/includes/polling/mempools/arubaos.inc.php index 3596aa6ef1..eb868375fb 100644 --- a/includes/polling/mempools/arubaos.inc.php +++ b/includes/polling/mempools/arubaos.inc.php @@ -2,7 +2,7 @@ echo 'ARUBAOS-MEMORY-POOL: '; - $memory_pool = snmp_get_multi_oid($device, 'sysXMemorySize.1 sysXMemoryUsed.1 sysXMemoryFree.1', '-OQUs', 'WLSX-SWITCH-MIB'); + $memory_pool = snmp_get_multi_oid($device, ['sysXMemorySize.1', 'sysXMemoryUsed.1', 'sysXMemoryFree.1'], '-OQUs', 'WLSX-SWITCH-MIB'); $mempool['total'] = $memory_pool['sysXMemorySize.1'] * 1024; $mempool['used'] = $memory_pool['sysXMemoryUsed.1'] * 1024; diff --git a/includes/polling/mempools/bdcom.inc.php b/includes/polling/mempools/bdcom.inc.php index 6b17e731b2..5d31b750a0 100644 --- a/includes/polling/mempools/bdcom.inc.php +++ b/includes/polling/mempools/bdcom.inc.php @@ -18,7 +18,7 @@ echo 'BDCOM Memory Pool'; -$memory_pool = snmp_get_multi_oid($device, 'bdcomMemoryPoolUsed.0 bdcomMemoryPoolFree.0', '-OQUs', 'BDCOM-MEMORY-POOL-MIB'); +$memory_pool = snmp_get_multi_oid($device, ['bdcomMemoryPoolUsed.0', 'bdcomMemoryPoolFree.0'], '-OQUs', 'BDCOM-MEMORY-POOL-MIB'); $mempool['free'] = ['bdcomMemoryPoolFree.0']; $mempool['used'] = $memory_pool['bdcomMemoryPoolUsed.0']; diff --git a/includes/polling/mempools/benuos.inc.php b/includes/polling/mempools/benuos.inc.php index ecec6ac9d7..ef111e2f49 100644 --- a/includes/polling/mempools/benuos.inc.php +++ b/includes/polling/mempools/benuos.inc.php @@ -1,7 +1,7 @@ */ -$acos_temp = snmp_get_multi($device, 'axSysSerialNumber.0 axSysFirmwareVersion.0', '-OQUs', 'A10-AX-MIB'); +$acos_temp = snmp_get_multi($device, ['axSysSerialNumber.0', 'axSysFirmwareVersion.0'], '-OQUs', 'A10-AX-MIB'); $serial = $acos_temp[0]['axSysSerialNumber']; $version = $acos_temp[0]['axSysFirmwareVersion']; diff --git a/includes/polling/os/acsw.inc.php b/includes/polling/os/acsw.inc.php index cb98d3eddd..6d2ba4732b 100644 --- a/includes/polling/os/acsw.inc.php +++ b/includes/polling/os/acsw.inc.php @@ -11,7 +11,7 @@ $version = str_replace(' Version ', '', $version); list(,$features) = explode('(', $features); list(,$features) = explode('-', $features); -$oids = 'entPhysicalModelName.1 entPhysicalContainedIn.1 entPhysicalName.1 entPhysicalSoftwareRev.1 entPhysicalModelName.1001 entPhysicalContainedIn.1001 cardDescr.1 cardSlotNumber.1'; +$oids = ['entPhysicalModelName.1', 'entPhysicalContainedIn.1', 'entPhysicalName.1', 'entPhysicalSoftwareRev.1', 'entPhysicalModelName.1001', 'entPhysicalContainedIn.1001', 'cardDescr.1', 'cardSlotNumber.1']; $data = snmp_get_multi($device, $oids, '-OQUs', 'ENTITY-MIB:OLD-CISCO-CHASSIS-MIB'); diff --git a/includes/polling/os/airos-af-ltu.inc.php b/includes/polling/os/airos-af-ltu.inc.php index 73535c1a11..44ed2bccb3 100644 --- a/includes/polling/os/airos-af-ltu.inc.php +++ b/includes/polling/os/airos-af-ltu.inc.php @@ -1,5 +1,5 @@ . */ -$data = snmp_get_multi_oid($device, '.1.3.6.1.2.1.1.1.0 .1.3.6.1.2.1.27.1.1.4.1 .1.3.6.1.2.1.1.5.0'); +$data = snmp_get_multi_oid($device, ['.1.3.6.1.2.1.1.1.0', '.1.3.6.1.2.1.27.1.1.4.1', '.1.3.6.1.2.1.1.5.0']); $hardware = $data['.1.3.6.1.2.1.1.1.0']; $version = $data['.1.3.6.1.2.1.27.1.1.4.1']; diff --git a/includes/polling/os/aos-emu2.inc.php b/includes/polling/os/aos-emu2.inc.php index 349edfbef2..0958b2c492 100644 --- a/includes/polling/os/aos-emu2.inc.php +++ b/includes/polling/os/aos-emu2.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$aos_emu2_data = snmp_get_multi_oid($device, 'emsIdentSerialNumber.0 emsIdentProductNumber.0 emsIdentHardwareRev.0 emsIdentFirmwareRev.0', '-OQUs', 'PowerNet-MIB'); +$aos_emu2_data = snmp_get_multi_oid($device, ['emsIdentSerialNumber.0', 'emsIdentProductNumber.0', 'emsIdentHardwareRev.0', 'emsIdentFirmwareRev.0'], '-OQUs', 'PowerNet-MIB'); $serial = trim($aos_emu2_data['emsIdentSerialNumber.0'], '"'); $hardware = trim($aos_emu2_data['emsIdentProductNumber.0'], '"') . ' ' . trim($aos_emu2_data['emsIdentHardwareRev.0'], '"'); diff --git a/includes/polling/os/apc.inc.php b/includes/polling/os/apc.inc.php index 4f4aceeb1c..3fc9d8d802 100644 --- a/includes/polling/os/apc.inc.php +++ b/includes/polling/os/apc.inc.php @@ -1,14 +1,14 @@ */ -$oids = 'genGroupHWVersion.0 rndSerialNumber.0 rndApsoluteOSVersion.0 rdwrDevicePortsConfig.0'; +$oids = ['genGroupHWVersion.0', 'rndSerialNumber.0', 'rndApsoluteOSVersion.0', 'rdwrDevicePortsConfig.0']; $data = snmp_get_multi($device, $oids, '-OQs', 'RADWARE-MIB'); $serial = trim($data[0]['rndSerialNumber'], '"'); $version = trim($data[0]['rndApsoluteOSVersion'], '"'); diff --git a/includes/polling/os/asa.inc.php b/includes/polling/os/asa.inc.php index a14d1875d5..a380202d22 100644 --- a/includes/polling/os/asa.inc.php +++ b/includes/polling/os/asa.inc.php @@ -11,7 +11,7 @@ * the source code distribution for details. */ if (!ends_with($device['hardware'], 'sc')) { - $oids = 'entPhysicalModelName.1 entPhysicalSoftwareRev.1 entPhysicalSerialNum.1 entPhysicalModelName.4 entPhysicalSoftwareRev.4'; + $oids = ['entPhysicalModelName.1', 'entPhysicalSoftwareRev.1', 'entPhysicalSerialNum.1', 'entPhysicalModelName.4', 'entPhysicalSoftwareRev.4']; $data = snmp_get_multi($device, $oids, '-OQUs', 'ENTITY-MIB'); diff --git a/includes/polling/os/audiocodes.inc.php b/includes/polling/os/audiocodes.inc.php index dda683560c..ae50d08649 100644 --- a/includes/polling/os/audiocodes.inc.php +++ b/includes/polling/os/audiocodes.inc.php @@ -2,7 +2,7 @@ use LibreNMS\RRD\RrdDefinition; -$oids = 'acSysIdName.0 acSysVersionSoftware.0 acSysIdSerialNumber.0'; +$oids = ['acSysIdName.0', 'acSysVersionSoftware.0', 'acSysIdSerialNumber.0']; $data = snmp_get_multi($device, $oids, '-OQUs', 'AC-SYSTEM-MIB'); $hardware = $data[0]['acSysIdName']; diff --git a/includes/polling/os/avocent.inc.php b/includes/polling/os/avocent.inc.php index b7aea33120..3660727f53 100644 --- a/includes/polling/os/avocent.inc.php +++ b/includes/polling/os/avocent.inc.php @@ -1,6 +1,6 @@ */ -$ciscoepc = snmp_get_multi_oid($device, 'saHwDescrModel.0 saHwDescrSerialNumber.0', '-OUQs', 'SA-HARDWARE-MIB'); +$ciscoepc = snmp_get_multi_oid($device, ['saHwDescrModel.0', 'saHwDescrSerialNumber.0'], '-OUQs', 'SA-HARDWARE-MIB'); $hardware = $ciscoepc['saHwDescrModel.0']; $serial = $ciscoepc['saHwDescrSerialNumber.0']; diff --git a/includes/polling/os/ciscosrp.inc.php b/includes/polling/os/ciscosrp.inc.php index 2c69bcfe73..720c19e407 100644 --- a/includes/polling/os/ciscosrp.inc.php +++ b/includes/polling/os/ciscosrp.inc.php @@ -9,7 +9,7 @@ * @copyright (C) 2016 Librenms */ -$oids = 'entPhysicalModelName.1 entPhysicalContainedIn.1 entPhysicalName.1 entPhysicalSoftwareRev.1 entPhysicalModelName.1001 entPhysicalContainedIn.1001 cardDescr.1 cardSlotNumber.1'; +$oids = ['entPhysicalModelName.1', 'entPhysicalContainedIn.1', 'entPhysicalName.1', 'entPhysicalSoftwareRev.1', 'entPhysicalModelName.1001', 'entPhysicalContainedIn.1001', 'cardDescr.1', 'cardSlotNumber.1']; $data = snmp_get_multi($device, $oids, '-OQUs', 'ENTITY-MIB:OLD-CISCO-CHASSIS-MIB'); diff --git a/includes/polling/os/ciscowlc.inc.php b/includes/polling/os/ciscowlc.inc.php index b5730adb79..60d8582a4b 100644 --- a/includes/polling/os/ciscowlc.inc.php +++ b/includes/polling/os/ciscowlc.inc.php @@ -14,7 +14,7 @@ global $config; use LibreNMS\RRD\RrdDefinition; -$oids = 'entPhysicalModelName.1 entPhysicalSoftwareRev.1 entPhysicalSerialNum.1'; +$oids = ['entPhysicalModelName.1', 'entPhysicalSoftwareRev.1', 'entPhysicalSerialNum.1']; $data = snmp_get_multi($device, $oids, '-OQUs', 'ENTITY-MIB'); diff --git a/includes/polling/os/cnpilote.inc.php b/includes/polling/os/cnpilote.inc.php index 09894a112b..9c592c6f2d 100644 --- a/includes/polling/os/cnpilote.inc.php +++ b/includes/polling/os/cnpilote.inc.php @@ -11,7 +11,7 @@ $version = $device['sysDescr']; -$cnpilot_data = snmp_get_multi_oid($device, 'cambiumAPSerialNum.0 cambiumAPHWType.0', '-OUQs', 'CAMBIUM-MIB'); +$cnpilot_data = snmp_get_multi_oid($device, ['cambiumAPSerialNum.0', 'cambiumAPHWType.0'], '-OUQs', 'CAMBIUM-MIB'); $hardware = $cnpilot_data['cambiumAPHWType.0']; $serial = $cnpilot_data['cambiumAPSerialNum.0']; diff --git a/includes/polling/os/cnpilotr.inc.php b/includes/polling/os/cnpilotr.inc.php index e8ef4311ba..8d86ede84c 100644 --- a/includes/polling/os/cnpilotr.inc.php +++ b/includes/polling/os/cnpilotr.inc.php @@ -9,7 +9,7 @@ * the source code distribution for details. */ -$cnpilot_data = snmp_get_multi_oid($device, 'serialNumber.0 productName.0 hardwareVersion.0', '-OUQs', 'CAMBIUM-MIB'); +$cnpilot_data = snmp_get_multi_oid($device, ['serialNumber.0', 'productName.0', 'hardwareVersion.0'], '-OUQs', 'CAMBIUM-MIB'); $version = $cnpilot_data['hardwareVersion.0']; $hardware = $cnpilot_data['productName.0']; diff --git a/includes/polling/os/cxr-ts.inc.php b/includes/polling/os/cxr-ts.inc.php index e80e8885c7..2d5f1f5be3 100644 --- a/includes/polling/os/cxr-ts.inc.php +++ b/includes/polling/os/cxr-ts.inc.php @@ -1,6 +1,6 @@ */ -$cyberoam_data = snmp_get_multi_oid($device, 'applianceModel.0 cyberoamVersion.0', '-OQUs', 'CYBEROAM-MIB'); +$cyberoam_data = snmp_get_multi_oid($device, ['applianceModel.0', 'cyberoamVersion.0'], '-OQUs', 'CYBEROAM-MIB'); $hardware = $cyberoam_data['applianceModel.0']; $version = $cyberoam_data['cyberoamVersion.0']; diff --git a/includes/polling/os/dasan-nos.inc.php b/includes/polling/os/dasan-nos.inc.php index d1a3ecf905..2f8ca5acc5 100644 --- a/includes/polling/os/dasan-nos.inc.php +++ b/includes/polling/os/dasan-nos.inc.php @@ -25,7 +25,7 @@ list($hardware, $version) = explode(' ', $device['sysDescr'], 2); -$tmp = snmp_get_multi_oid($device, 'dsSerialNumber.0 dsFirmwareVersion.0', '-OQUs', 'DASAN-SWITCH-MIB:DASAN-PRODUCTS-MIB'); +$tmp = snmp_get_multi_oid($device, ['dsSerialNumber.0', 'dsFirmwareVersion.0'], '-OQUs', 'DASAN-SWITCH-MIB:DASAN-PRODUCTS-MIB'); $serial = $tmp['dsSerialNumber.0']; $version = $tmp['dsFirmwareVersion.0']; diff --git a/includes/polling/os/dcn-software.inc.php b/includes/polling/os/dcn-software.inc.php index 58fd3910b9..73c54022b6 100644 --- a/includes/polling/os/dcn-software.inc.php +++ b/includes/polling/os/dcn-software.inc.php @@ -28,7 +28,7 @@ $version = trim(snmp_get($device, '.1.3.6.1.4.1.6339.100.25.1.1.2.0', '-OQv'), ' $serial = trim(snmp_get($device, '.1.3.6.1.2.1.47.1.1.1.1.11.1', '-OQv'), '"'); if (empty($hardware) && empty($version)) { - $temp_data = snmp_get_multi_oid($device, 'sysHardwareVersion.0 sysSoftwareVersion.0', '-OUQs', 'DCN-MIB'); + $temp_data = snmp_get_multi_oid($device, ['sysHardwareVersion.0', 'sysSoftwareVersion.0'], '-OUQs', 'DCN-MIB'); $hardware = $temp_data['sysHardwareVersion.0']; $version = $temp_data['sysSoftwareVersion.0']; unset($temp_data); diff --git a/includes/polling/os/dell-rpdu.inc.php b/includes/polling/os/dell-rpdu.inc.php index a5215fb7f0..57bb3dae26 100644 --- a/includes/polling/os/dell-rpdu.inc.php +++ b/includes/polling/os/dell-rpdu.inc.php @@ -10,7 +10,7 @@ * the source code distribution for details. */ -$dell_rpdu_data = snmp_get_multi_oid($device, 'rPDUIdentSerialNumberD.1 rPDUIdentModelNumberD.1 rPDUIdentHardwareRevD.1 rPDUIdentFirmwareRevD.1', '-OUQs', 'DellrPDU-MIB'); +$dell_rpdu_data = snmp_get_multi_oid($device, ['rPDUIdentSerialNumberD.1', 'rPDUIdentModelNumberD.1', 'rPDUIdentHardwareRevD.1', 'rPDUIdentFirmwareRevD.1'], '-OUQs', 'DellrPDU-MIB'); $hardware = $dell_rpdu_data['rPDUIdentModelNumberD.1'] . ' ' . $dell_rpdu_data['rPDUIdentHardwareRevD.1'] ; $serial = $dell_rpdu_data['rPDUIdentSerialNumberD.1']; diff --git a/includes/polling/os/dell-ups.inc.php b/includes/polling/os/dell-ups.inc.php index dac7591b73..2959078e2e 100644 --- a/includes/polling/os/dell-ups.inc.php +++ b/includes/polling/os/dell-ups.inc.php @@ -10,7 +10,7 @@ * the source code distribution for details. */ -$data = snmp_get_multi($device, 'productIDDisplayName.0 productIDBuildNumber.0 productIDVersion.0 physicalIdentSerialNumber.0', '-OQUs', 'DELL-SNMP-UPS-MIB'); +$data = snmp_get_multi($device, ['productIDDisplayName.0', 'productIDBuildNumber.0', 'productIDVersion.0', 'physicalIdentSerialNumber.0'], '-OQUs', 'DELL-SNMP-UPS-MIB'); $hardware = $data[0]['productIDDisplayName']; $serial = $data[0]['physicalIdentSerialNumber']; diff --git a/includes/polling/os/dsm.inc.php b/includes/polling/os/dsm.inc.php index 7c9a9cba06..d064799c24 100644 --- a/includes/polling/os/dsm.inc.php +++ b/includes/polling/os/dsm.inc.php @@ -23,7 +23,7 @@ * @author Nick Peelman */ -$tmp_dsm = snmp_get_multi_oid($device, 'modelName.0 version.0 serialNumber.0', '-OUQs', 'SYNOLOGY-SYSTEM-MIB'); +$tmp_dsm = snmp_get_multi_oid($device, ['modelName.0', 'version.0', 'serialNumber.0'], '-OUQs', 'SYNOLOGY-SYSTEM-MIB'); $hardware = $tmp_dsm['modelName.0']; $version = $tmp_dsm['version.0']; $serial = $tmp_dsm['serialNumber.0']; diff --git a/includes/polling/os/edgecos.inc.php b/includes/polling/os/edgecos.inc.php index 49deee9573..cc6532fe3e 100644 --- a/includes/polling/os/edgecos.inc.php +++ b/includes/polling/os/edgecos.inc.php @@ -16,7 +16,7 @@ if (starts_with($device['sysObjectID'], '.1.3.6.1.4.1.259.6.')) { $tmp_mib = 'ES3510MA-MIB'; } -$tmp_edgecos = snmp_get_multi($device, 'swOpCodeVer.1 swProdName.0 swSerialNumber.1 swHardwareVer.1', '-OQUs', $tmp_mib); +$tmp_edgecos = snmp_get_multi($device, ['swOpCodeVer.1', 'swProdName.0', 'swSerialNumber.1', 'swHardwareVer.1'], '-OQUs', $tmp_mib); $version = trim($tmp_edgecos[1]['swHardwareVer'], '"') . ' ' . trim($tmp_edgecos[1]['swOpCodeVer'], '"'); $hardware = trim($tmp_edgecos[0]['swProdName'], '"'); diff --git a/includes/polling/os/ees.inc.php b/includes/polling/os/ees.inc.php index 626287e836..6e75b8adf0 100644 --- a/includes/polling/os/ees.inc.php +++ b/includes/polling/os/ees.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$tmp_ees = snmp_get_multi($device, 'identControllerFirmwareVersion.0 identControllerSerialNumber.0', '-OQUs', 'EES-POWER-MIB'); +$tmp_ees = snmp_get_multi($device, ['identControllerFirmwareVersion.0', 'identControllerSerialNumber.0'], '-OQUs', 'EES-POWER-MIB'); $version = $tmp_ees[0]['identControllerFirmwareVersion']; $serial = $tmp_ees[0]['identControllerSerialNumber']; diff --git a/includes/polling/os/eltek-webpower.inc.php b/includes/polling/os/eltek-webpower.inc.php index 953329f34f..4d7910d4ac 100644 --- a/includes/polling/os/eltek-webpower.inc.php +++ b/includes/polling/os/eltek-webpower.inc.php @@ -33,7 +33,7 @@ $output = preg_split("/[\s,]+/", $device['sysDescr']); $version = $output[1]; -$oid = snmp_get_multi($device, 'systemSiteInfoControllerType.0 rectifierStatusType.1 batteryName.0 systemSiteInfoSystemSeriaNum.0', '-OQUs', 'ELTEK-DISTRIBUTED-MIB'); +$oid = snmp_get_multi($device, ['systemSiteInfoControllerType.0', 'rectifierStatusType.1', 'batteryName.0', 'systemSiteInfoSystemSeriaNum.0'], '-OQUs', 'ELTEK-DISTRIBUTED-MIB'); $features = 'Rectifier type: '.$oid[1]['rectifierStatusType']; $features .= ', Battery name: '.$oid[0]['batteryName']; $hardware = $oid[0]['systemSiteInfoControllerType']; diff --git a/includes/polling/os/epmp.inc.php b/includes/polling/os/epmp.inc.php index 77c2464ba4..190e89d886 100644 --- a/includes/polling/os/epmp.inc.php +++ b/includes/polling/os/epmp.inc.php @@ -79,7 +79,7 @@ if (is_numeric($sysNetworkEntryAttempt) && is_numeric($sysNetworkEntrySuccess) & } -$multi_get_array = snmp_get_multi($device, "ulWLanTotalAvailableFrameTimePerSecond.0 ulWLanTotalUsedFrameTimePerSecond.0 dlWLanTotalAvailableFrameTimePerSecond.0 dlWLanTotalUsedFrameTimePerSecond.0", "-OQU", "CAMBIUM-PMP80211-MIB"); +$multi_get_array = snmp_get_multi($device, ['ulWLanTotalAvailableFrameTimePerSecond.0', 'ulWLanTotalUsedFrameTimePerSecond.0', 'dlWLanTotalAvailableFrameTimePerSecond.0', 'dlWLanTotalUsedFrameTimePerSecond.0'], "-OQU", "CAMBIUM-PMP80211-MIB"); $ulWLanTotalAvailableFrameTimePerSecond = $multi_get_array[0]["CAMBIUM-PMP80211-MIB::ulWLanTotalAvailableFrameTimePerSecond"]; $ulWLanTotalUsedFrameTimePerSecond = $multi_get_array[0]["CAMBIUM-PMP80211-MIB::ulWLanTotalUsedFrameTimePerSecond"]; diff --git a/includes/polling/os/extendair.inc.php b/includes/polling/os/extendair.inc.php index bb7b11d5a8..c78fe35e2c 100644 --- a/includes/polling/os/extendair.inc.php +++ b/includes/polling/os/extendair.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$extendair_data = snmp_get_multi_oid($device, 'serialNumber.0 firmwareVersion.0', '-OQs', 'ExaltComProducts'); +$extendair_data = snmp_get_multi_oid($device, ['serialNumber.0', 'firmwareVersion.0'], '-OQs', 'ExaltComProducts'); $serial = $extendair_data['serialNumber.0']; $version = $extendair_data['firmwareVersion.0']; diff --git a/includes/polling/os/fiberhome-switch.inc.php b/includes/polling/os/fiberhome-switch.inc.php index 3ac0ad9739..0a35d8f266 100644 --- a/includes/polling/os/fiberhome-switch.inc.php +++ b/includes/polling/os/fiberhome-switch.inc.php @@ -15,7 +15,7 @@ $sysDescrPieces = explode(" ", $device['sysDescr']); //extract model from sysDescr -$versions = snmp_get_multi_oid($device, 'msppDevHwVersion.0 msppDevSwVersion.0', '-OQs', 'WRI-DEVICE-MIB'); +$versions = snmp_get_multi_oid($device, ['msppDevHwVersion.0', 'msppDevSwVersion.0'], '-OQs', 'WRI-DEVICE-MIB'); foreach ($versions as $key => $field) { if (preg_match("/\b 00 00 00 00 00 00\b/i", $field)) { //convert potential hex reading to character $versions[$key] = str_replace(array("\r","\n"), '', $field); diff --git a/includes/polling/os/fortios.inc.php b/includes/polling/os/fortios.inc.php index 466ba0c22b..b8af663779 100644 --- a/includes/polling/os/fortios.inc.php +++ b/includes/polling/os/fortios.inc.php @@ -2,7 +2,7 @@ use LibreNMS\RRD\RrdDefinition; -$temp_data = snmp_get_multi_oid($device, 'fnSysSerial.0 fmSysVersion.0 fmDeviceEntMode.1', '-OUQs', 'FORTINET-CORE-MIB:FORTINET-FORTIMANAGER-FORTIANALYZER-MIB'); +$temp_data = snmp_get_multi_oid($device, ['fnSysSerial.0', 'fmSysVersion.0', 'fmDeviceEntMode.1'], '-OUQs', 'FORTINET-CORE-MIB:FORTINET-FORTIMANAGER-FORTIANALYZER-MIB'); $serial = $temp_data['fnSysSerial.0']; $version = $temp_data['fmSysVersion.0']; $hardware = rewrite_fortinet_hardware($device['sysObjectID']); diff --git a/includes/polling/os/fortiweb.inc.php b/includes/polling/os/fortiweb.inc.php index 5c8f7d6a68..63787830a5 100644 --- a/includes/polling/os/fortiweb.inc.php +++ b/includes/polling/os/fortiweb.inc.php @@ -10,7 +10,7 @@ * the source code distribution for details. */ -$temp_data = snmp_get_multi_oid($device, 'fnSysSerial.0 fwSysModel.0 fwSysVersion.0', '-OUQs', 'FORTINET-FORTIWEB-MIB'); +$temp_data = snmp_get_multi_oid($device, ['fnSysSerial.0', 'fwSysModel.0', 'fwSysVersion.0'], '-OUQs', 'FORTINET-FORTIWEB-MIB'); $temp_version = explode(' ', $temp_data['fwSysVersion.0']); $hardware = $temp_data['fwSysModel.0']; diff --git a/includes/polling/os/fortiwlc.inc.php b/includes/polling/os/fortiwlc.inc.php index 71072e3112..3c9130780b 100644 --- a/includes/polling/os/fortiwlc.inc.php +++ b/includes/polling/os/fortiwlc.inc.php @@ -1,6 +1,6 @@ */ -$fusion_tmp = snmp_get_multi_oid($device, 'swSerialNumber.1 swOpCodeVer.1 swModelNumber.1', '-OUQs', 'ES4552BH2-MIB'); +$fusion_tmp = snmp_get_multi_oid($device, ['swSerialNumber.1', 'swOpCodeVer.1', 'swModelNumber.1'], '-OUQs', 'ES4552BH2-MIB'); $serial = $fusion_tmp['swSerialNumber.1']; $hardware = $fusion_tmp['swModelNumber.1']; $version = $fusion_tmp['swOpCodeVer.1']; diff --git a/includes/polling/os/fxm.inc.php b/includes/polling/os/fxm.inc.php index 038c238fef..f15dc74eeb 100644 --- a/includes/polling/os/fxm.inc.php +++ b/includes/polling/os/fxm.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$fxm_tmp = snmp_get_multi_oid($device, 'upsIdentProductCode.0 upsIdentUPSSoftwareVersion.0', '-OUQs', 'Argus-Power-System-MIB'); +$fxm_tmp = snmp_get_multi_oid($device, ['upsIdentProductCode.0', 'upsIdentUPSSoftwareVersion.0'], '-OUQs', 'Argus-Power-System-MIB'); $hardware = $fxm_tmp['upsIdentProductCode.0']; $version = $fxm_tmp['upsIdentUPSSoftwareVersion.0']; unset($fxm_tmp); diff --git a/includes/polling/os/gaia.inc.php b/includes/polling/os/gaia.inc.php index c496a51c29..fa72b2ee8b 100644 --- a/includes/polling/os/gaia.inc.php +++ b/includes/polling/os/gaia.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$tmp_gaia = snmp_get_multi_oid($device, 'svnVersion.0 svnApplianceProductName.0 svnApplianceSerialNumber.0', '-OUQs', 'CHECKPOINT-MIB'); +$tmp_gaia = snmp_get_multi_oid($device, ['svnVersion.0', 'svnApplianceProductName.0', 'svnApplianceSerialNumber.0'], '-OUQs', 'CHECKPOINT-MIB'); $serial = $tmp_gaia['svnApplianceSerialNumber.0']; $hardware = $tmp_gaia['svnApplianceProductName.0']; $version = $tmp_gaia['svnVersion.0']; diff --git a/includes/polling/os/generex-ups.inc.php b/includes/polling/os/generex-ups.inc.php index ea94963b22..14bc7e5dd5 100644 --- a/includes/polling/os/generex-ups.inc.php +++ b/includes/polling/os/generex-ups.inc.php @@ -1,6 +1,6 @@ */ -$helio_oids = snmp_get_multi_oid($device, 'model.0 fwVersion.0', '-OUQn', 'IGNITENET-MIB'); +$helio_oids = snmp_get_multi_oid($device, ['model.0', 'fwVersion.0'], '-OUQn', 'IGNITENET-MIB'); $hardware = $helio_oids['.1.3.6.1.4.1.47307.1.1.1.0']; $version = $helio_oids['.1.3.6.1.4.1.47307.1.1.3.0']; diff --git a/includes/polling/os/heliosip.inc.php b/includes/polling/os/heliosip.inc.php index 3cc685a89d..6aa09abfe8 100644 --- a/includes/polling/os/heliosip.inc.php +++ b/includes/polling/os/heliosip.inc.php @@ -23,7 +23,7 @@ // SNMPv2-SMI::enterprises.6530.11.1.0 = STRING: "2N IP Force" // SNMPv2-SMI::enterprises.6530.11.4.0 = STRING: "2.22.0.31.8" // SNMPv2-SMI::enterprises.6530.11.3.0 = STRING: "54-0880-2424" -$data = snmp_get_multi_oid($device, '.1.3.6.1.4.1.6530.11.1.0 .1.3.6.1.4.1.6530.11.3.0 .1.3.6.1.4.1.6530.11.4.0', '-OUQn'); +$data = snmp_get_multi_oid($device, ['.1.3.6.1.4.1.6530.11.1.0', '.1.3.6.1.4.1.6530.11.3.0', '.1.3.6.1.4.1.6530.11.4.0'], '-OUQn'); $hardware = isset($data['.1.3.6.1.4.1.6530.11.1.0']) ? $data['.1.3.6.1.4.1.6530.11.1.0'] : ''; $version = isset($data['.1.3.6.1.4.1.6530.11.4.0']) ? $data['.1.3.6.1.4.1.6530.11.4.0'] : ''; $serial = isset($data['.1.3.6.1.4.1.6530.11.3.0']) ? $data['.1.3.6.1.4.1.6530.11.3.0'] : ''; diff --git a/includes/polling/os/hiveos-wireless.inc.php b/includes/polling/os/hiveos-wireless.inc.php index 1b0a64fb0a..8c21a8c13a 100644 --- a/includes/polling/os/hiveos-wireless.inc.php +++ b/includes/polling/os/hiveos-wireless.inc.php @@ -21,7 +21,7 @@ * @author https://github.com/theherodied/ */ -$data = snmp_get_multi_oid($device, 'ahSystemSerial.0 ahDeviceMode.0 ahFirmwareVersion.0', '-OQUs', 'AH-SYSTEM-MIB'); +$data = snmp_get_multi_oid($device, ['ahSystemSerial.0', 'ahDeviceMode.0', 'ahFirmwareVersion.0'], '-OQUs', 'AH-SYSTEM-MIB'); $hardware = $data['ahDeviceMode.0']; $version2 = $data['ahFirmwareVersion.0']; // Version has 'HiveOS ' included. We want to remove it so OS doesn't show HiveOS twice. diff --git a/includes/polling/os/hpe-ilo.inc.php b/includes/polling/os/hpe-ilo.inc.php index e91eeb4a12..eb8335b7c7 100644 --- a/includes/polling/os/hpe-ilo.inc.php +++ b/includes/polling/os/hpe-ilo.inc.php @@ -1,6 +1,6 @@ */ -$hpe_ipdu_data = snmp_get_multi_oid($device, 'mpduFirmwareVersion.0 mpduSerialNumber.0 mpduModel.0', '-OUQs', 'CPQPOWER-MIB'); +$hpe_ipdu_data = snmp_get_multi_oid($device, ['mpduFirmwareVersion.0', 'mpduSerialNumber.0', 'mpduModel.0'], '-OUQs', 'CPQPOWER-MIB'); $serial = trim($hpe_ipdu_data['mpduSerialNumber.1'], '"'); $version = trim($hpe_ipdu_data['mpduFirmwareVersion.1'], '"'); diff --git a/includes/polling/os/hpe-msa.inc.php b/includes/polling/os/hpe-msa.inc.php index 43b1dafa5b..dab193ffd9 100644 --- a/includes/polling/os/hpe-msa.inc.php +++ b/includes/polling/os/hpe-msa.inc.php @@ -1,6 +1,6 @@ */ -$oids = 'hpHttpMgDeviceProductName.1 hpHttpMgDeviceSerialNumber.1 hpHttpMgDeviceVersion.1'; +$oids = ['hpHttpMgDeviceProductName.1', 'hpHttpMgDeviceSerialNumber.1', 'hpHttpMgDeviceVersion.1']; $data = snmp_get_multi($device, $oids, '-OQUs', 'SEMI-MIB'); d_echo($data); diff --git a/includes/polling/os/hpe-rtups.inc.php b/includes/polling/os/hpe-rtups.inc.php index 672b1bdfbf..9afde399af 100644 --- a/includes/polling/os/hpe-rtups.inc.php +++ b/includes/polling/os/hpe-rtups.inc.php @@ -1,5 +1,5 @@ */ -$lcos_data = snmp_get_multi_oid($device, 'lcsFirmwareVersionTableEntrySerialNumber.1 lcsFirmwareVersionTableEntryVersion.1 lcsFirmwareVersionTableEntryModule.1', '-OQs', 'LCOS-MIB'); +$lcos_data = snmp_get_multi_oid($device, ['lcsFirmwareVersionTableEntrySerialNumber.1', 'lcsFirmwareVersionTableEntryVersion.1', 'lcsFirmwareVersionTableEntryModule.1'], '-OQs', 'LCOS-MIB'); $serial = $lcos_data['lcsFirmwareVersionTableEntrySerialNumber.eIfc']; $version = $lcos_data['lcsFirmwareVersionTableEntryVersion.eIfc']; diff --git a/includes/polling/os/luminato.inc.php b/includes/polling/os/luminato.inc.php index ce6356a7c3..cc2d4d0116 100644 --- a/includes/polling/os/luminato.inc.php +++ b/includes/polling/os/luminato.inc.php @@ -1,5 +1,5 @@ */ -$oid = snmp_get_multi($device, '.1.3.6.1.2.1.33.1.1.4.0 .1.3.6.1.2.1.33.1.1.1.0', '-OQU'); +$oid = snmp_get_multi($device, ['.1.3.6.1.2.1.33.1.1.4.0', '.1.3.6.1.2.1.33.1.1.1.0'], '-OQU'); $version = $oid[0]['.1.3.6.1.2.1.33.1.1.4.0']; $hardware = $oid[0]['.1.3.6.1.2.1.33.1.1.1.0']; diff --git a/includes/polling/os/netguardian.inc.php b/includes/polling/os/netguardian.inc.php index b5d1a6ec95..ebe5dd3005 100644 --- a/includes/polling/os/netguardian.inc.php +++ b/includes/polling/os/netguardian.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$netguardian_tmp = snmp_get_multi_oid($device, 'dpsRTUModel.0 dpsRTUFirmwareVersion.0', '-OQs', 'DPS-MIB-V38'); +$netguardian_tmp = snmp_get_multi_oid($device, ['dpsRTUModel.0', 'dpsRTUFirmwareVersion.0'], '-OQs', 'DPS-MIB-V38'); $version = $netguardian_tmp['dpsRTUFirmwareVersion.0']; $hardware = $netguardian_tmp['dpsRTUModel.0']; unset($netguardian_tmp); diff --git a/includes/polling/os/ns-bsd.inc.php b/includes/polling/os/ns-bsd.inc.php index d948596865..f07adacd3b 100644 --- a/includes/polling/os/ns-bsd.inc.php +++ b/includes/polling/os/ns-bsd.inc.php @@ -23,7 +23,7 @@ * @author Thomas GAGNIERE */ -$data = snmp_get_multi_oid($device, 'snsModel.0 snsVersion.0 snsSerialNumber.0 snsSystemName.0', '-OUQs', 'STORMSHIELD-PROPERTY-MIB'); +$data = snmp_get_multi_oid($device, ['snsModel.0', 'snsVersion.0', 'snsSerialNumber.0', 'snsSystemName.0'], '-OUQs', 'STORMSHIELD-PROPERTY-MIB'); $hardware = $data['snsModel.0']; $version = $data['snsVersion.0']; diff --git a/includes/polling/os/nxos.inc.php b/includes/polling/os/nxos.inc.php index f9ef5bab38..f4c42cedd6 100644 --- a/includes/polling/os/nxos.inc.php +++ b/includes/polling/os/nxos.inc.php @@ -13,7 +13,7 @@ */ -$oids = 'entPhysicalSoftwareRev.22 entPhysicalName.149 entPhysicalSerialNum.10'; +$oids = ['entPhysicalSoftwareRev.22', 'entPhysicalName.149', 'entPhysicalSerialNum.10']; $data = snmp_get_multi($device, $oids, '-OQUs', 'ENTITY-MIB'); diff --git a/includes/polling/os/openbsd.inc.php b/includes/polling/os/openbsd.inc.php index 98d4ece920..8f73a0fdd3 100644 --- a/includes/polling/os/openbsd.inc.php +++ b/includes/polling/os/openbsd.inc.php @@ -5,7 +5,7 @@ use LibreNMS\RRD\RrdDefinition; list(,,$version,$features,$hardware) = explode(" ", $device['sysDescr']); $features = str_replace(['(', ')'], '', $features); -$oids = snmp_get_multi($device, 'pfStateCount.0 pfStateSearches.0 pfStateInserts.0 pfStateRemovals.0', '-OQUs', 'OPENBSD-PF-MIB'); +$oids = snmp_get_multi($device, ['pfStateCount.0', 'pfStateSearches.0', 'pfStateInserts.0', 'pfStateRemovals.0'], '-OQUs', 'OPENBSD-PF-MIB'); $states = $oids[0]['pfStateCount']; $searches = $oids[0]['pfStateSearches']; diff --git a/includes/polling/os/panos.inc.php b/includes/polling/os/panos.inc.php index 7e1dc048d4..5a17898300 100644 --- a/includes/polling/os/panos.inc.php +++ b/includes/polling/os/panos.inc.php @@ -2,7 +2,7 @@ use LibreNMS\RRD\RrdDefinition; -$oids = snmp_get_multi($device, 'panChassisType.0 panSysSwVersion.0 panSysSerialNumber.0 panSessionActive.0 panSessionActiveTcp.0 panSessionActiveUdp.0 panSessionActiveICMP.0 panSessionActiveSslProxy.0 panSessionSslProxyUtilization.0 panGPGWUtilizationActiveTunnels.0', '-OQUs', 'PAN-COMMON-MIB'); +$oids = snmp_get_multi($device, ['panChassisType.0', 'panSysSwVersion.0', 'panSysSerialNumber.0', 'panSessionActive.0', 'panSessionActiveTcp.0', 'panSessionActiveUdp.0', 'panSessionActiveICMP.0', 'panSessionActiveSslProxy.0', 'panSessionSslProxyUtilization.0', 'panGPGWUtilizationActiveTunnels.0'], '-OQUs', 'PAN-COMMON-MIB'); $hardware = $oids[0]['panChassisType']; $version = $oids[0]['panSysSwVersion']; diff --git a/includes/polling/os/pfsense.inc.php b/includes/polling/os/pfsense.inc.php index b0b9b81947..714810f513 100644 --- a/includes/polling/os/pfsense.inc.php +++ b/includes/polling/os/pfsense.inc.php @@ -2,7 +2,7 @@ use LibreNMS\RRD\RrdDefinition; -$oids = snmp_get_multi($device, 'pfStateTableCount.0 pfStateTableSearches.0 pfStateTableInserts.0 pfStateTableRemovals.0 pfCounterMatch.0 pfCounterBadOffset.0 pfCounterFragment.0 pfCounterShort.0 pfCounterNormalize.0 pfCounterMemDrop.0', '-OQUs', 'BEGEMOT-PF-MIB'); +$oids = snmp_get_multi($device, ['pfStateTableCount.0', 'pfStateTableSearches.0', 'pfStateTableInserts.0', 'pfStateTableRemovals.0', 'pfCounterMatch.0', 'pfCounterBadOffset.0', 'pfCounterFragment.0', 'pfCounterShort.0', 'pfCounterNormalize.0', 'pfCounterMemDrop.0'], '-OQUs', 'BEGEMOT-PF-MIB'); $states = $oids[0]['pfStateTableCount']; $searches = $oids[0]['pfStateTableSearches']; diff --git a/includes/polling/os/pmp.inc.php b/includes/polling/os/pmp.inc.php index 9908100a9f..9103f6ace6 100644 --- a/includes/polling/os/pmp.inc.php +++ b/includes/polling/os/pmp.inc.php @@ -119,7 +119,7 @@ if (is_numeric($jitter)) { unset($rrd_filename, $jitter); } -$multi_get_array = snmp_get_multi($device, "regCount.0 regFailureCount.0", "-OQU", "WHISP-APS-MIB"); +$multi_get_array = snmp_get_multi($device, ['regCount.0', 'regFailureCount.0'], "-OQU", "WHISP-APS-MIB"); d_echo($multi_get_array); $registered = $multi_get_array[0]["WHISP-APS-MIB::regCount"]; $failed = $multi_get_array[0]["WHISP-APS-MIB::regFailureCount"]; diff --git a/includes/polling/os/powerlogic.inc.php b/includes/polling/os/powerlogic.inc.php index 932f11f9c4..4bbb5481a0 100644 --- a/includes/polling/os/powerlogic.inc.php +++ b/includes/polling/os/powerlogic.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$data = snmp_get_multi_oid($device, 'midSerialNumber.1 midFirmwareVersion.1 midModelNumber.1 midDeviceName.1', '-OQs', 'PM8ECCMIB'); +$data = snmp_get_multi_oid($device, ['midSerialNumber.1', 'midFirmwareVersion.1', 'midModelNumber.1', 'midDeviceName.1'], '-OQs', 'PM8ECCMIB'); $serial = trim($data['midSerialNumber.1'], '"'); $version = trim($data['midFirmwareVersion.1'], '"'); $hardware = trim($data['midDeviceName.1'], '"'); diff --git a/includes/polling/os/remoteye4.inc.php b/includes/polling/os/remoteye4.inc.php index f125f4b0e3..8a74803509 100644 --- a/includes/polling/os/remoteye4.inc.php +++ b/includes/polling/os/remoteye4.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$remoteye4_tmp = snmp_get_multi($device, 'upsIdentName.0 upsIdentAgentSoftwareVersion.0', '-OQUs', 'UPS-MIB'); +$remoteye4_tmp = snmp_get_multi($device, ['upsIdentName.0', 'upsIdentAgentSoftwareVersion.0'], '-OQUs', 'UPS-MIB'); $hardware = $remoteye4_tmp[0]['upsIdentName']; $version = str_replace('RemotEye4 ', '', $remoteye4_tmp[0]['upsIdentAgentSoftwareVersion']); diff --git a/includes/polling/os/rittal-lcp.inc.php b/includes/polling/os/rittal-lcp.inc.php index bf12f9444e..0f8edcf6ee 100644 --- a/includes/polling/os/rittal-lcp.inc.php +++ b/includes/polling/os/rittal-lcp.inc.php @@ -1,6 +1,6 @@ */ -$tycon_data = snmp_get_multi_oid($device, 'name.0 version.0', '-OUQs', 'TPDIN2-MIB'); +$tycon_data = snmp_get_multi_oid($device, ['name.0', 'version.0'], '-OUQs', 'TPDIN2-MIB'); $hardware = $tycon_data['name.0']; $version = $tycon_data['version.0']; diff --git a/includes/polling/os/waas.inc.php b/includes/polling/os/waas.inc.php index eb2cab5374..2866bdecfc 100644 --- a/includes/polling/os/waas.inc.php +++ b/includes/polling/os/waas.inc.php @@ -12,7 +12,7 @@ use LibreNMS\RRD\RrdDefinition; -$oids = 'entPhysicalContainedIn.1 entPhysicalSoftwareRev.1 entPhysicalSerialNum.1 entPhysicalModelName.1'; +$oids = ['entPhysicalContainedIn.1', 'entPhysicalSoftwareRev.1', 'entPhysicalSerialNum.1', 'entPhysicalModelName.1']; $data = snmp_get_multi($device, $oids, '-OQUs', 'ENTITY-MIB'); if ($data[1]['entPhysicalContainedIn'] == '0') { if (!empty($data[1]['entPhysicalSoftwareRev'])) { diff --git a/includes/polling/os/zyxelnwa.inc.php b/includes/polling/os/zyxelnwa.inc.php index f232a82d47..a8000e18f9 100644 --- a/includes/polling/os/zyxelnwa.inc.php +++ b/includes/polling/os/zyxelnwa.inc.php @@ -1,7 +1,7 @@ */ -$oceanstor_tmp = snmp_get_multi_oid($device, 'usedCapacity.0 totalCapacity.0', '-OUQs', 'ISM-STORAGE-SVC-MIB'); +$oceanstor_tmp = snmp_get_multi_oid($device, ['usedCapacity.0', 'totalCapacity.0'], '-OUQs', 'ISM-STORAGE-SVC-MIB'); $storage['size'] = $oceanstor_tmp['totalCapacity.0']; $storage['used'] = $oceanstor_tmp['usedCapacity.0']; diff --git a/includes/polling/storage/onefs.inc.php b/includes/polling/storage/onefs.inc.php index 8f0afddb55..db03e6ad28 100644 --- a/includes/polling/storage/onefs.inc.php +++ b/includes/polling/storage/onefs.inc.php @@ -23,7 +23,7 @@ * @author Neil Lathwood */ -$onefs_oids = snmp_get_multi_oid($device, 'ifsTotalBytes.0 ifsUsedBytes.0 ifsAvailableBytes.0', '-OUQn', 'ISILON-MIB'); +$onefs_oids = snmp_get_multi_oid($device, ['ifsTotalBytes.0', 'ifsUsedBytes.0', 'ifsAvailableBytes.0'], '-OUQn', 'ISILON-MIB'); $storage['free'] = $onefs_oids['.1.3.6.1.4.1.12124.1.3.3.0']; $storage['size'] = $onefs_oids['.1.3.6.1.4.1.12124.1.3.1.0']; $storage['used'] = $onefs_oids['.1.3.6.1.4.1.12124.1.3.2.0']; diff --git a/includes/polling/ucd-mib.inc.php b/includes/polling/ucd-mib.inc.php index 751f8fce56..09ca12bee6 100644 --- a/includes/polling/ucd-mib.inc.php +++ b/includes/polling/ucd-mib.inc.php @@ -117,7 +117,7 @@ if (is_numeric($ss['ssRawInterrupts'])) { // UCD-SNMP-MIB::memSwapError.0 = INTEGER: noError(0) // UCD-SNMP-MIB::memSwapErrorMsg.0 = STRING: -$snmpdata = snmp_get_multi($device, 'memTotalSwap.0 memAvailSwap.0 memTotalReal.0 memAvailReal.0 memTotalFree.0 memShared.0 memBuffer.0 memCached.0', '-OQUs', 'UCD-SNMP-MIB'); +$snmpdata = snmp_get_multi($device, ['memTotalSwap.0', 'memAvailSwap.0', 'memTotalReal.0', 'memAvailReal.0', 'memTotalFree.0', 'memShared.0', 'memBuffer.0', 'memCached.0'], '-OQUs', 'UCD-SNMP-MIB'); if (is_array($snmpdata[0])) { list($memTotalSwap, $memAvailSwap, $memTotalReal, $memAvailReal, $memTotalFree, $memShared, $memBuffer, $memCached) = $snmpdata[0]; foreach (array_keys($snmpdata[0]) as $key) { @@ -160,7 +160,7 @@ if (is_numeric($memTotalReal) && is_numeric($memAvailReal) && is_numeric($memTot // UCD-SNMP-MIB::laLoadInt.1 = INTEGER: 206 // UCD-SNMP-MIB::laLoadInt.2 = INTEGER: 429 // UCD-SNMP-MIB::laLoadInt.3 = INTEGER: 479 -$load_raw = snmp_get_multi($device, 'laLoadInt.1 laLoadInt.2 laLoadInt.3', '-OQUs', 'UCD-SNMP-MIB'); +$load_raw = snmp_get_multi($device, ['laLoadInt.1', 'laLoadInt.2', 'laLoadInt.3'], '-OQUs', 'UCD-SNMP-MIB'); // Check to see that the 5-min OID is actually populated before we make the rrd if (is_numeric($load_raw[2]['laLoadInt'])) { diff --git a/includes/polling/wireless/cambium-epmp.inc.php b/includes/polling/wireless/cambium-epmp.inc.php index d22d2bc1f6..1c41951b47 100644 --- a/includes/polling/wireless/cambium-epmp.inc.php +++ b/includes/polling/wireless/cambium-epmp.inc.php @@ -104,7 +104,7 @@ if (is_numeric($gpsSync)) { // $graphs['cambium_epmp_freq'] = true; // } -$multi_get_array = snmp_get_multi($device, "ulWLanTotalAvailableFrameTimePerSecond.0 ulWLanTotalUsedFrameTimePerSecond.0 dlWLanTotalAvailableFrameTimePerSecond.0 dlWLanTotalUsedFrameTimePerSecond.0", "-OQU", "CAMBIUM-PMP80211-MIB"); +$multi_get_array = snmp_get_multi($device, ['ulWLanTotalAvailableFrameTimePerSecond.0', 'ulWLanTotalUsedFrameTimePerSecond.0', 'dlWLanTotalAvailableFrameTimePerSecond.0', 'dlWLanTotalUsedFrameTimePerSecond.0'], "-OQU", "CAMBIUM-PMP80211-MIB"); $ulWLanTotalAvailableFrameTimePerSecond = $multi_get_array[0]["CAMBIUM-PMP80211-MIB::ulWLanTotalAvailableFrameTimePerSecond"]; $ulWLanTotalUsedFrameTimePerSecond = $multi_get_array[0]["CAMBIUM-PMP80211-MIB::ulWLanTotalUsedFrameTimePerSecond"]; diff --git a/includes/polling/wireless/canopy-generic.inc.php b/includes/polling/wireless/canopy-generic.inc.php index 3e93779c96..01cb2854c3 100644 --- a/includes/polling/wireless/canopy-generic.inc.php +++ b/includes/polling/wireless/canopy-generic.inc.php @@ -254,7 +254,7 @@ if (strstr($version, 'AP') == false) { //AP Equipment if (strstr($version, 'AP')) { - $multi_get_array = snmp_get_multi($device, "regCount.0 regFailureCount.0 currentRadioFreqCarrier.0 frUtlLowTotalDownlinkUtilization.0 frUtlLowTotalUplinkUtilization.0", "-OQU", "WHISP-APS-MIB"); + $multi_get_array = snmp_get_multi($device, ['regCount.0', 'regFailureCount.0', 'currentRadioFreqCarrier.0', 'frUtlLowTotalDownlinkUtilization.0', 'frUtlLowTotalUplinkUtilization.0'], "-OQU", "WHISP-APS-MIB"); d_echo($multi_get_array); $registered = $multi_get_array[0]["WHISP-APS-MIB::regCount"]; $failed = $multi_get_array[0]["WHISP-APS-MIB::regFailureCount"]; diff --git a/includes/snmp.inc.php b/includes/snmp.inc.php index 6430455f01..ae3998f188 100644 --- a/includes/snmp.inc.php +++ b/includes/snmp.inc.php @@ -101,23 +101,23 @@ function mibdir($mibdir = null, $device = []) return rtrim($dir, '/'); }, $dirs))); - return " -M " . implode(':', $dirs); + return implode(':', $dirs); }//end mibdir() /** * Generate an snmpget command * * @param array $device the we will be connecting to - * @param string $oids the oids to fetch, separated by spaces - * @param string $options extra snmp command options, usually this is output options + * @param array|string $oids the oids to fetch, separated by spaces + * @param array|string $options extra snmp command options, usually this is output options * @param string $mib an additional mib to add to this command * @param string $mibdir a mib directory to search for mibs, usually prepended with + - * @return string the fully assembled command, ready to run + * @return array the fully assembled command, ready to run */ function gen_snmpget_cmd($device, $oids, $options = null, $mib = null, $mibdir = null) { global $config; - $snmpcmd = $config['snmpget']; + $snmpcmd = [$config['snmpget']]; return gen_snmp_cmd($snmpcmd, $device, $oids, $options, $mib, $mibdir); } // end gen_snmpget_cmd() @@ -125,22 +125,22 @@ function gen_snmpget_cmd($device, $oids, $options = null, $mib = null, $mibdir = * Generate an snmpwalk command * * @param array $device the we will be connecting to - * @param string $oids the oids to fetch, separated by spaces - * @param string $options extra snmp command options, usually this is output options + * @param array|string $oids the oids to fetch, separated by spaces + * @param array|string $options extra snmp command options, usually this is output options * @param string $mib an additional mib to add to this command * @param string $mibdir a mib directory to search for mibs, usually prepended with + - * @return string the fully assembled command, ready to run + * @return array the fully assembled command, ready to run */ function gen_snmpwalk_cmd($device, $oids, $options = null, $mib = null, $mibdir = null) { global $config; if ($device['snmpver'] == 'v1' || (isset($device['os'], $config['os'][$device['os']]['nobulk']) && $config['os'][$device['os']]['nobulk'])) { - $snmpcmd = $config['snmpwalk']; + $snmpcmd = [$config['snmpwalk']]; } else { - $snmpcmd = $config['snmpbulkwalk']; + $snmpcmd = [$config['snmpbulkwalk']]; $max_repeaters = get_device_max_repeaters($device); if ($max_repeaters > 0) { - $snmpcmd .= " -Cr$max_repeaters "; + $snmpcmd[] = "-Cr$max_repeaters"; } } return gen_snmp_cmd($snmpcmd, $device, $oids, $options, $mib, $mibdir); @@ -149,38 +149,35 @@ function gen_snmpwalk_cmd($device, $oids, $options = null, $mib = null, $mibdir /** * Generate an snmp command * - * @param string $cmd the snmp command to run, like snmpget + * @param array $cmd the snmp command to run, like snmpget plus any additional arguments in an array * @param array $device the we will be connecting to - * @param string $oids the oids to fetch, separated by spaces - * @param string $options extra snmp command options, usually this is output options + * @param array|string $oids the oids to fetch, separated by spaces + * @param array|string $options extra snmp command options, usually this is output options * @param string $mib an additional mib to add to this command * @param string $mibdir a mib directory to search for mibs, usually prepended with + - * @return string the fully assembled command, ready to run + * @return array the fully assembled command, ready to run */ function gen_snmp_cmd($cmd, $device, $oids, $options = null, $mib = null, $mibdir = null) { - global $debug; - - // populate timeout & retries values from configuration - $timeout = prep_snmp_setting($device, 'timeout'); - $retries = prep_snmp_setting($device, 'retries'); - if (!isset($device['transport'])) { $device['transport'] = 'udp'; } - $cmd .= snmp_gen_auth($device); - $cmd .= " $options"; - $cmd .= $mib ? " -m $mib" : ''; - $cmd .= mibdir($mibdir, $device); - $cmd .= isset($timeout) ? " -t $timeout" : ''; - $cmd .= isset($retries) ? " -r $retries" : ''; - $cmd .= ' '.$device['transport'].':'.$device['hostname'].':'.$device['port']; - $cmd .= " $oids"; - - if (!$debug) { - $cmd .= ' 2>/dev/null'; + $cmd = snmp_gen_auth($device, $cmd); + $cmd = $options ? array_merge($cmd, (array)$options) : $cmd; + if ($mib) { + array_push($cmd, '-m', $mib); } + array_push($cmd, '-M', mibdir($mibdir, $device)); + if ($timeout = prep_snmp_setting($device, 'timeout')) { + array_push($cmd, '-t', $timeout); + } + if ($retries = prep_snmp_setting($device, 'retries')) { + array_push($cmd, '-r', $retries); + } + + $cmd[] = $device['transport'].':'.$device['hostname'].':'.$device['port']; + $cmd = array_merge($cmd, (array)$oids); return $cmd; } // end gen_snmp_cmd() @@ -189,8 +186,8 @@ function snmp_get_multi($device, $oids, $options = '-OQUs', $mib = null, $mibdir { $time_start = microtime(true); - if (is_array($oids)) { - $oids = implode(' ', $oids); + if (!is_array($oids)) { + $oids = explode(' ', $oids); } $cmd = gen_snmpget_cmd($device, $oids, $options, $mib, $mibdir); @@ -229,8 +226,7 @@ function snmp_get_multi_oid($device, $oids, $options = '-OUQn', $mib = null, $mi $data = []; foreach (array_chunk($oids, $oid_limit) as $chunk) { - $partial_oids = implode(' ', $chunk); - $cmd = gen_snmpget_cmd($device, $partial_oids, $options, $mib, $mibdir); + $cmd = gen_snmpget_cmd($device, $chunk, $options, $mib, $mibdir); $result = trim(external_exec($cmd)); if ($result) { $data = array_merge($data, explode("\n", $result)); @@ -261,6 +257,16 @@ function snmp_get_multi_oid($device, $oids, $options = '-OUQn', $mib = null, $mi return $array; }//end snmp_get_multi_oid() +/** + * Simple snmpget, returns the output of the get or false if the get failed. + * + * @param array $device + * @param array|string $oid + * @param array|string $options + * @param string $mib + * @param string $mibdir + * @return bool|string + */ function snmp_get($device, $oid, $options = null, $mib = null, $mibdir = null) { $time_start = microtime(true); @@ -287,8 +293,8 @@ function snmp_get($device, $oid, $options = null, $mib = null, $mibdir = null) * For example instead of get sysName.0, you can getnext sysName to get the .0 value. * * @param array $device Target device - * @param string $oid The oid to getnext - * @param string $options Options to pass to snmpgetnext (-Oqv for example) + * @param array|string $oid The oid to getnext + * @param array|string $options Options to pass to snmpgetnext (-Oqv for example) * @param string $mib The MIB to use * @param string $mibdir Optional mib directory to search * @return string|false the output or false if the data could not be fetched @@ -297,7 +303,7 @@ function snmp_getnext($device, $oid, $options = null, $mib = null, $mibdir = nul { $time_start = microtime(true); - $snmpcmd = Config::get('snmpgetnext', 'snmpgetnext'); + $snmpcmd = [Config::get('snmpgetnext', 'snmpgetnext')]; $cmd = gen_snmp_cmd($snmpcmd, $device, $oid, $options, $mib, $mibdir); $data = trim(external_exec($cmd), "\" \n\r"); @@ -326,10 +332,10 @@ function snmp_getnext($device, $oid, $options = null, $mib = null, $mibdir = nul function snmp_getnext_multi($device, $oids, $options = '-OQUs', $mib = null, $mibdir = null, $array = array()) { $time_start = microtime(true); - if (is_array($oids)) { - $oids = implode(' ', $oids); + if (!is_array($oids)) { + $oids = explode(' ', $oids); } - $snmpcmd = Config::get('snmpgetnext', 'snmpgetnext'); + $snmpcmd = [Config::get('snmpgetnext', 'snmpgetnext')]; $cmd = gen_snmp_cmd($snmpcmd, $device, $oids, $options, $mib, $mibdir); $data = trim(external_exec($cmd), "\" \n\r"); @@ -359,9 +365,10 @@ function snmp_check($device) $time_start = microtime(true); $oid = '.1.3.6.1.2.1.1.2.0'; - $options = '-Oqvn'; - $cmd = gen_snmpget_cmd($device, $oid, $options); - exec($cmd, $data, $code); + $cmd = gen_snmpget_cmd($device, $oid, '-Oqvn'); + $proc = new \Symfony\Component\Process\Process($cmd); + $proc->run(); + $code = $proc->getExitCode(); d_echo("SNMP Check response code: $code".PHP_EOL); recordSnmpStatistic('snmpget', $time_start); @@ -398,7 +405,7 @@ function snmp_walk($device, $oid, $options = null, $mib = null, $mibdir = null) function snmpwalk_cache_cip($device, $oid, $array = array(), $mib = 0) { - $cmd = gen_snmpwalk_cmd($device, $oid, ' -OsnQ', $mib); + $cmd = gen_snmpwalk_cmd($device, $oid, '-OsnQ', $mib); $data = trim(external_exec($cmd)); // echo("Caching: $oid\n"); @@ -434,7 +441,7 @@ function snmpwalk_cache_cip($device, $oid, $array = array(), $mib = 0) function snmp_cache_ifIndex($device) { // FIXME: this is not yet using our own snmp_* - $cmd = gen_snmpwalk_cmd($device, 'ifIndex', ' -OQs', 'IF-MIB'); + $cmd = gen_snmpwalk_cmd($device, 'ifIndex', '-OQs', 'IF-MIB'); $data = trim(external_exec($cmd)); $array = array(); @@ -668,7 +675,7 @@ function snmpwalk_group($device, $oid, $mib = '', $depth = 1, $array = array(), function snmpwalk_cache_twopart_oid($device, $oid, $array, $mib = 0) { - $cmd = gen_snmpwalk_cmd($device, $oid, ' -OQUs', $mib); + $cmd = gen_snmpwalk_cmd($device, $oid, '-OQUs', $mib); $data = trim(external_exec($cmd)); foreach (explode("\n", $data) as $entry) { @@ -690,7 +697,7 @@ function snmpwalk_cache_threepart_oid($device, $oid, $array, $mib = 0) { global $debug; - $cmd = gen_snmpwalk_cmd($device, $oid, ' -OQUs', $mib); + $cmd = gen_snmpwalk_cmd($device, $oid, '-OQUs', $mib); $data = trim(external_exec($cmd)); foreach (explode("\n", $data) as $entry) { @@ -715,7 +722,7 @@ function snmpwalk_cache_threepart_oid($device, $oid, $array, $mib = 0) function snmp_cache_slotport_oid($oid, $device, $array, $mib = 0) { - $cmd = gen_snmpwalk_cmd($device, $oid, ' -OQUs', $mib); + $cmd = gen_snmpwalk_cmd($device, $oid, '-OQUs', $mib); $data = trim(external_exec($cmd)); foreach (explode("\n", $data) as $entry) { @@ -747,7 +754,7 @@ function snmp_cache_port_oids($oids, $port, $device, $array, $mib = 0) $string .= " $oid.$port"; } - $cmd = gen_snmpget_cmd($device, $string, ' -Ovq', $mib); + $cmd = gen_snmpget_cmd($device, $string, '-Ovq', $mib); $data = trim(external_exec($cmd)); $x = 0; @@ -765,47 +772,40 @@ function snmp_cache_port_oids($oids, $port, $device, $array, $mib = 0) }//end snmp_cache_port_oids() -function snmp_gen_auth(&$device) +/** + * generate snmp auth arguments + * @param array $device + * @param array $cmd + * @return array + */ +function snmp_gen_auth(&$device, $cmd = []) { - global $debug, $vdebug; - - $cmd = ''; - if ($device['snmpver'] === 'v3') { - $cmd = " -v3 -n '' -l '".$device['authlevel']."'"; + array_push($cmd, '-v3', '-l', $device['authlevel']); + array_push($cmd, '-n', isset($device['context_name']) ? $device['context_name'] : ''); - //add context if exist context - if (key_exists('context_name', $device)) { - $cmd = " -v3 -n '".$device['context_name']."' -l '".$device['authlevel']."'"; - } - - if (strtolower($device['authlevel']) === 'noauthnopriv') { + $authlevel = strtolower($device['authlevel']); + if ($authlevel === 'noauthnopriv') { // We have to provide a username anyway (see Net-SNMP doc) - $username = !empty($device['authname']) ? $device['authname'] : 'root'; - $cmd .= " -u '".$username."'"; - } elseif (strtolower($device['authlevel']) === 'authnopriv') { - $cmd .= " -a '".$device['authalgo']."'"; - $cmd .= " -A '".$device['authpass']."'"; - $cmd .= " -u '".$device['authname']."'"; - } elseif (strtolower($device['authlevel']) === 'authpriv') { - $cmd .= " -a '".$device['authalgo']."'"; - $cmd .= " -A '".$device['authpass']."'"; - $cmd .= " -u '".$device['authname']."'"; - $cmd .= " -x '".$device['cryptoalgo']."'"; - $cmd .= " -X '".$device['cryptopass']."'"; + array_push($cmd, '-u', !empty($device['authname']) ? $device['authname'] : 'root'); + } elseif ($authlevel === 'authnopriv') { + array_push($cmd, '-a', $device['authalgo']); + array_push($cmd, '-A', $device['authpass']); + array_push($cmd, '-u', $device['authname']); + } elseif ($authlevel === 'authpriv') { + array_push($cmd, '-a', $device['authalgo']); + array_push($cmd, '-A', $device['authpass']); + array_push($cmd, '-u', $device['authname']); + array_push($cmd, '-x', $device['cryptoalgo']); + array_push($cmd, '-X', $device['cryptopass']); } else { - if ($debug) { - print 'DEBUG: '.$device['snmpver']." : Unsupported SNMPv3 AuthLevel (wtf have you done ?)\n"; - } + d_echo('DEBUG: '.$device['snmpver']." : Unsupported SNMPv3 AuthLevel (wtf have you done ?)\n"); } - } elseif ($device['snmpver'] === 'v2c' or $device['snmpver'] === 'v1') { - $cmd = " -".$device['snmpver']; - $cmd .= " -c '".$device['community']."'"; + } elseif ($device['snmpver'] === 'v2c' || $device['snmpver'] === 'v1') { + array_push($cmd, '-' . $device['snmpver'], '-c', $device['community']); } else { - if ($debug) { - print 'DEBUG: '.$device['snmpver']." : Unsupported SNMP Version (shouldn't be possible to get here)\n"; - } - }//end if + d_echo('DEBUG: '.$device['snmpver']." : Unsupported SNMP Version (shouldn't be possible to get here)\n"); + } return $cmd; }//end snmp_gen_auth() @@ -832,7 +832,7 @@ function snmp_mib_parse($oid, $mib, $module, $mibdir = null, $device = array()) $lastpart = end($fulloid); $cmd = 'snmptranslate -Td -On'; - $cmd .= mibdir($mibdir, $device); + $cmd .= ' -M ' . mibdir($mibdir, $device); $cmd .= ' -m '.$module.' '.$module.'::'; $cmd .= $lastpart; @@ -912,7 +912,7 @@ function snmp_mib_parse($oid, $mib, $module, $mibdir = null, $device = array()) function snmp_mib_walk($mib, $module, $mibdir = null, $device = array()) { $cmd = 'snmptranslate -Ts'; - $cmd .= mibdir($mibdir, $device); + $cmd .= ' -M ' . mibdir($mibdir, $device); $cmd .= ' -m '.$module; $result = array(); $data = preg_split('/\n+/', shell_exec($cmd)); @@ -1008,10 +1008,8 @@ function snmp_mib_translate($oid, $module, $mibdir = null, $device = array()) $oid = "$module::$oid"; } - $cmd = 'snmptranslate'.mibdir($mibdir, $device); - $cmd .= " -IR -m $module $oid"; - // load all the MIBs looking for our object - $cmd .= ' 2>/dev/null'; + // load all the MIBs looking for our object (-IR) + $cmd = [Config::get('snmptranslate', 'snmptranslate'), '-M', mibdir($mibdir, $device), '-IR', '-m', $module, $oid]; // ignore invalid MIBs $lines = preg_split('/\n+/', external_exec($cmd)); if (empty($lines)) { @@ -1042,15 +1040,13 @@ function snmp_mib_translate($oid, $module, $mibdir = null, $device = array()) * @param string $oid * @param string $mib * @param string $mibdir the mib directory (relative to the LibreNMS mibs directory) - * @param string $options Options to pass to snmptranslate + * @param array|string $options Options to pass to snmptranslate * @param array $device * @return string */ function snmp_translate($oid, $mib = 'ALL', $mibdir = null, $options = null, $device = array()) { - $cmd = Config::get('snmptranslate', 'snmptranslate'); - $cmd .= mibdir($mibdir, $device); - $cmd .= " -m $mib"; + $cmd = [Config::get('snmptranslate', 'snmptranslate'), '-M', mibdir($mibdir, $device), '-m', $mib]; if (oid_is_numeric($oid)) { $default_options = '-Os'; @@ -1061,8 +1057,10 @@ function snmp_translate($oid, $mib = 'ALL', $mibdir = null, $options = null, $de $default_options = '-On'; } $options = is_null($options) ? $default_options : $options; + $cmd = array_merge($cmd, (array)$options); + $cmd[] = $oid; - return trim(external_exec("$cmd $options $oid 2>/dev/null")); + return trim(external_exec($cmd)); } diff --git a/misc/discovery_schema.json b/misc/discovery_schema.json index fdbf8d404b..65cf7b3b0d 100644 --- a/misc/discovery_schema.json +++ b/misc/discovery_schema.json @@ -81,7 +81,10 @@ "type": "string" }, "snmp_flags": { - "type": "string" + "type": [ + "string", + "array" + ] } }, "additionalProperties": false, @@ -187,7 +190,10 @@ ] }, "snmp_flags": { - "type": "string" + "type": [ + "string", + "array" + ] } }, "required": [ @@ -324,7 +330,10 @@ } }, "snmp_flags": { - "type": "string" + "type": [ + "string", + "array" + ] }, "entPhysicalIndex": { "type": "string" diff --git a/tests/YamlTest.php b/tests/YamlTest.php index 3ccf757bc1..b47d842887 100644 --- a/tests/YamlTest.php +++ b/tests/YamlTest.php @@ -26,6 +26,7 @@ namespace LibreNMS\Tests; use JsonSchema\Constraints\Constraint; +use JsonSchema\Exception\JsonDecodingException; use LibreNMS\Config; use PHPUnit_Framework_ExpectationFailedException as PHPUnitException; use Symfony\Component\Yaml\Exception\ParseException; @@ -62,12 +63,18 @@ class YamlTest extends TestCase throw new PHPUnitException("$path Could not be parsed", null, $e); } - $validator = new \JsonSchema\Validator; - $validator->validate( - $data, - $schema, - Constraint::CHECK_MODE_TYPE_CAST // | Constraint::CHECK_MODE_VALIDATE_SCHEMA - ); + try { + $validator = new \JsonSchema\Validator; + $validator->validate( + $data, + $schema, + Constraint::CHECK_MODE_TYPE_CAST // | Constraint::CHECK_MODE_VALIDATE_SCHEMA + ); + } catch (JsonDecodingException $e) { + // Output the filename so we know what file failed + echo "Json format invalid in $schema_file\n"; + throw $e; + } $errors = collect($validator->getErrors()) ->reduce(function ($out, $error) { diff --git a/tests/data/ird.json b/tests/data/ird.json index ef942c707b..b4f62a0ff0 100644 --- a/tests/data/ird.json +++ b/tests/data/ird.json @@ -1,42 +1,4 @@ { - "os": { - "discovery": { - "devices": [ - { - "sysName": "", - "sysObjectID": ".1.3.6.1.4.1.2021.250.10", - "sysDescr": "Linux DCH-4000P 2.4.20-uc0 #386 2013... 10... 24... ......... 14:08:33 CST armv3l", - "sysContact": null, - "version": null, - "hardware": null, - "features": null, - "location": null, - "os": "ird", - "type": "network", - "serial": null, - "icon": "pbi.png" - } - ] - }, - "poller": { - "devices": [ - { - "sysName": "", - "sysObjectID": ".1.3.6.1.4.1.2021.250.10", - "sysDescr": "Linux DCH-4000P 2.4.20-uc0 #386 2013... 10... 24... ......... 14:08:33 CST armv3l", - "sysContact": "", - "version": null, - "hardware": "", - "features": null, - "location": "", - "os": "ird", - "type": "network", - "serial": null, - "icon": "pbi.png" - } - ] - } - }, "sensors": { "discovery": { "sensors": [ @@ -51,9 +13,9 @@ "sensor_divisor": 1, "sensor_multiplier": 1, "sensor_current": 8, - "sensor_limit": 8.4000000000000004, + "sensor_limit": 8.4, "sensor_limit_warn": null, - "sensor_limit_low": 7.5999999999999996, + "sensor_limit_low": 7.6, "sensor_limit_low_warn": null, "sensor_alert": 1, "sensor_custom": "No", @@ -73,10 +35,10 @@ "sensor_descr": "C/N", "sensor_divisor": 10, "sensor_multiplier": 1, - "sensor_current": 16.300000000000001, - "sensor_limit": 17.114999999999998, + "sensor_current": 16.3, + "sensor_limit": 17.115, "sensor_limit_warn": null, - "sensor_limit_low": 15.484999999999999, + "sensor_limit_low": 15.485, "sensor_limit_low_warn": null, "sensor_alert": 1, "sensor_custom": "No", @@ -97,9 +59,9 @@ "sensor_divisor": 10, "sensor_multiplier": 1, "sensor_current": 11.5, - "sensor_limit": 12.074999999999999, + "sensor_limit": 12.075, "sensor_limit_warn": null, - "sensor_limit_low": 10.925000000000001, + "sensor_limit_low": 10.925, "sensor_limit_low_warn": null, "sensor_alert": 1, "sensor_custom": "No",