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

Reply via email to