From:             lytboris at gmail dot com
Operating system: FreeBSD
PHP version:      5.2.9
PHP Bug Type:     SNMP related
Bug description:  *_real_walk returns SNMP errors as values

Description:
------------
When remote SNMP agent returns an error with same OID that contained
correct value *_real_walk functions will overwrite this correct value with
error message because there is no snmp reply status check.

Here is patch to address this issue:
========
--- ext/snmp/snmp.c.orig        2008-12-31 14:17:43.000000000 +0300
+++ ext/snmp/snmp.c     2009-05-14 10:31:23.000000000 +0400
@@ -480,12 +480,15 @@
                                        } else if (st == SNMP_CMD_WALK) {
                                               
add_next_index_zval(return_value,snmpval); /* Add to returned array */
                                        } else if (st ==
SNMP_CMD_REALWALK)  {
+                                               if (vars->type !=
SNMP_ENDOFMIBVIEW &&
+                                                       vars->type !=
SNMP_NOSUCHOBJECT && vars->type != SNMP_NOSUCHINSTANCE) {
 #ifdef HAVE_NET_SNMP
-                                               snprint_objid(buf2,
sizeof(buf2), vars->name, vars->name_length);
+                                                      
snprint_objid(buf2, sizeof(buf2), vars->name, vars->name_length);
 #else
-                                               sprint_objid(buf2,
vars->name, vars->name_length);
+                                                       sprint_objid(buf2,
vars->name, vars->name_length);
 #endif
-                                              
add_assoc_zval(return_value,buf2,snmpval);
+                                                      
add_assoc_zval(return_value,buf2,snmpval);
+                                               }
                                        }
                                        if (st >= SNMP_CMD_WALK && st !=
SNMP_CMD_SET) {
                                                if (vars->type !=
SNMP_ENDOFMIBVIEW &&
============

in BASE64 form:
begin-base64 644 -
LS0tIGV4dC9zbm1wL3NubXAuYy5vcmlnCTIwMDgtMTItMzEgMTQ6MTc6NDMuMDAwMDAwMDAwICsw
MzAwCisrKyBleHQvc25tcC9zbm1wLmMJMjAwOS0wNS0xNCAxMDozMToyMy4wMDAwMDAwMDAgKzA0
MDAKQEAgLTQ4MCwxMiArNDgwLDE1IEBACiAJCQkJCX0gZWxzZSBpZiAoc3QgPT0gU05NUF9DTURf
V0FMSykgewogCQkJCQkJYWRkX25leHRfaW5kZXhfenZhbChyZXR1cm5fdmFsdWUsc25tcHZhbCk7
IC8qIEFkZCB0byByZXR1cm5lZCBhcnJheSAqLwogCQkJCQl9IGVsc2UgaWYgKHN0ID09IFNOTVBf
Q01EX1JFQUxXQUxLKSAgeworCQkJCQkJaWYgKHZhcnMtPnR5cGUgIT0gU05NUF9FTkRPRk1JQlZJ
RVcgJiYgCisJCQkJCQkJdmFycy0+dHlwZSAhPSBTTk1QX05PU1VDSE9CSkVDVCAmJiB2YXJzLT50
eXBlICE9IFNOTVBfTk9TVUNISU5TVEFOQ0UpIHsKICNpZmRlZiBIQVZFX05FVF9TTk1QCi0JCQkJ
CQlzbnByaW50X29iamlkKGJ1ZjIsIHNpemVvZihidWYyKSwgdmFycy0+bmFtZSwgdmFycy0+bmFt
ZV9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCXNucHJpbnRfb2JqaWQoYnVmMiwgc2l6ZW9mKGJ1ZjIpLCB2YXJzLT5uYW1lLCB2YXJzLT5u
YW1lX2xlbmd0aCk7CiAjZWxzZQotCQkJCQkJc3ByaW50X29iamlkKGJ1ZjIsIHZhcnMtPm5hbWUs
IHZhcnMtPm5hbWVfbGVuZ3RoKTsKKwkJCQkJCQlzcHJpbnRfb2JqaWQoYnVmMiwgdmFycy0+bmFt
ZSwgdmFycy0+bmFtZV9sZW5ndGgpOwogI2VuZGlmCi0JCQkJCQlhZGRfYXNzb2NfenZhbChyZXR1
cm5fdmFsdWUsYnVmMixzbm1wdmFsKTsKKwkJCQkJCQlhZGRfYXNzb2NfenZhbChyZXR1cm5fdmFs
dWUsYnVmMixzbm1wdmFsKTsKKwkJCQkJCX0KIAkJCQkJfQogCQkJCQlpZiAoc3QgPj0gU05NUF9D
TURfV0FMSyAmJiBzdCAhPSBTTk1QX0NNRF9TRVQpIHsKIAkJCQkJCWlmICh2YXJzLT50eXBlICE9
IFNOTVBfRU5ET0ZNSUJWSUVXICYmIAo=
====


Reproduce code:
---------------
print_r(@snmp2_real_walk("host:161", "community",
".1.3.6.1.4.1.8072.2.1.2.3", (800 * 1000), 2)):
=======
Result shown by snmpwalk:
>snmpwalk -v2c -ccommunity host .1.3.6.1.4.1.8072.2.1.2.3
NET-SNMP-MIB::netSnmp.2.1.2.3.1 = ""
NET-SNMP-MIB::netSnmp.2.1.2.3.2 = ""
NET-SNMP-MIB::netSnmp.2.1.2.3.3 = ""
NET-SNMP-MIB::netSnmp.2.1.2.3.4 = ""
NET-SNMP-MIB::netSnmp.2.1.2.3.5 = ""
NET-SNMP-MIB::netSnmp.2.1.2.3.6 = ""
NET-SNMP-MIB::netSnmp.2.1.2.3.7 = ""
NET-SNMP-MIB::netSnmp.2.1.2.3.8 = STRING: "blah"
NET-SNMP-MIB::netSnmp.2.1.2.3.8 = No more variables left in this MIB View
(It is past the end of the MIB tree)


Expected result:
----------------
Array
(
    [NET-SNMP-MIB::netSnmp.2.1.2.3.1] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.2] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.3] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.4] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.5] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.6] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.7] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.8] => "blah"
)

Actual result:
--------------
Array
(
    [NET-SNMP-MIB::netSnmp.2.1.2.3.1] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.2] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.3] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.4] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.5] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.6] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.7] => ""
    [NET-SNMP-MIB::netSnmp.2.1.2.3.8] => No Such Instance currently exists
at this OID
)

-- 
Edit bug report at http://bugs.php.net/?id=48273&edit=1
-- 
Try a CVS snapshot (PHP 5.2):        
http://bugs.php.net/fix.php?id=48273&r=trysnapshot52
Try a CVS snapshot (PHP 5.3):        
http://bugs.php.net/fix.php?id=48273&r=trysnapshot53
Try a CVS snapshot (PHP 6.0):        
http://bugs.php.net/fix.php?id=48273&r=trysnapshot60
Fixed in CVS:                        
http://bugs.php.net/fix.php?id=48273&r=fixedcvs
Fixed in CVS and need be documented: 
http://bugs.php.net/fix.php?id=48273&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=48273&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=48273&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=48273&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=48273&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=48273&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=48273&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=48273&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=48273&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=48273&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=48273&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=48273&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=48273&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=48273&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=48273&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=48273&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=48273&r=mysqlcfg

Reply via email to