From fe100a499adc91e489823b1f7958f36177f5a305 Mon Sep 17 00:00:00 2001 From: laf Date: Wed, 5 Mar 2014 15:02:04 +0000 Subject: [PATCH] Fix for Cisco kit where match prefix is switched off. --- includes/discovery/vlans.inc.php | 17 +++++++++++++++-- includes/snmp.inc.php | 18 +++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/includes/discovery/vlans.inc.php b/includes/discovery/vlans.inc.php index 4d32f510c9c2..3eaec69f1b61 100644 --- a/includes/discovery/vlans.inc.php +++ b/includes/discovery/vlans.inc.php @@ -31,9 +31,22 @@ if ($device['os_group'] == "cisco" || $device['os'] == "ios") // This shit only seems to work on IOS { # Probably does not work with snmpv3. I have no real idea about what this code is really doing + $device_details = $device; + $device_details['snmpcontext'] = $vlan_id; $vlan_device = array_merge($device, array('community' => $device['community']."@".$vlan_id)); - $vlan_data = snmpwalk_cache_oid($vlan_device, "dot1dStpPortEntry", array(), "BRIDGE-MIB:Q-BRIDGE-MIB"); - $vlan_data = snmpwalk_cache_oid($vlan_device, "dot1dBasePortEntry", $vlan_data, "BRIDGE-MIB:Q-BRIDGE-MIB"); + $vlan_data = snmpwalk_cache_oid($device_details, "dot1dStpPortEntry", array(), "BRIDGE-MIB:Q-BRIDGE-MIB"); + if ($exec_response['status'] != 0) + { + unset($device_details); + if( $device['snmpver'] == 'v3') + { + print_error("ERROR: For 'vlan-' context to work correctly on cisco device with SNMPv3, please add 'match prefix' into snmp config."); + } else { + print_error("ERROR: No support for per-VLAN community"); + } + break; + } + $vlan_data = snmpwalk_cache_oid($device_details, "dot1dBasePortEntry", $vlan_data, "BRIDGE-MIB:Q-BRIDGE-MIB"); } echo("VLAN $vlan_id \n"); diff --git a/includes/snmp.inc.php b/includes/snmp.inc.php index c5d0117a682c..ada175c39da2 100644 --- a/includes/snmp.inc.php +++ b/includes/snmp.inc.php @@ -765,12 +765,28 @@ function snmp_cache_portName($device, $array) function snmp_gen_auth (&$device) { global $debug; + $vlan = FALSE; + + if (isset($device['snmpcontext'])) + { + if (is_numeric($device['snmpcontext']) && $device['snmpcontext'] > 0 && $device['snmpcontext'] < 4096 ) + { + $vlan = $device['snmpcontext']; + } + } $cmd = ""; if ($device['snmpver'] === "v3") { - $cmd = " -v3 -n \"\" -l " . $device['authlevel']; + $cmd = " -v3 -l " . $device['authlevel']; + + if(is_numeric($vlan)) + { + $cmd .= ' -n "vlan-' . $vlan . '"'; + } else { + $cmd .= ' -n ""'; + } if ($device['authlevel'] === "noAuthNoPriv") {