r2129 - bugfix: work around some NET-SNMP builds (reported by Walery Wysotsky)
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 12 Aug 2008 20:29:05 +0000 (20:29 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 12 Aug 2008 20:29:05 +0000 (20:29 +0000)
ChangeLog
inc/snmp.php

index a17137df074da1a9a16487fd074e2e90c1718549..5ac5d4bd5ef17bbbbccd5240f9007834ff45342c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 0.16.2
        bugfix: IP address picker was broken
        bugfix: more message processing fixes
+       bugfix: work around some NET-SNMP builds (reported by Walery Wysotsky)
        new feature: "router" addresses allocations
        new feature: support for local extensions
        new feature: IPv4 networks hierarchy
index e408b7aa584339f7d0e1eb91457394e356a573a8..a0f8f6337177aab4f5be00af03e0901aa67a3d9e 100644 (file)
@@ -183,10 +183,24 @@ function doSNMPmining ($object_id, $community)
        }
        foreach ($ifPhysAddress as $key => $val)
        {
+               $val = trim ($val);
                list ($dummy, $ifIndex) = explode ('.', $key);
-               list ($dummy, $addr) = explode (':', $val);
-               $addr = str_replace (' ', '', $addr);
-               $ifList1[$ifIndex]['phyad'] = $addr;
+               // NET-SNMP may return MAC addresses in one of two (?) formats depending on
+               // DISPLAY-HINT internal database. The best we can do about it is to accept both.
+               // Bug originally reported by Walery Wysotsky against openSUSE 11.0.
+               if (preg_match ('/^string: /i', $val)) // STRING: x:yy:z:xx:y:zz
+               {
+                       list ($dummy, $val) = explode (' ', $val);
+                       $addrbytes = explode (':', $val);
+                       foreach ($addrbytes as $bidx => $bytestr)
+                               if (strlen ($bytestr) == 1)
+                                       $addrbytes[$bidx] = '0' . $bytestr;
+               }
+               elseif (preg_match ('/^hex-string: /i', $val)) // Hex-STRING: xx yy zz xx yy zz
+                       $addrbytes = explode (' ', substr ($val, -17));
+               else
+                       continue; // martian format
+               $ifList1[$ifIndex]['phyad'] = implode ('', $addrbytes);
        }
        // ...and then reverse it inside out to make description the key.
        $ifList2 = array();