@@ -1224,6 +1224,44 @@ static ZEND_ATTRIBUTE_NONNULL_ARGS(2) bool snmp_session_set_security(struct snmp
12241224}
12251225/* }}} */
12261226
1227+ /*
1228+ * Save the snmplib state into the given php_snmp_object
1229+ */
1230+ static void save_snmplib_output_options (php_snmp_object * snmp_object )
1231+ {
1232+ // Booleans
1233+ snmp_object -> quick_print = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_QUICK_PRINT );
1234+ snmp_object -> enum_print = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM );
1235+ snmp_object -> numeric_index = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS );
1236+ snmp_object -> numeric_timeticks = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_NUMERIC_TIMETICKS );
1237+ snmp_object -> extended_index = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_EXTENDED_INDEX );
1238+ snmp_object -> dontprint_units = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_PRINT_UNITS );
1239+ snmp_object -> escape_quotes = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_ESCAPE_QUOTES );
1240+ snmp_object -> print_hex_text = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_PRINT_HEX_TEXT );
1241+ // Integers
1242+ snmp_object -> string_output_format = netsnmp_ds_get_int (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT );
1243+ snmp_object -> oid_output_format = netsnmp_ds_get_int (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_OID_OUTPUT_FORMAT );
1244+ }
1245+
1246+ /*
1247+ * Set the snmplib output options using the given php_snmp_object
1248+ */
1249+ static void set_snmplib_output_options (php_snmp_object * snmp_object )
1250+ {
1251+ // Booleans
1252+ netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_QUICK_PRINT , snmp_object -> quick_print );
1253+ netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM , snmp_object -> enum_print );
1254+ netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS , snmp_object -> numeric_index );
1255+ netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_NUMERIC_TIMETICKS , snmp_object -> numeric_timeticks );
1256+ netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_EXTENDED_INDEX , snmp_object -> extended_index );
1257+ netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_PRINT_UNITS , snmp_object -> dontprint_units );
1258+ netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_ESCAPE_QUOTES , snmp_object -> escape_quotes );
1259+ netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_PRINT_HEX_TEXT , snmp_object -> print_hex_text );
1260+ // Integers
1261+ netsnmp_ds_set_int (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT , snmp_object -> string_output_format );
1262+ netsnmp_ds_set_int (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_OID_OUTPUT_FORMAT , snmp_object -> oid_output_format );
1263+ }
1264+
12271265/* {{{ php_snmp
12281266*
12291267* Generic SNMP handler for all versions.
@@ -1393,20 +1431,10 @@ static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st, int version)
13931431 }
13941432 objid_query .oid_increasing_check = snmp_object -> oid_increasing_check ;
13951433 objid_query .valueretrieval = snmp_object -> valueretrieval ;
1396- glob_snmp_object .enum_print = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM );
1397- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM , snmp_object -> enum_print );
1398- glob_snmp_object .numeric_index = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS );
1399- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS , snmp_object -> numeric_index );
1400- glob_snmp_object .numeric_timeticks = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_NUMERIC_TIMETICKS );
1401- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_NUMERIC_TIMETICKS , snmp_object -> numeric_timeticks );
1402- glob_snmp_object .extended_index = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_EXTENDED_INDEX );
1403- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_EXTENDED_INDEX , snmp_object -> extended_index );
1404- glob_snmp_object .dontprint_units = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_PRINT_UNITS );
1405- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_PRINT_UNITS , snmp_object -> dontprint_units );
1406- glob_snmp_object .quick_print = netsnmp_ds_get_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_QUICK_PRINT );
1407- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_QUICK_PRINT , snmp_object -> quick_print );
1408- glob_snmp_object .oid_output_format = netsnmp_ds_get_int (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_OID_OUTPUT_FORMAT );
1409- netsnmp_ds_set_int (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_OID_OUTPUT_FORMAT , snmp_object -> oid_output_format );
1434+
1435+ // Save the global snmplib output options and set the options to those defined by the object instance
1436+ save_snmplib_output_options (& glob_snmp_object );
1437+ set_snmplib_output_options (snmp_object );
14101438 }
14111439
14121440 if (objid_query .max_repetitions < 0 ) {
@@ -1420,13 +1448,8 @@ static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st, int version)
14201448 if (session_less_mode ) {
14211449 snmp_session_free (& session );
14221450 } else {
1423- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM , glob_snmp_object .enum_print );
1424- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS , glob_snmp_object .numeric_index );
1425- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_NUMERIC_TIMETICKS , glob_snmp_object .numeric_timeticks );
1426- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_EXTENDED_INDEX , glob_snmp_object .extended_index );
1427- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_PRINT_UNITS , glob_snmp_object .dontprint_units );
1428- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_QUICK_PRINT , glob_snmp_object .quick_print );
1429- netsnmp_ds_set_int (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_OID_OUTPUT_FORMAT , glob_snmp_object .oid_output_format );
1451+ // Restore the snmplib output options back to the global state
1452+ set_snmplib_output_options (& glob_snmp_object );
14301453 }
14311454}
14321455/* }}} */
@@ -1505,59 +1528,72 @@ PHP_FUNCTION(snmp_set_enum_print)
15051528}
15061529/* }}} */
15071530
1508- /* {{{ Print table index numerically */
1509- PHP_FUNCTION (snmp_set_numeric_index )
1531+ /* {{{ Set walk option. */
1532+ PHP_FUNCTION (snmp_set_mib_option )
15101533{
1511- bool a1 ;
1534+ zend_long a1 , a2 ;
15121535
1513- if (zend_parse_parameters (ZEND_NUM_ARGS (), "b " , & a1 ) == FAILURE ) {
1536+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "lb " , & a1 , & a2 ) == FAILURE ) {
15141537 RETURN_THROWS ();
15151538 }
15161539
1517- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS , (int ) a1 );
1518- RETURN_TRUE ;
1519- }
1520- /* }}} */
1521-
1522- /* {{{ Print timetick values as integers */
1523- PHP_FUNCTION (snmp_set_numeric_timeticks )
1524- {
1525- bool a1 ;
1526-
1527- if (zend_parse_parameters (ZEND_NUM_ARGS (), "b" , & a1 ) == FAILURE ) {
1528- RETURN_THROWS ();
1540+ switch (a1 ) {
1541+ case NETSNMP_DS_LIB_MIB_PARSE_LABEL :
1542+ case NETSNMP_DS_LIB_MIB_COMMENT_TERM :
1543+ case NETSNMP_DS_LIB_MIB_REPLACE :
1544+ netsnmp_ds_set_int (NETSNMP_DS_LIBRARY_ID , a1 , (int ) a2 );
1545+ default :
1546+ zend_argument_value_error (1 , "must be an SNMP_MIB_* constant" );
1547+ RETURN_THROWS ();
15291548 }
1530-
1531- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_NUMERIC_TIMETICKS , (int ) a1 );
1532- RETURN_TRUE ;
15331549}
15341550/* }}} */
15351551
1536- /* {{{ Use extended table format when printing tables */
1537- PHP_FUNCTION (snmp_set_extended_index )
1552+ /* {{{ Set the string output format. */
1553+ PHP_FUNCTION (snmp_set_string_output_format )
15381554{
1539- bool a1 ;
1555+ zend_long a1 ;
15401556
1541- if (zend_parse_parameters (ZEND_NUM_ARGS (), "b " , & a1 ) == FAILURE ) {
1557+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "l " , & a1 ) == FAILURE ) {
15421558 RETURN_THROWS ();
15431559 }
15441560
1545- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_EXTENDED_INDEX , (int ) a1 );
1546- RETURN_TRUE ;
1561+ switch (a1 ) {
1562+ case NETSNMP_STRING_OUTPUT_GUESS :
1563+ case NETSNMP_STRING_OUTPUT_ASCII :
1564+ case NETSNMP_STRING_OUTPUT_HEX :
1565+ netsnmp_ds_set_int (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT , a1 );
1566+ default :
1567+ zend_argument_value_error (1 , "must be an SNMP_STRING_OUTPUT_* constant" );
1568+ RETURN_THROWS ();
1569+ }
15471570}
15481571/* }}} */
15491572
1550- /* {{{ Use extended table format */
1551- PHP_FUNCTION (snmp_set_dontprint_units )
1573+ /* {{{ Set output format option. */
1574+ PHP_FUNCTION (snmp_set_output_option )
15521575{
1553- bool a1 ;
1576+ zend_long a1 , a2 ;
15541577
1555- if (zend_parse_parameters (ZEND_NUM_ARGS (), "b " , & a1 ) == FAILURE ) {
1578+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "lb " , & a1 , & a2 ) == FAILURE ) {
15561579 RETURN_THROWS ();
15571580 }
15581581
1559- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_DONT_PRINT_UNITS , (int ) a1 );
1560- RETURN_TRUE ;
1582+ switch (a1 ) {
1583+ case NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS :
1584+ case NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM :
1585+ case NETSNMP_DS_LIB_ESCAPE_QUOTES :
1586+ case NETSNMP_DS_LIB_QUICK_PRINT :
1587+ case NETSNMP_DS_LIB_NUMERIC_TIMETICKS :
1588+ case NETSNMP_DS_LIB_PRINT_HEX_TEXT :
1589+ case NETSNMP_DS_LIB_DONT_PRINT_UNITS :
1590+ case NETSNMP_DS_LIB_PRINT_BARE_VALUE :
1591+ case NETSNMP_DS_LIB_EXTENDED_INDEX :
1592+ netsnmp_ds_set_int (NETSNMP_DS_LIBRARY_ID , a1 , (int ) a2 );
1593+ default :
1594+ zend_argument_value_error (1 , "must be an SNMP_OUTPUT_* constant" );
1595+ RETURN_THROWS ();
1596+ }
15611597}
15621598/* }}} */
15631599
@@ -1686,20 +1722,6 @@ PHP_FUNCTION(snmp_get_valueretrieval)
16861722}
16871723/* }}} */
16881724
1689- /* {{{ Allow underscores in MIBs. */
1690- PHP_FUNCTION (snmp_mib_allow_underscores )
1691- {
1692- bool a1 ;
1693-
1694- if (zend_parse_parameters (ZEND_NUM_ARGS (), "b" , & a1 ) == FAILURE ) {
1695- RETURN_THROWS ();
1696- }
1697-
1698- netsnmp_ds_set_boolean (NETSNMP_DS_LIBRARY_ID , NETSNMP_DS_LIB_MIB_PARSE_LABEL , (int ) a1 );
1699- RETURN_TRUE ;
1700- }
1701- /* }}} */
1702-
17031725/* {{{ Reads and parses a MIB file into the active MIB tree. */
17041726PHP_FUNCTION (snmp_read_mib )
17051727{
0 commit comments