lytboris                                 Sat, 27 Aug 2011 07:33:27 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=315607

Log:
merge from trunk:
reformat OID parsing procedure,
fail whole SNMP query on single OID parsing failure

Changed paths:
    _U  php/php-src/branches/PHP_5_4/ext/snmp/
    U   php/php-src/branches/PHP_5_4/ext/snmp/snmp.c
    _U  php/php-src/branches/PHP_5_4/ext/snmp/tests/
    U   php/php-src/branches/PHP_5_4/ext/snmp/tests/snmp2_get.phpt
    U   php/php-src/branches/PHP_5_4/ext/snmp/tests/snmpget.phpt


Property changes on: php/php-src/branches/PHP_5_4/ext/snmp
___________________________________________________________________
Modified: svn:mergeinfo
   - /php/php-src/trunk/ext/snmp:284726,311033-315236
   + /php/php-src/trunk/ext/snmp:284726,311033-315236,315606

Modified: php/php-src/branches/PHP_5_4/ext/snmp/snmp.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/snmp/snmp.c        2011-08-27 07:24:44 UTC 
(rev 315606)
+++ php/php-src/branches/PHP_5_4/ext/snmp/snmp.c        2011-08-27 07:33:27 UTC 
(rev 315607)
@@ -729,24 +729,28 @@

        while (keepwalking) {
                keepwalking = 0;
-               if (st & (SNMP_CMD_GET | SNMP_CMD_GETNEXT)) {
-                       pdu = snmp_pdu_create((st & SNMP_CMD_GET) ? 
SNMP_MSG_GET : SNMP_MSG_GETNEXT);
-                       for (count = 0; objid_query->offset < 
objid_query->count && count < objid_query->step; objid_query->offset++, 
count++){
-                               
objid_query->vars[objid_query->offset].name_length = MAX_OID_LEN;
-                               if 
(!snmp_parse_oid(objid_query->vars[objid_query->offset].oid, 
objid_query->vars[objid_query->offset].name, 
&(objid_query->vars[objid_query->offset].name_length))) {
-                                       php_error_docref(NULL TSRMLS_CC, 
E_WARNING, "Invalid object identifier: %s", 
objid_query->vars[objid_query->offset].oid);
-                               } else {
-                                       snmp_add_null_var(pdu, 
objid_query->vars[objid_query->offset].name, 
objid_query->vars[objid_query->offset].name_length);
-                               }
+               if (st & SNMP_CMD_WALK) {
+                       if (session->version == SNMP_VERSION_1) {
+                               pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
+                       } else {
+                               pdu = snmp_pdu_create(SNMP_MSG_GETBULK);
+                               pdu->non_repeaters = objid_query->non_repeaters;
+                               pdu->max_repetitions = 
objid_query->max_repetitions;
                        }
-                       if(pdu->variables == NULL){
-                               snmp_free_pdu(pdu);
+                       snmp_add_null_var(pdu, name, name_length);
+               } else {
+                       if (st & SNMP_CMD_GET) {
+                               pdu = snmp_pdu_create(SNMP_MSG_GET);
+                       } else if (st & SNMP_CMD_GETNEXT) {
+                               pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
+                       } else if (st & SNMP_CMD_SET) {
+                               pdu = snmp_pdu_create(SNMP_MSG_SET);
+                       } else {
                                snmp_close(ss);
+                               php_error_docref(NULL TSRMLS_CC, E_ERROR, 
"Unknown SNMP command (internals)");
                                RETVAL_FALSE;
                                return;
                        }
-               } else if (st & SNMP_CMD_SET) {
-                       pdu = snmp_pdu_create(SNMP_MSG_SET);
                        for (count = 0; objid_query->offset < 
objid_query->count && count < objid_query->step; objid_query->offset++, 
count++){
                                
objid_query->vars[objid_query->offset].name_length = MAX_OID_LEN;
                                if 
(!snmp_parse_oid(objid_query->vars[objid_query->offset].oid, 
objid_query->vars[objid_query->offset].name, 
&(objid_query->vars[objid_query->offset].name_length))) {
@@ -755,7 +759,8 @@
                                        snmp_close(ss);
                                        RETVAL_FALSE;
                                        return;
-                               } else {
+                               }
+                               if (st & SNMP_CMD_SET) {
                                        if ((snmp_errno = snmp_add_var(pdu, 
objid_query->vars[objid_query->offset].name, 
objid_query->vars[objid_query->offset].name_length, 
objid_query->vars[objid_query->offset].type, 
objid_query->vars[objid_query->offset].value))) {
                                                snprint_objid(buf, sizeof(buf), 
objid_query->vars[objid_query->offset].name, 
objid_query->vars[objid_query->offset].name_length);
                                                php_error_docref(NULL 
TSRMLS_CC, E_WARNING, "Could not add variable: OID='%s' type='%c' value='%s': 
%s", buf, objid_query->vars[objid_query->offset].type, 
objid_query->vars[objid_query->offset].value, snmp_api_errstring(snmp_errno));
@@ -764,17 +769,16 @@
                                                RETVAL_FALSE;
                                                return;
                                        }
+                               } else {
+                                       snmp_add_null_var(pdu, 
objid_query->vars[objid_query->offset].name, 
objid_query->vars[objid_query->offset].name_length);
                                }
                        }
-               } else if (st & SNMP_CMD_WALK) {
-                       if (session->version == SNMP_VERSION_1) {
-                               pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
-                       } else {
-                               pdu = snmp_pdu_create(SNMP_MSG_GETBULK);
-                               pdu->non_repeaters = objid_query->non_repeaters;
-                               pdu->max_repetitions = 
objid_query->max_repetitions;
+                       if(pdu->variables == NULL){
+                               snmp_free_pdu(pdu);
+                               snmp_close(ss);
+                               RETVAL_FALSE;
+                               return;
                        }
-                       snmp_add_null_var(pdu, name, name_length);
                }

 retry:


Property changes on: php/php-src/branches/PHP_5_4/ext/snmp/tests
___________________________________________________________________
Modified: svn:mergeinfo
   - /php/php-src/trunk/ext/snmp/tests:284726,311033-315236,315386
   + /php/php-src/trunk/ext/snmp/tests:284726,311033-315236,315386,315606

Modified: php/php-src/branches/PHP_5_4/ext/snmp/tests/snmp2_get.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/snmp/tests/snmp2_get.phpt  2011-08-27 
07:24:44 UTC (rev 315606)
+++ php/php-src/branches/PHP_5_4/ext/snmp/tests/snmp2_get.phpt  2011-08-27 
07:33:27 UTC (rev 315607)
@@ -85,10 +85,7 @@
 Multiple OID

 Warning: snmp2_get(): Invalid object identifier: .1.3.6.1.2.1...1.1.0 in %s on 
line %d
-array(1) {
-  ["%s"]=>
-  %unicode|string%(%d) "%d"
-}
+bool(false)
 noSuchName checks
 Single OID


Modified: php/php-src/branches/PHP_5_4/ext/snmp/tests/snmpget.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/snmp/tests/snmpget.phpt    2011-08-27 
07:24:44 UTC (rev 315606)
+++ php/php-src/branches/PHP_5_4/ext/snmp/tests/snmpget.phpt    2011-08-27 
07:33:27 UTC (rev 315607)
@@ -87,10 +87,7 @@
 Multiple OID

 Warning: snmpget(): Invalid object identifier: .1.3.6.1.2.1...1.1.0 in %s on 
line %d
-array(1) {
-  ["%s"]=>
-  %unicode|string%(%d) "%d"
-}
+bool(false)
 noSuchName checks
 Single OID


-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to