lytboris Sun, 17 Jul 2011 19:45:05 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=313341
Log:
new propery noOIDIncreasingCheck allowing to skip
OID increasing check (userful for bogus SNMP agents)
Changed paths:
U php/php-src/trunk/ext/snmp/php_snmp.h
U php/php-src/trunk/ext/snmp/snmp.c
U php/php-src/trunk/ext/snmp/tests/snmp-object-properties.phpt
Modified: php/php-src/trunk/ext/snmp/php_snmp.h
===================================================================
--- php/php-src/trunk/ext/snmp/php_snmp.h 2011-07-17 19:26:54 UTC (rev
313340)
+++ php/php-src/trunk/ext/snmp/php_snmp.h 2011-07-17 19:45:05 UTC (rev
313341)
@@ -93,6 +93,7 @@
int enum_print;
int oid_output_format;
int snmp_errno;
+ int noOIDIncreasingCheck;
char snmp_errstr[128];
} php_snmp_object;
Modified: php/php-src/trunk/ext/snmp/snmp.c
===================================================================
--- php/php-src/trunk/ext/snmp/snmp.c 2011-07-17 19:26:54 UTC (rev 313340)
+++ php/php-src/trunk/ext/snmp/snmp.c 2011-07-17 19:45:05 UTC (rev 313341)
@@ -376,6 +376,7 @@
long max_repetitions;
int valueretrieval;
int array_output;
+ int noOIDIncreasingCheck;
snmpobjarg *vars;
};
@@ -878,7 +879,7 @@
/* OID increase check */
if (st & SNMP_CMD_WALK) {
- if (snmp_oid_compare(name,
name_length, vars->name, vars->name_length) >= 0) {
+ if
(objid_query->noOIDIncreasingCheck == FALSE && snmp_oid_compare(name,
name_length, vars->name, vars->name_length) >= 0) {
snprint_objid(buf2,
sizeof(buf2), vars->name, vars->name_length);
php_snmp_error(getThis(), NULL TSRMLS_CC, PHP_SNMP_ERRNO_OID_NOT_INCREASING,
"Error: OID not increasing: %s", buf2);
keepwalking = 0;
@@ -1331,6 +1332,7 @@
objid_query.max_repetitions = -1;
objid_query.non_repeaters = 0;
objid_query.valueretrieval = SNMP_G(valueretrieval);
+ objid_query.noOIDIncreasingCheck = FALSE;
if (session_less_mode) {
if (version == SNMP_VERSION_3) {
@@ -1424,6 +1426,7 @@
objid_query.max_repetitions =
snmp_object->max_oids;
}
}
+ objid_query.noOIDIncreasingCheck =
snmp_object->noOIDIncreasingCheck;
objid_query.valueretrieval = snmp_object->valueretrieval;
glob_snmp_object.enum_print =
netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID,
NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM);
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID,
NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, snmp_object->enum_print);
@@ -2107,41 +2110,28 @@
}
/* }}} */
-/* {{{ */
-static int php_snmp_read_valueretrieval(php_snmp_object *snmp_object, zval
**retval TSRMLS_DC)
-{
- MAKE_STD_ZVAL(*retval);
- ZVAL_LONG(*retval, snmp_object->valueretrieval);
- return SUCCESS;
-}
-/* }}} */
+#define PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(name) \
+ static int php_snmp_read_##name(php_snmp_object *snmp_object, zval
**retval TSRMLS_DC) \
+ { \
+ MAKE_STD_ZVAL(*retval); \
+ ZVAL_BOOL(*retval, snmp_object->name); \
+ return SUCCESS; \
+ }
-/* {{{ */
-static int php_snmp_read_quick_print(php_snmp_object *snmp_object, zval
**retval TSRMLS_DC)
-{
- MAKE_STD_ZVAL(*retval);
- ZVAL_BOOL(*retval, snmp_object->quick_print);
- return SUCCESS;
-}
-/* }}} */
+PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(noOIDIncreasingCheck)
+PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(quick_print)
+PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(enum_print)
-/* {{{ */
-static int php_snmp_read_enum_print(php_snmp_object *snmp_object, zval
**retval TSRMLS_DC)
-{
- MAKE_STD_ZVAL(*retval);
- ZVAL_BOOL(*retval, snmp_object->enum_print);
- return SUCCESS;
-}
-/* }}} */
+#define PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(name) \
+ static int php_snmp_read_##name(php_snmp_object *snmp_object, zval
**retval TSRMLS_DC) \
+ { \
+ MAKE_STD_ZVAL(*retval); \
+ ZVAL_LONG(*retval, snmp_object->name); \
+ return SUCCESS; \
+ }
-/* {{{ */
-static int php_snmp_read_oid_output_format(php_snmp_object *snmp_object, zval
**retval TSRMLS_DC)
-{
- MAKE_STD_ZVAL(*retval);
- ZVAL_LONG(*retval, snmp_object->oid_output_format);
- return SUCCESS;
-}
-/* }}} */
+PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(valueretrieval)
+PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(oid_output_format)
/* {{{ */
static int php_snmp_write_info(php_snmp_object *snmp_object, zval *newval
TSRMLS_DC)
@@ -2211,46 +2201,29 @@
}
/* }}} */
-/* {{{ */
-static int php_snmp_write_quick_print(php_snmp_object *snmp_object, zval
*newval TSRMLS_DC)
-{
- zval ztmp;
- if (Z_TYPE_P(newval) != IS_BOOL) {
- ztmp = *newval;
- zval_copy_ctor(&ztmp);
- convert_to_boolean(&ztmp);
- newval = &ztmp;
- }
-
- snmp_object->quick_print = Z_LVAL_P(newval);
-
- if (newval == &ztmp) {
- zval_dtor(newval);
- }
- return SUCCESS;
+#define PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(name) \
+static int php_snmp_write_##name(php_snmp_object *snmp_object, zval *newval
TSRMLS_DC) \
+{ \
+ zval ztmp; \
+ if (Z_TYPE_P(newval) != IS_BOOL) { \
+ ztmp = *newval; \
+ zval_copy_ctor(&ztmp); \
+ convert_to_boolean(&ztmp); \
+ newval = &ztmp; \
+ } \
+\
+ snmp_object->name = Z_LVAL_P(newval); \
+\
+ if (newval == &ztmp) { \
+ zval_dtor(newval); \
+ } \
+ return SUCCESS; \
}
-/* }}} */
-/* {{{ */
-static int php_snmp_write_enum_print(php_snmp_object *snmp_object, zval
*newval TSRMLS_DC)
-{
- zval ztmp;
- if (Z_TYPE_P(newval) != IS_BOOL) {
- ztmp = *newval;
- zval_copy_ctor(&ztmp);
- convert_to_boolean(&ztmp);
- newval = &ztmp;
- }
+PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(quick_print)
+PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(enum_print)
+PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(noOIDIncreasingCheck)
- snmp_object->enum_print = Z_LVAL_P(newval);
-
- if (newval == &ztmp) {
- zval_dtor(newval);
- }
- return SUCCESS;
-}
-/* }}} */
-
/* {{{ */
static int php_snmp_write_oid_output_format(php_snmp_object *snmp_object, zval
*newval TSRMLS_DC)
{
@@ -2311,6 +2284,7 @@
PHP_SNMP_PROPERTY_ENTRY_RECORD(quick_print),
PHP_SNMP_PROPERTY_ENTRY_RECORD(enum_print),
PHP_SNMP_PROPERTY_ENTRY_RECORD(oid_output_format),
+ PHP_SNMP_PROPERTY_ENTRY_RECORD(noOIDIncreasingCheck),
{ NULL, 0, NULL, NULL}
};
/* }}} */
Modified: php/php-src/trunk/ext/snmp/tests/snmp-object-properties.phpt
===================================================================
--- php/php-src/trunk/ext/snmp/tests/snmp-object-properties.phpt
2011-07-17 19:26:54 UTC (rev 313340)
+++ php/php-src/trunk/ext/snmp/tests/snmp-object-properties.phpt
2011-07-17 19:45:05 UTC (rev 313341)
@@ -26,6 +26,7 @@
$session->quick_print = TRUE;
$session->valueretrieval = SNMP_VALUE_LIBRARY;
$session->oid_output_format = SNMP_OID_OUTPUT_NUMERIC;
+$session->noOIDIncreasingCheck = TRUE;
var_dump($session);
@@ -34,6 +35,7 @@
$session->quick_print = "1";
$session->valueretrieval = "1";
$session->oid_output_format = "3";
+$session->noOIDIncreasingCheck = "45";
var_dump($session);
@@ -87,6 +89,8 @@
bool(false)
["oid_output_format"]=>
int(3)
+ ["noOIDIncreasingCheck"]=>
+ bool(false)
}
object(SNMP)#%d (%d) {
["info"]=>
@@ -110,6 +114,8 @@
bool(true)
["oid_output_format"]=>
int(4)
+ ["noOIDIncreasingCheck"]=>
+ bool(true)
}
object(SNMP)#%d (%d) {
["info"]=>
@@ -133,6 +139,8 @@
bool(true)
["oid_output_format"]=>
int(3)
+ ["noOIDIncreasingCheck"]=>
+ bool(true)
}
bool(true)
bool(true)
@@ -159,6 +167,8 @@
bool(true)
["oid_output_format"]=>
int(3)
+ ["noOIDIncreasingCheck"]=>
+ bool(true)
["123"]=>
string(11) "param_value"
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php