svn: /php/php-src/trunk/ext/snmp/ snmp.c tests/snmp2_get.phpt tests/snmpget.phpt
| From: | Boris Lytochkin | Date: | Sat, 27 Aug 2011 07:24:44 +0000 |
| Subject: | svn: /php/php-src/trunk/ext/snmp/ snmp.c tests/snmp2_get.phpt tests/snmpget.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-65985@lists.php.net to get a copy of this message | ||
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