lytboris Sat, 27 Aug 2011 07:24:44 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=315606
Log: reformat OID parsing procedure, fail whole SNMP query on single OID parsing failure Changed paths: U php/php-src/trunk/ext/snmp/snmp.c U php/php-src/trunk/ext/snmp/tests/snmp2_get.phpt U php/php-src/trunk/ext/snmp/tests/snmpget.phpt Modified: php/php-src/trunk/ext/snmp/snmp.c =================================================================== --- php/php-src/trunk/ext/snmp/snmp.c 2011-08-27 01:52:47 UTC (rev 315605) +++ php/php-src/trunk/ext/snmp/snmp.c 2011-08-27 07:24:44 UTC (rev 315606) @@ -744,24 +744,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))) { @@ -770,7 +774,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)); @@ -779,17 +784,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: Modified: php/php-src/trunk/ext/snmp/tests/snmp2_get.phpt =================================================================== --- php/php-src/trunk/ext/snmp/tests/snmp2_get.phpt 2011-08-27 01:52:47 UTC (rev 315605) +++ php/php-src/trunk/ext/snmp/tests/snmp2_get.phpt 2011-08-27 07:24:44 UTC (rev 315606) @@ -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/trunk/ext/snmp/tests/snmpget.phpt =================================================================== --- php/php-src/trunk/ext/snmp/tests/snmpget.phpt 2011-08-27 01:52:47 UTC (rev 315605) +++ php/php-src/trunk/ext/snmp/tests/snmpget.phpt 2011-08-27 07:24:44 UTC (rev 315606) @@ -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