From ee8f0e3c160fc6a4612d555615af15bba0d54175 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 19 Mar 2026 11:56:00 +0800 Subject: [PATCH 01/23] Add functions to control more SNMP library output options (#21502) --- ext/snmp/php_snmp.h | 7 + ext/snmp/snmp.c | 207 +++++++++++++++++++-- ext/snmp/snmp.stub.php | 90 ++++++++- ext/snmp/snmp_arginfo.h | 97 ++++++++-- ext/snmp/tests/snmp-object-properties.phpt | 88 +++++++-- 5 files changed, 444 insertions(+), 45 deletions(-) diff --git a/ext/snmp/php_snmp.h b/ext/snmp/php_snmp.h index d889eb37ab95..bc16a541bad6 100644 --- a/ext/snmp/php_snmp.h +++ b/ext/snmp/php_snmp.h @@ -48,6 +48,13 @@ typedef struct _php_snmp_object { int valueretrieval; int quick_print; int enum_print; + int numeric_index; + int numeric_timeticks; + int extended_index; + int dont_print_units; + int escape_quotes; + int print_hex_text; + int string_output_format; int oid_output_format; int snmp_errno; int oid_increasing_check; diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index e921adb98352..c66087f5483e 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -90,6 +90,10 @@ typedef struct snmp_session php_snmp_session; } static bool mib_needs_reset; +static php_snmp_object saved_snmp_settings; +static int saved_mib_allow_underscores; +static int saved_mib_comment_term; +static int saved_mib_replace; ZEND_DECLARE_MODULE_GLOBALS(snmp) static PHP_GINIT_FUNCTION(snmp); @@ -1246,6 +1250,42 @@ static ZEND_ATTRIBUTE_NONNULL_ARGS(2) bool snmp_session_set_security(struct snmp } /* }}} */ +/* {{{ Save the snmplib state into the given php_snmp_object */ +static void save_snmplib_output_options(php_snmp_object *snmp_object) +{ + // Booleans + snmp_object->quick_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT); + snmp_object->enum_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM); + snmp_object->numeric_index = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS); + snmp_object->numeric_timeticks = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS); + snmp_object->extended_index = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_EXTENDED_INDEX); + snmp_object->dont_print_units = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PRINT_UNITS); + snmp_object->escape_quotes = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_ESCAPE_QUOTES); + snmp_object->print_hex_text = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_HEX_TEXT); + // Integers + snmp_object->string_output_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT); + snmp_object->oid_output_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT); +} +/* }}} */ + +/* {{{ Set the snmplib output options using the given php_snmp_object */ +static void set_snmplib_output_options(php_snmp_object *snmp_object) +{ + // Booleans + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, snmp_object->quick_print); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, snmp_object->enum_print); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS, snmp_object->numeric_index); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS, snmp_object->numeric_timeticks); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_EXTENDED_INDEX, snmp_object->extended_index); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PRINT_UNITS, snmp_object->dont_print_units); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_ESCAPE_QUOTES, snmp_object->escape_quotes); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_HEX_TEXT, snmp_object->print_hex_text); + // Integers + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, snmp_object->string_output_format); + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, snmp_object->oid_output_format); +} +/* }}} */ + /* {{{ php_snmp * * Generic SNMP handler for all versions. @@ -1429,12 +1469,10 @@ static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st, int version) } objid_query.oid_increasing_check = snmp_object->oid_increasing_check; 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); - glob_snmp_object.quick_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT); - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, snmp_object->quick_print); - glob_snmp_object.oid_output_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT); - netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, snmp_object->oid_output_format); + + // Save the global snmplib output options and set the options to those defined by the object instance + save_snmplib_output_options(&glob_snmp_object); + set_snmplib_output_options(snmp_object); } if (objid_query.max_repetitions < 0) { @@ -1448,9 +1486,8 @@ static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st, int version) if (session_less_mode) { snmp_session_free(&session); } else { - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, glob_snmp_object.enum_print); - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, glob_snmp_object.quick_print); - netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, glob_snmp_object.oid_output_format); + // Restore the snmplib output options back to the global state + set_snmplib_output_options(&glob_snmp_object); } } /* }}} */ @@ -1527,6 +1564,78 @@ PHP_FUNCTION(snmp_set_enum_print) } /* }}} */ +/* {{{ Set walk option. */ +PHP_FUNCTION(snmp_set_mib_option) +{ + zend_long a1, a2; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &a1, &a2) == FAILURE) { + RETURN_THROWS(); + } + + switch (a1) { + case NETSNMP_DS_LIB_MIB_PARSE_LABEL: + case NETSNMP_DS_LIB_MIB_COMMENT_TERM: + case NETSNMP_DS_LIB_MIB_REPLACE: + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, a1, (int) a2); + break; + default: + zend_argument_value_error(1, "must be an SNMP_MIB_* constant"); + RETURN_THROWS(); + } +} +/* }}} */ + +/* {{{ Set the string output format. */ +PHP_FUNCTION(snmp_set_string_output_format) +{ + zend_long a1; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &a1) == FAILURE) { + RETURN_THROWS(); + } + + switch (a1) { + case NETSNMP_STRING_OUTPUT_GUESS: + case NETSNMP_STRING_OUTPUT_ASCII: + case NETSNMP_STRING_OUTPUT_HEX: + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, a1); + break; + default: + zend_argument_value_error(1, "must be an SNMP_STRING_OUTPUT_* constant"); + RETURN_THROWS(); + } +} +/* }}} */ + +/* {{{ Set output format option. */ +PHP_FUNCTION(snmp_set_output_option) +{ + zend_long a1, a2; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &a1, &a2) == FAILURE) { + RETURN_THROWS(); + } + + switch (a1) { + case NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS: + case NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM: + case NETSNMP_DS_LIB_ESCAPE_QUOTES: + case NETSNMP_DS_LIB_QUICK_PRINT: + case NETSNMP_DS_LIB_NUMERIC_TIMETICKS: + case NETSNMP_DS_LIB_PRINT_HEX_TEXT: + case NETSNMP_DS_LIB_DONT_PRINT_UNITS: + case NETSNMP_DS_LIB_PRINT_BARE_VALUE: + case NETSNMP_DS_LIB_EXTENDED_INDEX: + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, a1, (int) a2); + break; + default: + zend_argument_value_error(1, "must be an SNMP_OUTPUT_* constant"); + RETURN_THROWS(); + } +} +/* }}} */ + /* {{{ Set the OID output format. */ PHP_FUNCTION(snmp_set_oid_output_format) { @@ -1727,9 +1836,7 @@ PHP_METHOD(SNMP, __construct) } snmp_object->max_oids = 0; snmp_object->valueretrieval = SNMP_G(valueretrieval); - snmp_object->enum_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM); - snmp_object->oid_output_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT); - snmp_object->quick_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT); + save_snmplib_output_options(snmp_object); snmp_object->oid_increasing_check = true; snmp_object->exceptions_enabled = 0; } @@ -2040,6 +2147,12 @@ static int php_snmp_read_max_oids(php_snmp_object *snmp_object, zval *retval) PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(oid_increasing_check) PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(quick_print) PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(enum_print) +PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(numeric_index) +PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(numeric_timeticks) +PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(extended_index) +PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(dont_print_units) +PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(escape_quotes) +PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(print_hex_text) #define PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(name) \ static int php_snmp_read_##name(php_snmp_object *snmp_object, zval *retval) \ @@ -2049,6 +2162,7 @@ PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(enum_print) } PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(valueretrieval) +PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(string_output_format) PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(oid_output_format) PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(exceptions_enabled) @@ -2103,9 +2217,33 @@ static int php_snmp_write_##name(php_snmp_object *snmp_object, zval *newval) \ return SUCCESS; \ } +PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(oid_increasing_check) PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(quick_print) PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(enum_print) -PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(oid_increasing_check) +PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(numeric_index) +PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(numeric_timeticks) +PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(extended_index) +PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(dont_print_units) +PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(escape_quotes) +PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(print_hex_text) + +/* {{{ */ +static int php_snmp_write_string_output_format(php_snmp_object *snmp_object, zval *newval) +{ + zend_long lval = zval_get_long(newval); + + switch(lval) { + case NETSNMP_STRING_OUTPUT_GUESS: + case NETSNMP_STRING_OUTPUT_ASCII: + case NETSNMP_STRING_OUTPUT_HEX: + snmp_object->oid_output_format = lval; + return SUCCESS; + default: + zend_value_error("SNMP string output print format must be an SNMP_STRING_OUTPUT_* constant"); + return FAILURE; + } +} +/* }}} */ /* {{{ */ static int php_snmp_write_oid_output_format(php_snmp_object *snmp_object, zval *newval) @@ -2154,11 +2292,18 @@ static void free_php_snmp_properties(zval *el) /* {{{ */ const php_snmp_prop_handler php_snmp_property_entries[] = { PHP_SNMP_READONLY_PROPERTY_ENTRY_RECORD(info), PHP_SNMP_PROPERTY_ENTRY_RECORD(max_oids), - PHP_SNMP_PROPERTY_ENTRY_RECORD(valueretrieval), + PHP_SNMP_PROPERTY_ENTRY_RECORD(oid_increasing_check), PHP_SNMP_PROPERTY_ENTRY_RECORD(quick_print), PHP_SNMP_PROPERTY_ENTRY_RECORD(enum_print), + PHP_SNMP_PROPERTY_ENTRY_RECORD(numeric_index), + PHP_SNMP_PROPERTY_ENTRY_RECORD(numeric_timeticks), + PHP_SNMP_PROPERTY_ENTRY_RECORD(extended_index), + PHP_SNMP_PROPERTY_ENTRY_RECORD(dont_print_units), + PHP_SNMP_PROPERTY_ENTRY_RECORD(escape_quotes), + PHP_SNMP_PROPERTY_ENTRY_RECORD(print_hex_text), + PHP_SNMP_PROPERTY_ENTRY_RECORD(valueretrieval), + PHP_SNMP_PROPERTY_ENTRY_RECORD(string_output_format), PHP_SNMP_PROPERTY_ENTRY_RECORD(oid_output_format), - PHP_SNMP_PROPERTY_ENTRY_RECORD(oid_increasing_check), PHP_SNMP_PROPERTY_ENTRY_RECORD(exceptions_enabled), { NULL, 0, NULL, NULL} }; @@ -2225,6 +2370,7 @@ PHP_MSHUTDOWN_FUNCTION(snmp) } /* }}} */ +<<<<<<< HEAD /* {{{ PHP_RSHUTDOWN_FUNCTION */ static PHP_RSHUTDOWN_FUNCTION(snmp) { @@ -2233,6 +2379,33 @@ static PHP_RSHUTDOWN_FUNCTION(snmp) netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIBDIRS, NULL); init_mib(); } +======= +/* {{{ PHP_INIT_FUNCTION */ +static PHP_RINIT_FUNCTION(snmp) +{ + // Save the output options + save_snmplib_output_options(&saved_snmp_settings); + + // Save the MIB options + saved_mib_allow_underscores = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_PARSE_LABEL); + saved_mib_comment_term = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_COMMENT_TERM); + saved_mib_replace = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_REPLACE); + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_RSHUTDOWN_FUNCTION */ +static PHP_RSHUTDOWN_FUNCTION(snmp) +{ + // Restore the output options + set_snmplib_output_options(&saved_snmp_settings); + + // Restore MIB options + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_PARSE_LABEL, saved_mib_allow_underscores); + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_COMMENT_TERM, saved_mib_comment_term); + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_REPLACE, saved_mib_replace); +>>>>>>> 3af51eda7e1 (Add functions to control more SNMP library output options (#21502)) return SUCCESS; } @@ -2264,7 +2437,11 @@ zend_module_entry snmp_module_entry = { ext_functions, PHP_MINIT(snmp), PHP_MSHUTDOWN(snmp), +<<<<<<< HEAD NULL, +======= + PHP_RINIT(snmp), +>>>>>>> 3af51eda7e1 (Add functions to control more SNMP library output options (#21502)) PHP_RSHUTDOWN(snmp), PHP_MINFO(snmp), PHP_SNMP_VERSION, diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index 0f939b5b23fd..a826bc05ec34 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -2,6 +2,22 @@ /** @generate-class-entries */ +/** + * @var int + * @cvalue NETSNMP_DS_LIB_MIB_PARSE_LABEL + */ +const SNMP_MIB_ALLOW_UNDERSCORES = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_MIB_COMMENT_TERM + */ +const SNMP_MIB_COMMENT_TERM = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_MIB_REPLACE + */ +const SNMP_MIB_REPLACE = UNKNOWN; + /** * @var int * @cvalue NETSNMP_OID_OUTPUT_SUFFIX @@ -33,6 +49,63 @@ */ const SNMP_OID_OUTPUT_NONE = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS + */ +const SNMP_OUTPUT_NUMERIC_INDEX = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM + */ +const SNMP_OUTPUT_ENUM_PRINT = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_ESCAPE_QUOTES + */ +const SNMP_OUTPUT_ESCAPE_QUOTES = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_QUICK_PRINT + */ +const SNMP_OUTPUT_QUICK_PRINT = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_NUMERIC_TIMETICKS + */ +const SNMP_OUTPUT_NUMERIC_TIMETICKS = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_PRINT_HEX_TEXT + */ +const SNMP_OUTPUT_PRINT_HEX_TEXT = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_DONT_PRINT_UNITS + */ +const SNMP_OUTPUT_DONT_PRINT_UNITS = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_DS_LIB_EXTENDED_INDEX + */ +const SNMP_OUTPUT_EXTENDED_INDEX = UNKNOWN; + +/** + * @var int + * @cvalue NETSNMP_STRING_OUTPUT_GUESS + */ +const SNMP_STRING_OUTPUT_GUESS = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_STRING_OUTPUT_ASCII + */ +const SNMP_STRING_OUTPUT_ASCII = UNKNOWN; +/** + * @var int + * @cvalue NETSNMP_STRING_OUTPUT_HEX + */ +const SNMP_STRING_OUTPUT_HEX = UNKNOWN; + /** * @var int * @cvalue SNMP_VALUE_LIBRARY @@ -129,8 +202,14 @@ function snmp_set_quick_print(bool $enable): true {} function snmp_set_enum_print(bool $enable): true {} +function snmp_set_mib_option(int $option, bool $enable): void {} + function snmp_set_oid_output_format(int $format): true {} +function snmp_set_output_option(int $option, bool $enable): void {} + +function snmp_set_string_output_format(int $format): void {} + /** @alias snmp_set_oid_output_format */ function snmp_set_oid_numeric_print(int $format): true {} @@ -215,11 +294,18 @@ class SNMP /** @readonly */ public array $info; public ?int $max_oids; - public int $valueretrieval; + public bool $oid_increasing_check; public bool $quick_print; public bool $enum_print; + public bool $numeric_index; + public bool $numeric_timeticks; + public bool $extended_index; + public bool $dont_print_units; + public bool $escape_quotes; + public bool $print_hex_text; + public int $valueretrieval; + public int $string_output_format; public int $oid_output_format; - public bool $oid_increasing_check; public int $exceptions_enabled; public function __construct(int $version, string $hostname, string $community, int $timeout = -1, int $retries = -1) {} diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index 85b9a1131f1c..a075fdc7dcec 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 18e6ffa1acd3c1b6d1c962be97f36e9a46a317a2 */ + * Stub hash: fa515fbbf73123ccee764da8bd37ca7980d3e180 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) @@ -42,10 +42,21 @@ ZEND_END_ARG_INFO() #define arginfo_snmp_set_enum_print arginfo_snmp_set_quick_print +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_mib_option, 0, 2, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_oid_output_format, 0, 1, IS_TRUE, 0) ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) ZEND_END_ARG_INFO() +#define arginfo_snmp_set_output_option arginfo_snmp_set_mib_option + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_string_output_format, 0, 1, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) +ZEND_END_ARG_INFO() + #define arginfo_snmp_set_oid_numeric_print arginfo_snmp_set_oid_output_format #define arginfo_snmp2_get arginfo_snmpget @@ -175,7 +186,10 @@ ZEND_FUNCTION(snmpset); ZEND_FUNCTION(snmp_get_quick_print); ZEND_FUNCTION(snmp_set_quick_print); ZEND_FUNCTION(snmp_set_enum_print); +ZEND_FUNCTION(snmp_set_mib_option); ZEND_FUNCTION(snmp_set_oid_output_format); +ZEND_FUNCTION(snmp_set_output_option); +ZEND_FUNCTION(snmp_set_string_output_format); ZEND_FUNCTION(snmp2_get); ZEND_FUNCTION(snmp2_getnext); ZEND_FUNCTION(snmp2_walk); @@ -210,7 +224,10 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(snmp_get_quick_print, arginfo_snmp_get_quick_print) ZEND_FE(snmp_set_quick_print, arginfo_snmp_set_quick_print) ZEND_FE(snmp_set_enum_print, arginfo_snmp_set_enum_print) + ZEND_FE(snmp_set_mib_option, arginfo_snmp_set_mib_option) ZEND_FE(snmp_set_oid_output_format, arginfo_snmp_set_oid_output_format) + ZEND_FE(snmp_set_output_option, arginfo_snmp_set_output_option) + ZEND_FE(snmp_set_string_output_format, arginfo_snmp_set_string_output_format) ZEND_RAW_FENTRY("snmp_set_oid_numeric_print", zif_snmp_set_oid_output_format, arginfo_snmp_set_oid_numeric_print, 0, NULL, NULL) ZEND_FE(snmp2_get, arginfo_snmp2_get) ZEND_FE(snmp2_getnext, arginfo_snmp2_getnext) @@ -244,12 +261,26 @@ static const zend_function_entry class_SNMP_methods[] = { static void register_snmp_symbols(int module_number) { + REGISTER_LONG_CONSTANT("SNMP_MIB_ALLOW_UNDERSCORES", NETSNMP_DS_LIB_MIB_PARSE_LABEL, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_MIB_COMMENT_TERM", NETSNMP_DS_LIB_MIB_COMMENT_TERM, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_MIB_REPLACE", NETSNMP_DS_LIB_MIB_REPLACE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_SUFFIX", NETSNMP_OID_OUTPUT_SUFFIX, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_MODULE", NETSNMP_OID_OUTPUT_MODULE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_FULL", NETSNMP_OID_OUTPUT_FULL, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC", NETSNMP_OID_OUTPUT_NUMERIC, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_UCD", NETSNMP_OID_OUTPUT_UCD, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NONE", NETSNMP_OID_OUTPUT_NONE, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OUTPUT_NUMERIC_INDEX", NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OUTPUT_ENUM_PRINT", NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OUTPUT_ESCAPE_QUOTES", NETSNMP_DS_LIB_ESCAPE_QUOTES, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OUTPUT_QUICK_PRINT", NETSNMP_DS_LIB_QUICK_PRINT, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OUTPUT_NUMERIC_TIMETICKS", NETSNMP_DS_LIB_NUMERIC_TIMETICKS, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OUTPUT_PRINT_HEX_TEXT", NETSNMP_DS_LIB_PRINT_HEX_TEXT, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OUTPUT_DONT_PRINT_UNITS", NETSNMP_DS_LIB_DONT_PRINT_UNITS, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OUTPUT_EXTENDED_INDEX", NETSNMP_DS_LIB_EXTENDED_INDEX, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_STRING_OUTPUT_GUESS", NETSNMP_STRING_OUTPUT_GUESS, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_STRING_OUTPUT_ASCII", NETSNMP_STRING_OUTPUT_ASCII, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_STRING_OUTPUT_HEX", NETSNMP_STRING_OUTPUT_HEX, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY", SNMP_VALUE_LIBRARY, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN", SNMP_VALUE_PLAIN, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT", SNMP_VALUE_OBJECT, CONST_PERSISTENT); @@ -358,11 +389,11 @@ static zend_class_entry *register_class_SNMP(void) zend_declare_typed_property(class_entry, property_max_oids_name, &property_max_oids_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG|MAY_BE_NULL)); zend_string_release_ex(property_max_oids_name, true); - zval property_valueretrieval_default_value; - ZVAL_UNDEF(&property_valueretrieval_default_value); - zend_string *property_valueretrieval_name = zend_string_init("valueretrieval", sizeof("valueretrieval") - 1, true); - zend_declare_typed_property(class_entry, property_valueretrieval_name, &property_valueretrieval_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release_ex(property_valueretrieval_name, true); + zval property_oid_increasing_check_default_value; + ZVAL_UNDEF(&property_oid_increasing_check_default_value); + zend_string *property_oid_increasing_check_name = zend_string_init("oid_increasing_check", sizeof("oid_increasing_check") - 1, true); + zend_declare_typed_property(class_entry, property_oid_increasing_check_name, &property_oid_increasing_check_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); + zend_string_release_ex(property_oid_increasing_check_name, true); zval property_quick_print_default_value; ZVAL_UNDEF(&property_quick_print_default_value); @@ -376,18 +407,60 @@ static zend_class_entry *register_class_SNMP(void) zend_declare_typed_property(class_entry, property_enum_print_name, &property_enum_print_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release_ex(property_enum_print_name, true); + zval property_numeric_index_default_value; + ZVAL_UNDEF(&property_numeric_index_default_value); + zend_string *property_numeric_index_name = zend_string_init("numeric_index", sizeof("numeric_index") - 1, true); + zend_declare_typed_property(class_entry, property_numeric_index_name, &property_numeric_index_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); + zend_string_release_ex(property_numeric_index_name, true); + + zval property_numeric_timeticks_default_value; + ZVAL_UNDEF(&property_numeric_timeticks_default_value); + zend_string *property_numeric_timeticks_name = zend_string_init("numeric_timeticks", sizeof("numeric_timeticks") - 1, true); + zend_declare_typed_property(class_entry, property_numeric_timeticks_name, &property_numeric_timeticks_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); + zend_string_release_ex(property_numeric_timeticks_name, true); + + zval property_extended_index_default_value; + ZVAL_UNDEF(&property_extended_index_default_value); + zend_string *property_extended_index_name = zend_string_init("extended_index", sizeof("extended_index") - 1, true); + zend_declare_typed_property(class_entry, property_extended_index_name, &property_extended_index_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); + zend_string_release_ex(property_extended_index_name, true); + + zval property_dont_print_units_default_value; + ZVAL_UNDEF(&property_dont_print_units_default_value); + zend_string *property_dont_print_units_name = zend_string_init("dont_print_units", sizeof("dont_print_units") - 1, true); + zend_declare_typed_property(class_entry, property_dont_print_units_name, &property_dont_print_units_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); + zend_string_release_ex(property_dont_print_units_name, true); + + zval property_escape_quotes_default_value; + ZVAL_UNDEF(&property_escape_quotes_default_value); + zend_string *property_escape_quotes_name = zend_string_init("escape_quotes", sizeof("escape_quotes") - 1, true); + zend_declare_typed_property(class_entry, property_escape_quotes_name, &property_escape_quotes_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); + zend_string_release_ex(property_escape_quotes_name, true); + + zval property_print_hex_text_default_value; + ZVAL_UNDEF(&property_print_hex_text_default_value); + zend_string *property_print_hex_text_name = zend_string_init("print_hex_text", sizeof("print_hex_text") - 1, true); + zend_declare_typed_property(class_entry, property_print_hex_text_name, &property_print_hex_text_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); + zend_string_release_ex(property_print_hex_text_name, true); + + zval property_valueretrieval_default_value; + ZVAL_UNDEF(&property_valueretrieval_default_value); + zend_string *property_valueretrieval_name = zend_string_init("valueretrieval", sizeof("valueretrieval") - 1, true); + zend_declare_typed_property(class_entry, property_valueretrieval_name, &property_valueretrieval_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); + zend_string_release_ex(property_valueretrieval_name, true); + + zval property_string_output_format_default_value; + ZVAL_UNDEF(&property_string_output_format_default_value); + zend_string *property_string_output_format_name = zend_string_init("string_output_format", sizeof("string_output_format") - 1, true); + zend_declare_typed_property(class_entry, property_string_output_format_name, &property_string_output_format_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); + zend_string_release_ex(property_string_output_format_name, true); + zval property_oid_output_format_default_value; ZVAL_UNDEF(&property_oid_output_format_default_value); zend_string *property_oid_output_format_name = zend_string_init("oid_output_format", sizeof("oid_output_format") - 1, true); zend_declare_typed_property(class_entry, property_oid_output_format_name, &property_oid_output_format_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release_ex(property_oid_output_format_name, true); - zval property_oid_increasing_check_default_value; - ZVAL_UNDEF(&property_oid_increasing_check_default_value); - zend_string *property_oid_increasing_check_name = zend_string_init("oid_increasing_check", sizeof("oid_increasing_check") - 1, true); - zend_declare_typed_property(class_entry, property_oid_increasing_check_name, &property_oid_increasing_check_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); - zend_string_release_ex(property_oid_increasing_check_name, true); - zval property_exceptions_enabled_default_value; ZVAL_UNDEF(&property_exceptions_enabled_default_value); zend_string *property_exceptions_enabled_name = zend_string_init("exceptions_enabled", sizeof("exceptions_enabled") - 1, true); diff --git a/ext/snmp/tests/snmp-object-properties.phpt b/ext/snmp/tests/snmp-object-properties.phpt index a8fccd406b7e..4f8519c4f4ad 100644 --- a/ext/snmp/tests/snmp-object-properties.phpt +++ b/ext/snmp/tests/snmp-object-properties.phpt @@ -92,16 +92,30 @@ object(SNMP)#%d (%d) { } ["max_oids"]=> NULL - ["valueretrieval"]=> - int(1) + ["oid_increasing_check"]=> + bool(true) ["quick_print"]=> bool(false) ["enum_print"]=> bool(false) + ["numeric_index"]=> + bool(false) + ["numeric_timeticks"]=> + bool(false) + ["extended_index"]=> + bool(false) + ["dont_print_units"]=> + bool(false) + ["escape_quotes"]=> + bool(false) + ["print_hex_text"]=> + bool(false) + ["valueretrieval"]=> + int(1) + ["string_output_format"]=> + int(0) ["oid_output_format"]=> int(3) - ["oid_increasing_check"]=> - bool(true) ["exceptions_enabled"]=> int(0) } @@ -117,16 +131,30 @@ object(SNMP)#%d (%d) { } ["max_oids"]=> int(40) - ["valueretrieval"]=> - int(0) + ["oid_increasing_check"]=> + bool(false) ["quick_print"]=> bool(true) ["enum_print"]=> bool(true) + ["numeric_index"]=> + bool(false) + ["numeric_timeticks"]=> + bool(false) + ["extended_index"]=> + bool(false) + ["dont_print_units"]=> + bool(false) + ["escape_quotes"]=> + bool(false) + ["print_hex_text"]=> + bool(false) + ["valueretrieval"]=> + int(0) + ["string_output_format"]=> + int(0) ["oid_output_format"]=> int(4) - ["oid_increasing_check"]=> - bool(false) ["exceptions_enabled"]=> int(0) } @@ -142,16 +170,30 @@ object(SNMP)#%d (%d) { } ["max_oids"]=> int(40) - ["valueretrieval"]=> - int(1) + ["oid_increasing_check"]=> + bool(true) ["quick_print"]=> bool(true) ["enum_print"]=> bool(true) + ["numeric_index"]=> + bool(false) + ["numeric_timeticks"]=> + bool(false) + ["extended_index"]=> + bool(false) + ["dont_print_units"]=> + bool(false) + ["escape_quotes"]=> + bool(false) + ["print_hex_text"]=> + bool(false) + ["valueretrieval"]=> + int(1) + ["string_output_format"]=> + int(0) ["oid_output_format"]=> int(3) - ["oid_increasing_check"]=> - bool(true) ["exceptions_enabled"]=> int(0) } @@ -172,16 +214,30 @@ object(SNMP)#%d (%d) { } ["max_oids"]=> int(40) - ["valueretrieval"]=> - int(1) + ["oid_increasing_check"]=> + bool(true) ["quick_print"]=> bool(true) ["enum_print"]=> bool(true) + ["numeric_index"]=> + bool(false) + ["numeric_timeticks"]=> + bool(false) + ["extended_index"]=> + bool(false) + ["dont_print_units"]=> + bool(false) + ["escape_quotes"]=> + bool(false) + ["print_hex_text"]=> + bool(false) + ["valueretrieval"]=> + int(1) + ["string_output_format"]=> + int(0) ["oid_output_format"]=> int(3) - ["oid_increasing_check"]=> - bool(true) ["exceptions_enabled"]=> int(0) ["123"]=> From c180db12d5c663438fb94de47fd5e86e3ba6218e Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 11 Jul 2026 13:00:38 +0800 Subject: [PATCH 02/23] Convert all boolean options to use bool type and rename variables --- ext/snmp/php_snmp.h | 18 ++++++++-------- ext/snmp/snmp.c | 52 +++++++++++++++++++++++---------------------- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/ext/snmp/php_snmp.h b/ext/snmp/php_snmp.h index bc16a541bad6..db5df30d0038 100644 --- a/ext/snmp/php_snmp.h +++ b/ext/snmp/php_snmp.h @@ -46,18 +46,18 @@ typedef struct _php_snmp_object { struct snmp_session *session; int max_oids; int valueretrieval; - int quick_print; - int enum_print; - int numeric_index; - int numeric_timeticks; - int extended_index; - int dont_print_units; - int escape_quotes; - int print_hex_text; + bool quick_print; + bool enum_print; + bool numeric_index; + bool numeric_timeticks; + bool extended_index; + bool dont_print_units; + bool escape_quotes; + bool print_hex_text; int string_output_format; int oid_output_format; int snmp_errno; - int oid_increasing_check; + bool oid_increasing_check; int exceptions_enabled; char snmp_errstr[256]; zend_object zo; diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index c66087f5483e..bb1750ae7531 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1539,13 +1539,13 @@ PHP_FUNCTION(snmp_get_quick_print) /* {{{ Return all objects including their respective object id within the specified one */ PHP_FUNCTION(snmp_set_quick_print) { - bool a1; + bool quick_print; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &quick_print) == FAILURE) { RETURN_THROWS(); } - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, (int)a1); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, (int)quick_print); RETURN_TRUE; } /* }}} */ @@ -1553,13 +1553,13 @@ PHP_FUNCTION(snmp_set_quick_print) /* {{{ Return all values that are enums with their enum value instead of the raw integer */ PHP_FUNCTION(snmp_set_enum_print) { - bool a1; + bool enum_print; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &enum_print) == FAILURE) { RETURN_THROWS(); } - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, (int) a1); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, (int)enum_print); RETURN_TRUE; } /* }}} */ @@ -1567,17 +1567,18 @@ PHP_FUNCTION(snmp_set_enum_print) /* {{{ Set walk option. */ PHP_FUNCTION(snmp_set_mib_option) { - zend_long a1, a2; + zend_long opt; + bool val; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &a1, &a2) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &opt, &val) == FAILURE) { RETURN_THROWS(); } - switch (a1) { + switch (opt) { case NETSNMP_DS_LIB_MIB_PARSE_LABEL: case NETSNMP_DS_LIB_MIB_COMMENT_TERM: case NETSNMP_DS_LIB_MIB_REPLACE: - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, a1, (int) a2); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, opt, (int) val); break; default: zend_argument_value_error(1, "must be an SNMP_MIB_* constant"); @@ -1589,17 +1590,17 @@ PHP_FUNCTION(snmp_set_mib_option) /* {{{ Set the string output format. */ PHP_FUNCTION(snmp_set_string_output_format) { - zend_long a1; + zend_long format; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &a1) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &format) == FAILURE) { RETURN_THROWS(); } - switch (a1) { + switch (format) { case NETSNMP_STRING_OUTPUT_GUESS: case NETSNMP_STRING_OUTPUT_ASCII: case NETSNMP_STRING_OUTPUT_HEX: - netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, a1); + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, format); break; default: zend_argument_value_error(1, "must be an SNMP_STRING_OUTPUT_* constant"); @@ -1611,13 +1612,14 @@ PHP_FUNCTION(snmp_set_string_output_format) /* {{{ Set output format option. */ PHP_FUNCTION(snmp_set_output_option) { - zend_long a1, a2; + zend_long opt, + bool val; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &a1, &a2) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &opt, &val) == FAILURE) { RETURN_THROWS(); } - switch (a1) { + switch (opt) { case NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS: case NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM: case NETSNMP_DS_LIB_ESCAPE_QUOTES: @@ -1627,7 +1629,7 @@ PHP_FUNCTION(snmp_set_output_option) case NETSNMP_DS_LIB_DONT_PRINT_UNITS: case NETSNMP_DS_LIB_PRINT_BARE_VALUE: case NETSNMP_DS_LIB_EXTENDED_INDEX: - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, a1, (int) a2); + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, opt, (int) val); break; default: zend_argument_value_error(1, "must be an SNMP_OUTPUT_* constant"); @@ -1639,20 +1641,20 @@ PHP_FUNCTION(snmp_set_output_option) /* {{{ Set the OID output format. */ PHP_FUNCTION(snmp_set_oid_output_format) { - zend_long a1; + zend_long format; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &a1) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &format) == FAILURE) { RETURN_THROWS(); } - switch (a1) { + switch (format) { case NETSNMP_OID_OUTPUT_SUFFIX: case NETSNMP_OID_OUTPUT_MODULE: case NETSNMP_OID_OUTPUT_FULL: case NETSNMP_OID_OUTPUT_NUMERIC: case NETSNMP_OID_OUTPUT_UCD: case NETSNMP_OID_OUTPUT_NONE: - netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, a1); + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, format); RETURN_TRUE; default: zend_argument_value_error(1, "must be an SNMP_OID_OUTPUT_* constant"); @@ -1805,14 +1807,14 @@ PHP_METHOD(SNMP, __construct) { php_snmp_object *snmp_object; zval *object = ZEND_THIS; - zend_string *a1, *a2; + zend_string *hostname, *community; zend_long timeout = SNMP_DEFAULT_TIMEOUT; zend_long retries = SNMP_DEFAULT_RETRIES; zend_long version = SNMP_DEFAULT_VERSION; snmp_object = Z_SNMP_P(object); - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lPP|ll", &version, &a1, &a2, &timeout, &retries) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "lPP|ll", &version, &hostname, &community, &timeout, &retries) == FAILURE) { RETURN_THROWS(); } @@ -1831,7 +1833,7 @@ PHP_METHOD(SNMP, __construct) snmp_session_free(&(snmp_object->session)); } - if (!snmp_session_init(&(snmp_object->session), version, a1, a2, timeout, retries, 2, 4)) { + if (!snmp_session_init(&(snmp_object->session), version, hostname, community, timeout, retries, 2, 4)) { return; } snmp_object->max_oids = 0; From 4d03e46ad3c565add095e07fb9fd7d451e52ac46 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 11 Jul 2026 13:07:21 +0800 Subject: [PATCH 03/23] Change all function definitions that return SUCCESS/FAILURE to have a return type of zend_result --- ext/snmp/snmp.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index bb1750ae7531..ea16d09a98d9 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -2104,7 +2104,7 @@ static zval *php_snmp_get_property_ptr_ptr(zend_object *object, zend_string *nam } /* {{{ */ -static int php_snmp_read_info(php_snmp_object *snmp_object, zval *retval) +static zend_result php_snmp_read_info(php_snmp_object *snmp_object, zval *retval) { zval val; @@ -2128,7 +2128,7 @@ static int php_snmp_read_info(php_snmp_object *snmp_object, zval *retval) /* }}} */ /* {{{ */ -static int php_snmp_read_max_oids(php_snmp_object *snmp_object, zval *retval) +static zend_result php_snmp_read_max_oids(php_snmp_object *snmp_object, zval *retval) { if (snmp_object->max_oids > 0) { ZVAL_LONG(retval, snmp_object->max_oids); @@ -2140,7 +2140,7 @@ static int php_snmp_read_max_oids(php_snmp_object *snmp_object, zval *retval) /* }}} */ #define PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(name) \ - static int php_snmp_read_##name(php_snmp_object *snmp_object, zval *retval) \ + static zend_result php_snmp_read_##name(php_snmp_object *snmp_object, zval *retval) \ { \ ZVAL_BOOL(retval, snmp_object->name); \ return SUCCESS; \ @@ -2157,7 +2157,7 @@ PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(escape_quotes) PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(print_hex_text) #define PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(name) \ - static int php_snmp_read_##name(php_snmp_object *snmp_object, zval *retval) \ + static zend_result php_snmp_read_##name(php_snmp_object *snmp_object, zval *retval) \ { \ ZVAL_LONG(retval, snmp_object->name); \ return SUCCESS; \ @@ -2169,7 +2169,7 @@ PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(oid_output_format) PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(exceptions_enabled) /* {{{ */ -static int php_snmp_write_max_oids(php_snmp_object *snmp_object, zval *newval) +static zend_result php_snmp_write_max_oids(php_snmp_object *snmp_object, zval *newval) { zend_long lval; @@ -2191,7 +2191,7 @@ static int php_snmp_write_max_oids(php_snmp_object *snmp_object, zval *newval) /* }}} */ /* {{{ */ -static int php_snmp_write_valueretrieval(php_snmp_object *snmp_object, zval *newval) +static zend_result php_snmp_write_valueretrieval(php_snmp_object *snmp_object, zval *newval) { zend_long lval = zval_get_long(newval); @@ -2207,7 +2207,7 @@ static int php_snmp_write_valueretrieval(php_snmp_object *snmp_object, zval *new /* }}} */ #define PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(name) \ -static int php_snmp_write_##name(php_snmp_object *snmp_object, zval *newval) \ +static zend_result php_snmp_write_##name(php_snmp_object *snmp_object, zval *newval) \ { \ zval ztmp; \ ZVAL_COPY(&ztmp, newval); \ @@ -2230,7 +2230,7 @@ PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(escape_quotes) PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(print_hex_text) /* {{{ */ -static int php_snmp_write_string_output_format(php_snmp_object *snmp_object, zval *newval) +static zend_result php_snmp_write_string_output_format(php_snmp_object *snmp_object, zval *newval) { zend_long lval = zval_get_long(newval); @@ -2248,7 +2248,7 @@ static int php_snmp_write_string_output_format(php_snmp_object *snmp_object, zva /* }}} */ /* {{{ */ -static int php_snmp_write_oid_output_format(php_snmp_object *snmp_object, zval *newval) +static zend_result php_snmp_write_oid_output_format(php_snmp_object *snmp_object, zval *newval) { zend_long lval = zval_get_long(newval); From d67d2ef79aa384cf0a7a7c6d85909806772a1d92 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 11 Jul 2026 13:18:09 +0800 Subject: [PATCH 04/23] Fix syntax error --- ext/snmp/snmp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index ea16d09a98d9..01e76cc84f2d 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1568,7 +1568,7 @@ PHP_FUNCTION(snmp_set_enum_print) PHP_FUNCTION(snmp_set_mib_option) { zend_long opt; - bool val; + bool val; if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &opt, &val) == FAILURE) { RETURN_THROWS(); @@ -1612,7 +1612,7 @@ PHP_FUNCTION(snmp_set_string_output_format) /* {{{ Set output format option. */ PHP_FUNCTION(snmp_set_output_option) { - zend_long opt, + zend_long opt; bool val; if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &opt, &val) == FAILURE) { From ba6a238e352d237f5c73654a37405004fb96170e Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 11 Jul 2026 15:52:29 +0800 Subject: [PATCH 05/23] Update php_snmp_write_t and php_snmp_read_t to be defined as zend_result --- ext/snmp/php_snmp.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/snmp/php_snmp.h b/ext/snmp/php_snmp.h index db5df30d0038..52100b09b77a 100644 --- a/ext/snmp/php_snmp.h +++ b/ext/snmp/php_snmp.h @@ -67,8 +67,8 @@ typedef struct _php_snmp_object { #define Z_SNMP_P(zv) php_snmp_fetch_object(Z_OBJ_P((zv))) -typedef int (*php_snmp_read_t)(php_snmp_object *snmp_object, zval *retval); -typedef int (*php_snmp_write_t)(php_snmp_object *snmp_object, zval *newval); +typedef zend_result (*php_snmp_read_t)(php_snmp_object *snmp_object, zval *retval); +typedef zend_result (*php_snmp_write_t)(php_snmp_object *snmp_object, zval *newval); typedef struct _ptp_snmp_prop_handler { const char *name; From abfb10446633184a990a127bd13c31bbb8e8e5e1 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 11 Jul 2026 16:18:04 +0800 Subject: [PATCH 06/23] Found anohter zend_result --- ext/snmp/snmp.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 01e76cc84f2d..677006483970 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -2269,13 +2269,11 @@ static zend_result php_snmp_write_oid_output_format(php_snmp_object *snmp_object /* }}} */ /* {{{ */ -static int php_snmp_write_exceptions_enabled(php_snmp_object *snmp_object, zval *newval) +static zend_result php_snmp_write_exceptions_enabled(php_snmp_object *snmp_object, zval *newval) { - int ret = SUCCESS; - snmp_object->exceptions_enabled = zval_get_long(newval); - return ret; + return SUCCESS; } /* }}} */ From c67fbe71b8cfcc20f3c71da143e9790aeb5fa2e1 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 20 Aug 2026 11:22:48 +0800 Subject: [PATCH 07/23] Update stub hash --- ext/snmp/snmp_arginfo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index a075fdc7dcec..9f9a30f08623 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: fa515fbbf73123ccee764da8bd37ca7980d3e180 */ + * Stub hash: 6775d3efa51471056f1e50ec2bbf026aa3631942 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) From 3e244f6bba23dfa8990c5a33132ebd7457c41eaf Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 20 Aug 2026 13:14:35 +0800 Subject: [PATCH 08/23] Convert functions to accept enums instead of constants --- ext/snmp/snmp.c | 178 +++++++++++------ ext/snmp/snmp.stub.php | 429 +++++++++++++++++++--------------------- ext/snmp/snmp_arginfo.h | 103 +++++++--- ext/snmp/snmp_decl.h | 39 ++++ 4 files changed, 441 insertions(+), 308 deletions(-) create mode 100644 ext/snmp/snmp_decl.h diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 677006483970..3943b48d32e5 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -64,7 +64,12 @@ #include #include +#include "snmp_decl.h" #include "snmp_arginfo.h" +static zend_class_entry *SnmpMib_ce; +static zend_class_entry *SnmpOidOutput_ce; +static zend_class_entry *SnmpOutput_ce; +static zend_class_entry *SnmpStringOutput_ce; /* For net-snmp prior to 5.4 */ #ifndef HAVE_SHUTDOWN_SNMP_LOGGING @@ -1567,99 +1572,142 @@ PHP_FUNCTION(snmp_set_enum_print) /* {{{ Set walk option. */ PHP_FUNCTION(snmp_set_mib_option) { - zend_long opt; + zend_enum_Snmp_Mib opt; + int snmp_opt; bool val; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &opt, &val) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_ENUM(opt, SnmpMib_ce) + Z_PARAM_BOOL(val) + ZEND_PARSE_PARAMETERS_END(); switch (opt) { - case NETSNMP_DS_LIB_MIB_PARSE_LABEL: - case NETSNMP_DS_LIB_MIB_COMMENT_TERM: - case NETSNMP_DS_LIB_MIB_REPLACE: - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, opt, (int) val); + case ZEND_ENUM_Snmp_Mib_AllowUnderscores: + snmp_opt = NETSNMP_DS_LIB_MIB_PARSE_LABEL; + break; + case ZEND_ENUM_Snmp_Mib_CommentTerm: + snmp_opt = NETSNMP_DS_LIB_MIB_COMMENT_TERM; + break; + case ZEND_ENUM_Snmp_Mib_Replace: + snmp_opt = NETSNMP_DS_LIB_MIB_REPLACE; break; default: zend_argument_value_error(1, "must be an SNMP_MIB_* constant"); RETURN_THROWS(); } + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, snmp_opt, (int) val); } /* }}} */ /* {{{ Set the string output format. */ PHP_FUNCTION(snmp_set_string_output_format) { - zend_long format; + zend_enum_Snmp_StringOutput format; + int snmp_format; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &format) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_ENUM(format, SnmpStringOutput_ce) + ZEND_PARSE_PARAMETERS_END(); switch (format) { - case NETSNMP_STRING_OUTPUT_GUESS: - case NETSNMP_STRING_OUTPUT_ASCII: - case NETSNMP_STRING_OUTPUT_HEX: - netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, format); + case ZEND_ENUM_Snmp_StringOutput_Guess: + snmp_format = NETSNMP_STRING_OUTPUT_GUESS; + break; + case ZEND_ENUM_Snmp_StringOutput_Ascii: + snmp_format = NETSNMP_STRING_OUTPUT_ASCII; + break; + case ZEND_ENUM_Snmp_StringOutput_Hex: + snmp_format = NETSNMP_STRING_OUTPUT_HEX; break; default: zend_argument_value_error(1, "must be an SNMP_STRING_OUTPUT_* constant"); RETURN_THROWS(); } + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, snmp_format); } /* }}} */ /* {{{ Set output format option. */ PHP_FUNCTION(snmp_set_output_option) { - zend_long opt; + zend_enum_Snmp_Output opt; + int snmp_opt; bool val; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &opt, &val) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_ENUM(opt, SnmpOutput_ce) + Z_PARAM_BOOL(val) + ZEND_PARSE_PARAMETERS_END(); switch (opt) { - case NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS: - case NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM: - case NETSNMP_DS_LIB_ESCAPE_QUOTES: - case NETSNMP_DS_LIB_QUICK_PRINT: - case NETSNMP_DS_LIB_NUMERIC_TIMETICKS: - case NETSNMP_DS_LIB_PRINT_HEX_TEXT: - case NETSNMP_DS_LIB_DONT_PRINT_UNITS: - case NETSNMP_DS_LIB_PRINT_BARE_VALUE: - case NETSNMP_DS_LIB_EXTENDED_INDEX: - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, opt, (int) val); + case ZEND_ENUM_Snmp_Output_NumericIndex: + snmp_opt = NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS; + break; + case ZEND_ENUM_Snmp_Output_EnumPrint: + snmp_opt = NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM; + break; + case ZEND_ENUM_Snmp_Output_EscapeQuotes: + snmp_opt = NETSNMP_DS_LIB_ESCAPE_QUOTES; + break; + case ZEND_ENUM_Snmp_Output_QuickPrint: + snmp_opt = NETSNMP_DS_LIB_QUICK_PRINT; + break; + case ZEND_ENUM_Snmp_Output_NumericTimeticks: + snmp_opt = NETSNMP_DS_LIB_NUMERIC_TIMETICKS; + break; + case ZEND_ENUM_Snmp_Output_HexText: + snmp_opt = NETSNMP_DS_LIB_PRINT_HEX_TEXT; + break; + case ZEND_ENUM_Snmp_Output_DontPrintUnits: + snmp_opt = NETSNMP_DS_LIB_DONT_PRINT_UNITS; + break; + case ZEND_ENUM_Snmp_Output_ExtendedIndex: + snmp_opt = NETSNMP_DS_LIB_EXTENDED_INDEX; break; default: - zend_argument_value_error(1, "must be an SNMP_OUTPUT_* constant"); + zend_argument_value_error(1, "must be a Snmp\Output:: constant"); RETURN_THROWS(); } + netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, snmp_opt, (int) val); } /* }}} */ /* {{{ Set the OID output format. */ PHP_FUNCTION(snmp_set_oid_output_format) { - zend_long format; + zend_enum_Snmp_OidOutput format; + int snmp_format; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &format) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_ENUM(format, SnmpOidOutput_ce) + ZEND_PARSE_PARAMETERS_END(); switch (format) { - case NETSNMP_OID_OUTPUT_SUFFIX: - case NETSNMP_OID_OUTPUT_MODULE: - case NETSNMP_OID_OUTPUT_FULL: - case NETSNMP_OID_OUTPUT_NUMERIC: - case NETSNMP_OID_OUTPUT_UCD: - case NETSNMP_OID_OUTPUT_NONE: - netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, format); - RETURN_TRUE; + case ZEND_ENUM_Snmp_OidOutput_Suffix: + snmp_format = NETSNMP_OID_OUTPUT_SUFFIX; + break; + case ZEND_ENUM_Snmp_OidOutput_Module: + snmp_format = NETSNMP_OID_OUTPUT_MODULE; + break; + case ZEND_ENUM_Snmp_OidOutput_Full: + snmp_format = NETSNMP_OID_OUTPUT_FULL; + break; + case ZEND_ENUM_Snmp_OidOutput_Numeric: + snmp_format = NETSNMP_OID_OUTPUT_NUMERIC; + break; + case ZEND_ENUM_Snmp_OidOutput_Ucd: + snmp_format = NETSNMP_OID_OUTPUT_UCD; + break; + case ZEND_ENUM_Snmp_OidOutput_None: + snmp_format = NETSNMP_OID_OUTPUT_NONE; + break; default: zend_argument_value_error(1, "must be an SNMP_OID_OUTPUT_* constant"); RETURN_THROWS(); } + + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, snmp_format); + RETURN_TRUE; } /* }}} */ @@ -2235,13 +2283,17 @@ static zend_result php_snmp_write_string_output_format(php_snmp_object *snmp_obj zend_long lval = zval_get_long(newval); switch(lval) { - case NETSNMP_STRING_OUTPUT_GUESS: - case NETSNMP_STRING_OUTPUT_ASCII: - case NETSNMP_STRING_OUTPUT_HEX: - snmp_object->oid_output_format = lval; + case ZEND_ENUM_Snmp_StringOutput_Guess: + snmp_object->oid_output_format = NETSNMP_STRING_OUTPUT_GUESS; + return SUCCESS; + case ZEND_ENUM_Snmp_StringOutput_Ascii: + snmp_object->oid_output_format = NETSNMP_STRING_OUTPUT_ASCII; + return SUCCESS; + case ZEND_ENUM_Snmp_StringOutput_Hex: + snmp_object->oid_output_format = NETSNMP_STRING_OUTPUT_HEX; return SUCCESS; default: - zend_value_error("SNMP string output print format must be an SNMP_STRING_OUTPUT_* constant"); + zend_value_error("SNMP string output print format must be a Snmp\StringOutput::* constant"); return FAILURE; } } @@ -2253,13 +2305,23 @@ static zend_result php_snmp_write_oid_output_format(php_snmp_object *snmp_object zend_long lval = zval_get_long(newval); switch(lval) { - case NETSNMP_OID_OUTPUT_SUFFIX: - case NETSNMP_OID_OUTPUT_MODULE: - case NETSNMP_OID_OUTPUT_FULL: - case NETSNMP_OID_OUTPUT_NUMERIC: - case NETSNMP_OID_OUTPUT_UCD: - case NETSNMP_OID_OUTPUT_NONE: - snmp_object->oid_output_format = lval; + case ZEND_ENUM_Snmp_OidOutput_Suffix: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_SUFFIX; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_Module: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_MODULE; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_Full: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_FULL; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_Numeric: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NUMERIC; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_Ucd: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_UCD; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_None: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NONE; return SUCCESS; default: zend_value_error("SNMP output print format must be an SNMP_OID_OUTPUT_* constant"); @@ -2353,6 +2415,12 @@ PHP_MINIT_FUNCTION(snmp) /* Register SNMPException class */ php_snmp_exception_ce = register_class_SNMPException(spl_ce_RuntimeException); + /* Register enums */ + SnmpMib_ce = register_class_Snmp_Mib(); + SnmpOidOutput_ce = register_class_Snmp_OidOutput(); + SnmpOutput_ce = rregister_class_Snmp_Output(); + SnmpStringOutput_ce = rregister_class_Snmp_StringOutput(); + register_snmp_symbols(module_number); return SUCCESS; diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index a826bc05ec34..2ada8deaff1f 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -1,186 +1,118 @@ Date: Thu, 20 Aug 2026 13:29:02 +0800 Subject: [PATCH 09/23] Fix indentation and revert SNMP_VALUE_* constants --- ext/snmp/snmp.stub.php | 144 ++++++++++++++++++++-------------------- ext/snmp/snmp_arginfo.h | 8 +-- ext/snmp/snmp_decl.h | 8 +-- 3 files changed, 80 insertions(+), 80 deletions(-) diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index 2ada8deaff1f..8d0d43a52abe 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -7,190 +7,190 @@ namespace { -/** + /** * @var int * @cvalue ZEND_ENUM_Snmp_OidOutput_Suffix */ -const SNMP_OID_OUTPUT_SUFFIX = UNKNOWN; -/** + const SNMP_OID_OUTPUT_SUFFIX = UNKNOWN; + /** * @var int * @cvalue ZEND_ENUM_Snmp_OidOutput_Module */ -const SNMP_OID_OUTPUT_MODULE = UNKNOWN; -/** + const SNMP_OID_OUTPUT_MODULE = UNKNOWN; + /** * @var int * @cvalue ZEND_ENUM_Snmp_OidOutput_Full */ -const SNMP_OID_OUTPUT_FULL = UNKNOWN; -/** + const SNMP_OID_OUTPUT_FULL = UNKNOWN; + /** * @var int * @cvalue ZEND_ENUM_Snmp_OidOutput_Numeric */ -const SNMP_OID_OUTPUT_NUMERIC = UNKNOWN; -/** + const SNMP_OID_OUTPUT_NUMERIC = UNKNOWN; + /** * @var int * @cvalue ZEND_ENUM_Snmp_OidOutput_Ucd */ -const SNMP_OID_OUTPUT_UCD = UNKNOWN; -/** + const SNMP_OID_OUTPUT_UCD = UNKNOWN; + /** * @var int * @cvalue ZEND_ENUM_Snmp_OidOutput_None */ -const SNMP_OID_OUTPUT_NONE = UNKNOWN; + const SNMP_OID_OUTPUT_NONE = UNKNOWN; -/** + /** * @var int - * @cvalue ZEND_ENUM_Snmp_Value_Library + * @cvalue SNMP_VALUE_LIBRARY */ -const SNMP_VALUE_LIBRARY = UNKNOWN; -/** + const SNMP_VALUE_LIBRARY = UNKNOWN; + /** * @var int - * @cvalue ZEND_ENUM_Snmp_Value_Plain + * @cvalue SNMP_VALUE_PLAIN */ -const SNMP_VALUE_PLAIN = UNKNOWN; -/** + const SNMP_VALUE_PLAIN = UNKNOWN; + /** * @var int - * @cvalue ZEND_ENUM_Snmp_Value_Object + * @cvalue SNMP_VALUE_OBJECT */ -const SNMP_VALUE_OBJECT = UNKNOWN; + const SNMP_VALUE_OBJECT = UNKNOWN; -/** + /** * @var int * @cvalue ASN_BIT_STR */ -const SNMP_BIT_STR = UNKNOWN; -/** + const SNMP_BIT_STR = UNKNOWN; + /** * @var int * @cvalue ASN_OCTET_STR */ -const SNMP_OCTET_STR = UNKNOWN; -/** + const SNMP_OCTET_STR = UNKNOWN; + /** * @var int * @cvalue ASN_OPAQUE */ -const SNMP_OPAQUE = UNKNOWN; -/** + const SNMP_OPAQUE = UNKNOWN; + /** * @var int * @cvalue ASN_NULL */ -const SNMP_NULL = UNKNOWN; -/** + const SNMP_NULL = UNKNOWN; + /** * @var int * @cvalue ASN_OBJECT_ID */ -const SNMP_OBJECT_ID = UNKNOWN; -/** + const SNMP_OBJECT_ID = UNKNOWN; + /** * @var int * @cvalue ASN_IPADDRESS */ -const SNMP_IPADDRESS = UNKNOWN; -/** + const SNMP_IPADDRESS = UNKNOWN; + /** * @var int * @cvalue ASN_GAUGE */ -const SNMP_COUNTER = UNKNOWN; -/** + const SNMP_COUNTER = UNKNOWN; + /** * @var int * @cvalue ASN_UNSIGNED */ -const SNMP_UNSIGNED = UNKNOWN; -/** + const SNMP_UNSIGNED = UNKNOWN; + /** * @var int * @cvalue ASN_TIMETICKS */ -const SNMP_TIMETICKS = UNKNOWN; -/** + const SNMP_TIMETICKS = UNKNOWN; + /** * @var int * @cvalue ASN_UINTEGER */ -const SNMP_UINTEGER = UNKNOWN; -/** + const SNMP_UINTEGER = UNKNOWN; + /** * @var int * @cvalue ASN_INTEGER */ -const SNMP_INTEGER = UNKNOWN; -/** + const SNMP_INTEGER = UNKNOWN; + /** * @var int * @cvalue ASN_COUNTER64 */ -const SNMP_COUNTER64 = UNKNOWN; + const SNMP_COUNTER64 = UNKNOWN; -function snmpget(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} + function snmpget(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} -function snmpgetnext(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} + function snmpgetnext(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} -function snmpwalk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} + function snmpwalk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} -function snmprealwalk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} + function snmprealwalk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} /** @alias snmprealwalk */ -function snmpwalkoid(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} + function snmpwalkoid(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} -function snmpset(string $hostname, string $community, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): bool {} + function snmpset(string $hostname, string $community, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): bool {} -function snmp_get_quick_print(): bool {} + function snmp_get_quick_print(): bool {} -function snmp_set_quick_print(bool $enable): true {} + function snmp_set_quick_print(bool $enable): true {} -function snmp_set_enum_print(bool $enable): true {} + function snmp_set_enum_print(bool $enable): true {} -function snmp_set_mib_option(int $option, bool $enable): void {} + function snmp_set_mib_option(int $option, bool $enable): void {} -function snmp_set_oid_output_format(int $format): true {} + function snmp_set_oid_output_format(int $format): true {} -function snmp_set_output_option(int $option, bool $enable): void {} + function snmp_set_output_option(int $option, bool $enable): void {} -function snmp_set_string_output_format(int $format): void {} + function snmp_set_string_output_format(int $format): void {} /** @alias snmp_set_oid_output_format */ -function snmp_set_oid_numeric_print(int $format): true {} + function snmp_set_oid_numeric_print(int $format): true {} -function snmp2_get(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} + function snmp2_get(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} -function snmp2_getnext(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} + function snmp2_getnext(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} -function snmp2_walk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} + function snmp2_walk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} -function snmp2_real_walk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} + function snmp2_real_walk(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} -function snmp2_set(string $hostname, string $community, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): bool {} + function snmp2_set(string $hostname, string $community, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): bool {} -function snmp3_get( + function snmp3_get( string $hostname, string $security_name, string $security_level, string $auth_protocol, string $auth_passphrase, string $privacy_protocol, string $privacy_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} -function snmp3_getnext( + function snmp3_getnext( string $hostname, string $security_name, string $security_level, string $auth_protocol, string $auth_passphrase, string $privacy_protocol, string $privacy_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} -function snmp3_walk( + function snmp3_walk( string $hostname, string $security_name, string $security_level, string $auth_protocol, string $auth_passphrase, string $privacy_protocol, string $privacy_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} -function snmp3_real_walk( + function snmp3_real_walk( string $hostname, string $security_name, string $security_level, string $auth_protocol, string $auth_passphrase, string $privacy_protocol, string $privacy_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): array|false {} -function snmp3_set( + function snmp3_set( string $hostname, string $security_name, string $security_level, string $auth_protocol, string $auth_passphrase, string $privacy_protocol, string $privacy_passphrase, array|string $object_id, array|string $type, array|string $value, int $timeout = -1, int $retries = -1): bool {} -function snmp_set_valueretrieval(int $method): true {} + function snmp_set_valueretrieval(int $method): true {} -function snmp_get_valueretrieval(): int {} + function snmp_get_valueretrieval(): int {} -function snmp_read_mib(string $filename): bool {} + function snmp_read_mib(string $filename): bool {} function snmp_init_mib(?string $mibdirs): void {} diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index a2156337feea..a1d0dc137625 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 1b2235bd5725b81afd3541ba9fc7985687436a16 + * Stub hash: 25fe9463d1c1db2d058c60f95d63406e1d8fb339 * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) @@ -268,9 +268,9 @@ static void register_snmp_symbols(int module_number) REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC", ZEND_ENUM_Snmp_OidOutput_Numeric, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_UCD", ZEND_ENUM_Snmp_OidOutput_Ucd, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NONE", ZEND_ENUM_Snmp_OidOutput_None, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY", ZEND_ENUM_Snmp_Value_Library, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN", ZEND_ENUM_Snmp_Value_Plain, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT", ZEND_ENUM_Snmp_Value_Object, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY", SNMP_VALUE_LIBRARY, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN", SNMP_VALUE_PLAIN, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT", SNMP_VALUE_OBJECT, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_BIT_STR", ASN_BIT_STR, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OCTET_STR", ASN_OCTET_STR, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_OPAQUE", ASN_OPAQUE, CONST_PERSISTENT); diff --git a/ext/snmp/snmp_decl.h b/ext/snmp/snmp_decl.h index e52e8eee1266..fcbcd5201587 100644 --- a/ext/snmp/snmp_decl.h +++ b/ext/snmp/snmp_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 1b2235bd5725b81afd3541ba9fc7985687436a16 */ + * Stub hash: 25fe9463d1c1db2d058c60f95d63406e1d8fb339 */ -#ifndef ZEND_SNMP_DECL_1b2235bd5725b81afd3541ba9fc7985687436a16_H -#define ZEND_SNMP_DECL_1b2235bd5725b81afd3541ba9fc7985687436a16_H +#ifndef ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H +#define ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_AllowUnderscores = 1, @@ -36,4 +36,4 @@ typedef enum zend_enum_Snmp_StringOutput { ZEND_ENUM_Snmp_StringOutput_Hex = 3, } zend_enum_Snmp_StringOutput; -#endif /* ZEND_SNMP_DECL_1b2235bd5725b81afd3541ba9fc7985687436a16_H */ +#endif /* ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H */ From c3049bd5b4978c41667d4d7687f5314ebdfb2a31 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 20 Aug 2026 13:30:11 +0800 Subject: [PATCH 10/23] Include zend enum header --- ext/snmp/snmp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 3943b48d32e5..c6bead145dd1 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -22,6 +22,7 @@ #endif #include "php.h" +#include "Zend/zend_enum.h" #include "main/php_network.h" #include "ext/standard/info.h" From 169c86017167f0e739e7226407a60fc41113f435 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 20 Aug 2026 13:31:05 +0800 Subject: [PATCH 11/23] Fix typo --- ext/snmp/snmp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index c6bead145dd1..5b5b16569b90 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -2419,8 +2419,8 @@ PHP_MINIT_FUNCTION(snmp) /* Register enums */ SnmpMib_ce = register_class_Snmp_Mib(); SnmpOidOutput_ce = register_class_Snmp_OidOutput(); - SnmpOutput_ce = rregister_class_Snmp_Output(); - SnmpStringOutput_ce = rregister_class_Snmp_StringOutput(); + SnmpOutput_ce = register_class_Snmp_Output(); + SnmpStringOutput_ce = register_class_Snmp_StringOutput(); register_snmp_symbols(module_number); From 0a97d54d1a5f3dc7482576ad1541b2974451ec3d Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 20 Aug 2026 13:32:37 +0800 Subject: [PATCH 12/23] Fix escaping \ characters in strings --- ext/snmp/snmp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 5b5b16569b90..a80898560012 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1666,7 +1666,7 @@ PHP_FUNCTION(snmp_set_output_option) snmp_opt = NETSNMP_DS_LIB_EXTENDED_INDEX; break; default: - zend_argument_value_error(1, "must be a Snmp\Output:: constant"); + zend_argument_value_error(1, "must be a Snmp\\Output:: constant"); RETURN_THROWS(); } netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, snmp_opt, (int) val); @@ -2294,7 +2294,7 @@ static zend_result php_snmp_write_string_output_format(php_snmp_object *snmp_obj snmp_object->oid_output_format = NETSNMP_STRING_OUTPUT_HEX; return SUCCESS; default: - zend_value_error("SNMP string output print format must be a Snmp\StringOutput::* constant"); + zend_value_error("SNMP string output print format must be a Snmp\\StringOutput::* constant"); return FAILURE; } } From 99726f32aa9406739f93e77a575c91d3218c92c8 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 20 Aug 2026 16:15:27 +0800 Subject: [PATCH 13/23] Reverse changes to the SNMP_OID_OUTPUT_* constants --- ext/snmp/snmp.c | 64 ++++++++++++----------------------------- ext/snmp/snmp.stub.php | 22 ++++---------- ext/snmp/snmp_arginfo.h | 33 +++++---------------- ext/snmp/snmp_decl.h | 17 +++-------- 4 files changed, 36 insertions(+), 100 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index a80898560012..42359424670c 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -68,7 +68,6 @@ #include "snmp_decl.h" #include "snmp_arginfo.h" static zend_class_entry *SnmpMib_ce; -static zend_class_entry *SnmpOidOutput_ce; static zend_class_entry *SnmpOutput_ce; static zend_class_entry *SnmpStringOutput_ce; @@ -1676,39 +1675,25 @@ PHP_FUNCTION(snmp_set_output_option) /* {{{ Set the OID output format. */ PHP_FUNCTION(snmp_set_oid_output_format) { - zend_enum_Snmp_OidOutput format; - int snmp_format; + zend_long format; - ZEND_PARSE_PARAMETERS_START(1, 1) - Z_PARAM_ENUM(format, SnmpOidOutput_ce) - ZEND_PARSE_PARAMETERS_END(); + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &format) == FAILURE) { + RETURN_THROWS(); + } switch (format) { - case ZEND_ENUM_Snmp_OidOutput_Suffix: - snmp_format = NETSNMP_OID_OUTPUT_SUFFIX; - break; - case ZEND_ENUM_Snmp_OidOutput_Module: - snmp_format = NETSNMP_OID_OUTPUT_MODULE; - break; - case ZEND_ENUM_Snmp_OidOutput_Full: - snmp_format = NETSNMP_OID_OUTPUT_FULL; - break; - case ZEND_ENUM_Snmp_OidOutput_Numeric: - snmp_format = NETSNMP_OID_OUTPUT_NUMERIC; - break; - case ZEND_ENUM_Snmp_OidOutput_Ucd: - snmp_format = NETSNMP_OID_OUTPUT_UCD; - break; - case ZEND_ENUM_Snmp_OidOutput_None: - snmp_format = NETSNMP_OID_OUTPUT_NONE; - break; + case NETSNMP_OID_OUTPUT_SUFFIX: + case NETSNMP_OID_OUTPUT_MODULE: + case NETSNMP_OID_OUTPUT_FULL: + case NETSNMP_OID_OUTPUT_NUMERIC: + case NETSNMP_OID_OUTPUT_UCD: + case NETSNMP_OID_OUTPUT_NONE: + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, format); + RETURN_TRUE; default: zend_argument_value_error(1, "must be an SNMP_OID_OUTPUT_* constant"); RETURN_THROWS(); } - - netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, snmp_format); - RETURN_TRUE; } /* }}} */ @@ -2306,23 +2291,13 @@ static zend_result php_snmp_write_oid_output_format(php_snmp_object *snmp_object zend_long lval = zval_get_long(newval); switch(lval) { - case ZEND_ENUM_Snmp_OidOutput_Suffix: - snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_SUFFIX; - return SUCCESS; - case ZEND_ENUM_Snmp_OidOutput_Module: - snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_MODULE; - return SUCCESS; - case ZEND_ENUM_Snmp_OidOutput_Full: - snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_FULL; - return SUCCESS; - case ZEND_ENUM_Snmp_OidOutput_Numeric: - snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NUMERIC; - return SUCCESS; - case ZEND_ENUM_Snmp_OidOutput_Ucd: - snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_UCD; - return SUCCESS; - case ZEND_ENUM_Snmp_OidOutput_None: - snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NONE; + case NETSNMP_OID_OUTPUT_SUFFIX: + case NETSNMP_OID_OUTPUT_MODULE: + case NETSNMP_OID_OUTPUT_FULL: + case NETSNMP_OID_OUTPUT_NUMERIC: + case NETSNMP_OID_OUTPUT_UCD: + case NETSNMP_OID_OUTPUT_NONE: + snmp_object->oid_output_format = lval; return SUCCESS; default: zend_value_error("SNMP output print format must be an SNMP_OID_OUTPUT_* constant"); @@ -2418,7 +2393,6 @@ PHP_MINIT_FUNCTION(snmp) /* Register enums */ SnmpMib_ce = register_class_Snmp_Mib(); - SnmpOidOutput_ce = register_class_Snmp_OidOutput(); SnmpOutput_ce = register_class_Snmp_Output(); SnmpStringOutput_ce = register_class_Snmp_StringOutput(); diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index 8d0d43a52abe..09e5f9f845a7 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -9,32 +9,32 @@ { /** * @var int - * @cvalue ZEND_ENUM_Snmp_OidOutput_Suffix + * @cvalue NETSNMP_OID_OUTPUT_SUFFIX */ const SNMP_OID_OUTPUT_SUFFIX = UNKNOWN; /** * @var int - * @cvalue ZEND_ENUM_Snmp_OidOutput_Module + * @cvalue NETSNMP_OID_OUTPUT_MODULE */ const SNMP_OID_OUTPUT_MODULE = UNKNOWN; /** * @var int - * @cvalue ZEND_ENUM_Snmp_OidOutput_Full + * @cvalue NETSNMP_OID_OUTPUT_FULL */ const SNMP_OID_OUTPUT_FULL = UNKNOWN; /** * @var int - * @cvalue ZEND_ENUM_Snmp_OidOutput_Numeric + * @cvalue NETSNMP_OID_OUTPUT_NUMERIC */ const SNMP_OID_OUTPUT_NUMERIC = UNKNOWN; /** * @var int - * @cvalue ZEND_ENUM_Snmp_OidOutput_Ucd + * @cvalue NETSNMP_OID_OUTPUT_UCD */ const SNMP_OID_OUTPUT_UCD = UNKNOWN; /** * @var int - * @cvalue ZEND_ENUM_Snmp_OidOutput_None + * @cvalue NETSNMP_OID_OUTPUT_NONE */ const SNMP_OID_OUTPUT_NONE = UNKNOWN; @@ -283,16 +283,6 @@ enum Mib case Replace; } - enum OidOutput - { - case Suffix; - case Module; - case Full; - case Numeric; - case Ucd; - case None; - } - enum Output { case NumericIndex; diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index a1d0dc137625..1ccbf67f255d 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 25fe9463d1c1db2d058c60f95d63406e1d8fb339 + * Stub hash: 2c4531f05b2ca9edcc22d326819c9baa9376630c * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) @@ -262,12 +262,12 @@ static const zend_function_entry class_SNMP_methods[] = { static void register_snmp_symbols(int module_number) { - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_SUFFIX", ZEND_ENUM_Snmp_OidOutput_Suffix, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_MODULE", ZEND_ENUM_Snmp_OidOutput_Module, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_FULL", ZEND_ENUM_Snmp_OidOutput_Full, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC", ZEND_ENUM_Snmp_OidOutput_Numeric, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_UCD", ZEND_ENUM_Snmp_OidOutput_Ucd, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NONE", ZEND_ENUM_Snmp_OidOutput_None, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_SUFFIX", NETSNMP_OID_OUTPUT_SUFFIX, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_MODULE", NETSNMP_OID_OUTPUT_MODULE, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_FULL", NETSNMP_OID_OUTPUT_FULL, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC", NETSNMP_OID_OUTPUT_NUMERIC, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_UCD", NETSNMP_OID_OUTPUT_UCD, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NONE", NETSNMP_OID_OUTPUT_NONE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY", SNMP_VALUE_LIBRARY, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN", SNMP_VALUE_PLAIN, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT", SNMP_VALUE_OBJECT, CONST_PERSISTENT); @@ -480,25 +480,6 @@ static zend_class_entry *register_class_Snmp_Mib(void) return class_entry; } -static zend_class_entry *register_class_Snmp_OidOutput(void) -{ - zend_class_entry *class_entry = zend_register_internal_enum("Snmp\\OidOutput", IS_UNDEF, NULL); - - zend_enum_add_case_cstr(class_entry, "Suffix", NULL); - - zend_enum_add_case_cstr(class_entry, "Module", NULL); - - zend_enum_add_case_cstr(class_entry, "Full", NULL); - - zend_enum_add_case_cstr(class_entry, "Numeric", NULL); - - zend_enum_add_case_cstr(class_entry, "Ucd", NULL); - - zend_enum_add_case_cstr(class_entry, "None", NULL); - - return class_entry; -} - static zend_class_entry *register_class_Snmp_Output(void) { zend_class_entry *class_entry = zend_register_internal_enum("Snmp\\Output", IS_UNDEF, NULL); diff --git a/ext/snmp/snmp_decl.h b/ext/snmp/snmp_decl.h index fcbcd5201587..d3ed92b9f810 100644 --- a/ext/snmp/snmp_decl.h +++ b/ext/snmp/snmp_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 25fe9463d1c1db2d058c60f95d63406e1d8fb339 */ + * Stub hash: 2c4531f05b2ca9edcc22d326819c9baa9376630c */ -#ifndef ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H -#define ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H +#ifndef ZEND_SNMP_DECL_2c4531f05b2ca9edcc22d326819c9baa9376630c_H +#define ZEND_SNMP_DECL_2c4531f05b2ca9edcc22d326819c9baa9376630c_H typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_AllowUnderscores = 1, @@ -10,15 +10,6 @@ typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_Replace = 3, } zend_enum_Snmp_Mib; -typedef enum zend_enum_Snmp_OidOutput { - ZEND_ENUM_Snmp_OidOutput_Suffix = 1, - ZEND_ENUM_Snmp_OidOutput_Module = 2, - ZEND_ENUM_Snmp_OidOutput_Full = 3, - ZEND_ENUM_Snmp_OidOutput_Numeric = 4, - ZEND_ENUM_Snmp_OidOutput_Ucd = 5, - ZEND_ENUM_Snmp_OidOutput_None = 6, -} zend_enum_Snmp_OidOutput; - typedef enum zend_enum_Snmp_Output { ZEND_ENUM_Snmp_Output_NumericIndex = 1, ZEND_ENUM_Snmp_Output_EnumPrint = 2, @@ -36,4 +27,4 @@ typedef enum zend_enum_Snmp_StringOutput { ZEND_ENUM_Snmp_StringOutput_Hex = 3, } zend_enum_Snmp_StringOutput; -#endif /* ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H */ +#endif /* ZEND_SNMP_DECL_2c4531f05b2ca9edcc22d326819c9baa9376630c_H */ From 82c43eddca7316def18811865910fc4ffc392379 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 20 Aug 2026 16:39:51 +0800 Subject: [PATCH 14/23] Re-convert snmp_set_string_output_format() to use the ENUM, with a fallback to allow integers --- ext/snmp/snmp.c | 79 ++++++++++++++++++++++++++++------------- ext/snmp/snmp.stub.php | 22 ++++++++---- ext/snmp/snmp_arginfo.h | 33 +++++++++++++---- ext/snmp/snmp_decl.h | 17 ++++++--- 4 files changed, 110 insertions(+), 41 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 42359424670c..c42758b1c3a5 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -68,6 +68,7 @@ #include "snmp_decl.h" #include "snmp_arginfo.h" static zend_class_entry *SnmpMib_ce; +static zend_class_entry *SnmpOidOutput_ce; static zend_class_entry *SnmpOutput_ce; static zend_class_entry *SnmpStringOutput_ce; @@ -1602,13 +1603,18 @@ PHP_FUNCTION(snmp_set_mib_option) /* {{{ Set the string output format. */ PHP_FUNCTION(snmp_set_string_output_format) { - zend_enum_Snmp_StringOutput format; + zend_long format; int snmp_format; + zend_object *format_object = NULL; ZEND_PARSE_PARAMETERS_START(1, 1) - Z_PARAM_ENUM(format, SnmpStringOutput_ce) + Z_PARAM_OBJ_OF_CLASS_OR_LONG(format_object, SnmpStringOutput_ce, format) ZEND_PARSE_PARAMETERS_END(); + if (format_object != NULL) { + format = zend_enum_fetch_case_id(format_object); + } + switch (format) { case ZEND_ENUM_Snmp_StringOutput_Guess: snmp_format = NETSNMP_STRING_OUTPUT_GUESS; @@ -1620,7 +1626,7 @@ PHP_FUNCTION(snmp_set_string_output_format) snmp_format = NETSNMP_STRING_OUTPUT_HEX; break; default: - zend_argument_value_error(1, "must be an SNMP_STRING_OUTPUT_* constant"); + zend_argument_value_error(1, "must be a Snmp\\StringOutput:: constant"); RETURN_THROWS(); } netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, snmp_format); @@ -1675,25 +1681,39 @@ PHP_FUNCTION(snmp_set_output_option) /* {{{ Set the OID output format. */ PHP_FUNCTION(snmp_set_oid_output_format) { - zend_long format; + zend_enum_Snmp_OidOutput format; + int snmp_format; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &format) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_ENUM(format, SnmpOidOutput_ce) + ZEND_PARSE_PARAMETERS_END(); switch (format) { - case NETSNMP_OID_OUTPUT_SUFFIX: - case NETSNMP_OID_OUTPUT_MODULE: - case NETSNMP_OID_OUTPUT_FULL: - case NETSNMP_OID_OUTPUT_NUMERIC: - case NETSNMP_OID_OUTPUT_UCD: - case NETSNMP_OID_OUTPUT_NONE: - netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, format); - RETURN_TRUE; + case ZEND_ENUM_Snmp_OidOutput_Suffix: + snmp_format = NETSNMP_OID_OUTPUT_SUFFIX; + break; + case ZEND_ENUM_Snmp_OidOutput_Module: + snmp_format = NETSNMP_OID_OUTPUT_MODULE; + break; + case ZEND_ENUM_Snmp_OidOutput_Full: + snmp_format = NETSNMP_OID_OUTPUT_FULL; + break; + case ZEND_ENUM_Snmp_OidOutput_Numeric: + snmp_format = NETSNMP_OID_OUTPUT_NUMERIC; + break; + case ZEND_ENUM_Snmp_OidOutput_Ucd: + snmp_format = NETSNMP_OID_OUTPUT_UCD; + break; + case ZEND_ENUM_Snmp_OidOutput_None: + snmp_format = NETSNMP_OID_OUTPUT_NONE; + break; default: - zend_argument_value_error(1, "must be an SNMP_OID_OUTPUT_* constant"); + zend_argument_value_error(1, "must be a Snmp\\OidOutput constant"); RETURN_THROWS(); } + + netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, snmp_format); + RETURN_TRUE; } /* }}} */ @@ -2291,16 +2311,26 @@ static zend_result php_snmp_write_oid_output_format(php_snmp_object *snmp_object zend_long lval = zval_get_long(newval); switch(lval) { - case NETSNMP_OID_OUTPUT_SUFFIX: - case NETSNMP_OID_OUTPUT_MODULE: - case NETSNMP_OID_OUTPUT_FULL: - case NETSNMP_OID_OUTPUT_NUMERIC: - case NETSNMP_OID_OUTPUT_UCD: - case NETSNMP_OID_OUTPUT_NONE: - snmp_object->oid_output_format = lval; + case ZEND_ENUM_Snmp_OidOutput_Suffix: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_SUFFIX; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_Module: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_MODULE; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_Full: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_FULL; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_Numeric: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NUMERIC; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_Ucd: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_UCD; + return SUCCESS; + case ZEND_ENUM_Snmp_OidOutput_None: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NONE; return SUCCESS; default: - zend_value_error("SNMP output print format must be an SNMP_OID_OUTPUT_* constant"); + zend_value_error("SNMP output print format must be a Snmp\\OidOutput constant"); return FAILURE; } } @@ -2393,6 +2423,7 @@ PHP_MINIT_FUNCTION(snmp) /* Register enums */ SnmpMib_ce = register_class_Snmp_Mib(); + SnmpOidOutput_ce = register_class_Snmp_OidOutput(); SnmpOutput_ce = register_class_Snmp_Output(); SnmpStringOutput_ce = register_class_Snmp_StringOutput(); diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index 09e5f9f845a7..8d0d43a52abe 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -9,32 +9,32 @@ { /** * @var int - * @cvalue NETSNMP_OID_OUTPUT_SUFFIX + * @cvalue ZEND_ENUM_Snmp_OidOutput_Suffix */ const SNMP_OID_OUTPUT_SUFFIX = UNKNOWN; /** * @var int - * @cvalue NETSNMP_OID_OUTPUT_MODULE + * @cvalue ZEND_ENUM_Snmp_OidOutput_Module */ const SNMP_OID_OUTPUT_MODULE = UNKNOWN; /** * @var int - * @cvalue NETSNMP_OID_OUTPUT_FULL + * @cvalue ZEND_ENUM_Snmp_OidOutput_Full */ const SNMP_OID_OUTPUT_FULL = UNKNOWN; /** * @var int - * @cvalue NETSNMP_OID_OUTPUT_NUMERIC + * @cvalue ZEND_ENUM_Snmp_OidOutput_Numeric */ const SNMP_OID_OUTPUT_NUMERIC = UNKNOWN; /** * @var int - * @cvalue NETSNMP_OID_OUTPUT_UCD + * @cvalue ZEND_ENUM_Snmp_OidOutput_Ucd */ const SNMP_OID_OUTPUT_UCD = UNKNOWN; /** * @var int - * @cvalue NETSNMP_OID_OUTPUT_NONE + * @cvalue ZEND_ENUM_Snmp_OidOutput_None */ const SNMP_OID_OUTPUT_NONE = UNKNOWN; @@ -283,6 +283,16 @@ enum Mib case Replace; } + enum OidOutput + { + case Suffix; + case Module; + case Full; + case Numeric; + case Ucd; + case None; + } + enum Output { case NumericIndex; diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index 1ccbf67f255d..a1d0dc137625 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 2c4531f05b2ca9edcc22d326819c9baa9376630c + * Stub hash: 25fe9463d1c1db2d058c60f95d63406e1d8fb339 * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) @@ -262,12 +262,12 @@ static const zend_function_entry class_SNMP_methods[] = { static void register_snmp_symbols(int module_number) { - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_SUFFIX", NETSNMP_OID_OUTPUT_SUFFIX, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_MODULE", NETSNMP_OID_OUTPUT_MODULE, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_FULL", NETSNMP_OID_OUTPUT_FULL, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC", NETSNMP_OID_OUTPUT_NUMERIC, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_UCD", NETSNMP_OID_OUTPUT_UCD, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NONE", NETSNMP_OID_OUTPUT_NONE, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_SUFFIX", ZEND_ENUM_Snmp_OidOutput_Suffix, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_MODULE", ZEND_ENUM_Snmp_OidOutput_Module, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_FULL", ZEND_ENUM_Snmp_OidOutput_Full, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC", ZEND_ENUM_Snmp_OidOutput_Numeric, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_UCD", ZEND_ENUM_Snmp_OidOutput_Ucd, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NONE", ZEND_ENUM_Snmp_OidOutput_None, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY", SNMP_VALUE_LIBRARY, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN", SNMP_VALUE_PLAIN, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT", SNMP_VALUE_OBJECT, CONST_PERSISTENT); @@ -480,6 +480,25 @@ static zend_class_entry *register_class_Snmp_Mib(void) return class_entry; } +static zend_class_entry *register_class_Snmp_OidOutput(void) +{ + zend_class_entry *class_entry = zend_register_internal_enum("Snmp\\OidOutput", IS_UNDEF, NULL); + + zend_enum_add_case_cstr(class_entry, "Suffix", NULL); + + zend_enum_add_case_cstr(class_entry, "Module", NULL); + + zend_enum_add_case_cstr(class_entry, "Full", NULL); + + zend_enum_add_case_cstr(class_entry, "Numeric", NULL); + + zend_enum_add_case_cstr(class_entry, "Ucd", NULL); + + zend_enum_add_case_cstr(class_entry, "None", NULL); + + return class_entry; +} + static zend_class_entry *register_class_Snmp_Output(void) { zend_class_entry *class_entry = zend_register_internal_enum("Snmp\\Output", IS_UNDEF, NULL); diff --git a/ext/snmp/snmp_decl.h b/ext/snmp/snmp_decl.h index d3ed92b9f810..fcbcd5201587 100644 --- a/ext/snmp/snmp_decl.h +++ b/ext/snmp/snmp_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 2c4531f05b2ca9edcc22d326819c9baa9376630c */ + * Stub hash: 25fe9463d1c1db2d058c60f95d63406e1d8fb339 */ -#ifndef ZEND_SNMP_DECL_2c4531f05b2ca9edcc22d326819c9baa9376630c_H -#define ZEND_SNMP_DECL_2c4531f05b2ca9edcc22d326819c9baa9376630c_H +#ifndef ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H +#define ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_AllowUnderscores = 1, @@ -10,6 +10,15 @@ typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_Replace = 3, } zend_enum_Snmp_Mib; +typedef enum zend_enum_Snmp_OidOutput { + ZEND_ENUM_Snmp_OidOutput_Suffix = 1, + ZEND_ENUM_Snmp_OidOutput_Module = 2, + ZEND_ENUM_Snmp_OidOutput_Full = 3, + ZEND_ENUM_Snmp_OidOutput_Numeric = 4, + ZEND_ENUM_Snmp_OidOutput_Ucd = 5, + ZEND_ENUM_Snmp_OidOutput_None = 6, +} zend_enum_Snmp_OidOutput; + typedef enum zend_enum_Snmp_Output { ZEND_ENUM_Snmp_Output_NumericIndex = 1, ZEND_ENUM_Snmp_Output_EnumPrint = 2, @@ -27,4 +36,4 @@ typedef enum zend_enum_Snmp_StringOutput { ZEND_ENUM_Snmp_StringOutput_Hex = 3, } zend_enum_Snmp_StringOutput; -#endif /* ZEND_SNMP_DECL_2c4531f05b2ca9edcc22d326819c9baa9376630c_H */ +#endif /* ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H */ From 3de374ccf1f3c7f31f4cf00723c3da12566afbf6 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Thu, 20 Aug 2026 17:26:57 +0800 Subject: [PATCH 15/23] Add new methods to set the OID and String output on the SNMP class using the enum field --- ext/snmp/snmp.c | 94 ++++++++++++++++++++++++++++++----------- ext/snmp/snmp.stub.php | 7 ++- ext/snmp/snmp_arginfo.h | 18 +++++--- ext/snmp/snmp_decl.h | 8 ++-- 4 files changed, 91 insertions(+), 36 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index c42758b1c3a5..3829c05b7ad2 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1971,6 +1971,76 @@ PHP_METHOD(SNMP, setSecurity) } /* }}} */ +/* {{{ Set OID output format */ +PHP_METHOD(SNMP, setOidOutputFormat) +{ + php_snmp_object *snmp_object; + zval *object = ZEND_THIS; + zend_enum_Snmp_OidOutput format; + + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_ENUM(format, SnmpOidOutput_ce) + ZEND_PARSE_PARAMETERS_END(); + + snmp_object = Z_SNMP_P(object); + + switch (format) { + case ZEND_ENUM_Snmp_OidOutput_Suffix: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_SUFFIX; + RETURN_TRUE; + case ZEND_ENUM_Snmp_OidOutput_Module: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_MODULE; + RETURN_TRUE; + case ZEND_ENUM_Snmp_OidOutput_Full: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_FULL; + RETURN_TRUE; + case ZEND_ENUM_Snmp_OidOutput_Numeric: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NUMERIC; + RETURN_TRUE; + case ZEND_ENUM_Snmp_OidOutput_Ucd: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_UCD; + RETURN_TRUE; + case ZEND_ENUM_Snmp_OidOutput_None: + snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NONE; + RETURN_TRUE; + default: + zend_argument_value_error(1, "must be a Snmp\\OidOutput constant"); + RETURN_THROWS(); + } + +} +/* }}} */ + +/* {{{ Set string output format */ +PHP_METHOD(SNMP, setStringOutputFormat) +{ + php_snmp_object *snmp_object; + zval *object = ZEND_THIS; + zend_enum_Snmp_StringOutput format; + + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_ENUM(format, SnmpStringOutput_ce) + ZEND_PARSE_PARAMETERS_END(); + + snmp_object = Z_SNMP_P(object); + + switch (format) { + case ZEND_ENUM_Snmp_StringOutput_Guess: + snmp_object->string_output_format = NETSNMP_STRING_OUTPUT_GUESS; + RETURN_TRUE; + case ZEND_ENUM_Snmp_StringOutput_Ascii: + snmp_object->string_output_format = NETSNMP_STRING_OUTPUT_ASCII; + RETURN_TRUE; + case ZEND_ENUM_Snmp_StringOutput_Hex: + snmp_object->string_output_format = NETSNMP_STRING_OUTPUT_HEX; + RETURN_TRUE; + default: + zend_argument_value_error(1, "must be a Snmp\\StringOutput:: constant"); + RETURN_THROWS(); + } +} +/* }}} */ + /* {{{ Get last error code number */ PHP_METHOD(SNMP, getErrno) { @@ -2218,7 +2288,6 @@ PHP_SNMP_BOOL_PROPERTY_READER_FUNCTION(print_hex_text) } PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(valueretrieval) -PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(string_output_format) PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(oid_output_format) PHP_SNMP_LONG_PROPERTY_READER_FUNCTION(exceptions_enabled) @@ -2283,28 +2352,6 @@ PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(dont_print_units) PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(escape_quotes) PHP_SNMP_BOOL_PROPERTY_WRITER_FUNCTION(print_hex_text) -/* {{{ */ -static zend_result php_snmp_write_string_output_format(php_snmp_object *snmp_object, zval *newval) -{ - zend_long lval = zval_get_long(newval); - - switch(lval) { - case ZEND_ENUM_Snmp_StringOutput_Guess: - snmp_object->oid_output_format = NETSNMP_STRING_OUTPUT_GUESS; - return SUCCESS; - case ZEND_ENUM_Snmp_StringOutput_Ascii: - snmp_object->oid_output_format = NETSNMP_STRING_OUTPUT_ASCII; - return SUCCESS; - case ZEND_ENUM_Snmp_StringOutput_Hex: - snmp_object->oid_output_format = NETSNMP_STRING_OUTPUT_HEX; - return SUCCESS; - default: - zend_value_error("SNMP string output print format must be a Snmp\\StringOutput::* constant"); - return FAILURE; - } -} -/* }}} */ - /* {{{ */ static zend_result php_snmp_write_oid_output_format(php_snmp_object *snmp_object, zval *newval) { @@ -2370,7 +2417,6 @@ const php_snmp_prop_handler php_snmp_property_entries[] = { PHP_SNMP_PROPERTY_ENTRY_RECORD(escape_quotes), PHP_SNMP_PROPERTY_ENTRY_RECORD(print_hex_text), PHP_SNMP_PROPERTY_ENTRY_RECORD(valueretrieval), - PHP_SNMP_PROPERTY_ENTRY_RECORD(string_output_format), PHP_SNMP_PROPERTY_ENTRY_RECORD(oid_output_format), PHP_SNMP_PROPERTY_ENTRY_RECORD(exceptions_enabled), { NULL, 0, NULL, NULL} diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index 8d0d43a52abe..d1a1c9e4b1b6 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -236,7 +236,6 @@ class SNMP public bool $escape_quotes; public bool $print_hex_text; public int $valueretrieval; - public int $string_output_format; public int $oid_output_format; public int $exceptions_enabled; @@ -251,6 +250,12 @@ public function setSecurity( string $privacyProtocol = "", string $privacyPassphrase = "", string $contextName = "", string $contextEngineId = ""): bool {} + /** @tentative-return-type */ + public function setOidOutputFormat (int $format): bool {} + + /** @tentative-return-type */ + public function setStringOutputFormat (int $format): bool {} + /** @tentative-return-type */ public function get(array|string $objectId, bool $preserveKeys = false): mixed {} diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index a1d0dc137625..a9aa3ec51636 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 25fe9463d1c1db2d058c60f95d63406e1d8fb339 + * Stub hash: 234cfdb104e3ee1411008ded0567114d8282fee1 * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) @@ -151,6 +151,12 @@ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SNMP_setSecurity ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, contextEngineId, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SNMP_setOidOutputFormat, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_SNMP_setStringOutputFormat arginfo_class_SNMP_setOidOutputFormat + ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SNMP_get, 0, 1, IS_MIXED, 0) ZEND_ARG_TYPE_MASK(0, objectId, MAY_BE_ARRAY|MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserveKeys, _IS_BOOL, 0, "false") @@ -208,6 +214,8 @@ ZEND_FUNCTION(snmp_init_mib); ZEND_METHOD(SNMP, __construct); ZEND_METHOD(SNMP, close); ZEND_METHOD(SNMP, setSecurity); +ZEND_METHOD(SNMP, setOidOutputFormat); +ZEND_METHOD(SNMP, setStringOutputFormat); ZEND_METHOD(SNMP, get); ZEND_METHOD(SNMP, getnext); ZEND_METHOD(SNMP, walk); @@ -251,6 +259,8 @@ static const zend_function_entry class_SNMP_methods[] = { ZEND_ME(SNMP, __construct, arginfo_class_SNMP___construct, ZEND_ACC_PUBLIC) ZEND_ME(SNMP, close, arginfo_class_SNMP_close, ZEND_ACC_PUBLIC) ZEND_ME(SNMP, setSecurity, arginfo_class_SNMP_setSecurity, ZEND_ACC_PUBLIC) + ZEND_ME(SNMP, setOidOutputFormat, arginfo_class_SNMP_setOidOutputFormat, ZEND_ACC_PUBLIC) + ZEND_ME(SNMP, setStringOutputFormat, arginfo_class_SNMP_setStringOutputFormat, ZEND_ACC_PUBLIC) ZEND_ME(SNMP, get, arginfo_class_SNMP_get, ZEND_ACC_PUBLIC) ZEND_ME(SNMP, getnext, arginfo_class_SNMP_getnext, ZEND_ACC_PUBLIC) ZEND_ME(SNMP, walk, arginfo_class_SNMP_walk, ZEND_ACC_PUBLIC) @@ -436,12 +446,6 @@ static zend_class_entry *register_class_SNMP(void) zend_declare_typed_property(class_entry, property_valueretrieval_name, &property_valueretrieval_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release_ex(property_valueretrieval_name, true); - zval property_string_output_format_default_value; - ZVAL_UNDEF(&property_string_output_format_default_value); - zend_string *property_string_output_format_name = zend_string_init("string_output_format", sizeof("string_output_format") - 1, true); - zend_declare_typed_property(class_entry, property_string_output_format_name, &property_string_output_format_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release_ex(property_string_output_format_name, true); - zval property_oid_output_format_default_value; ZVAL_UNDEF(&property_oid_output_format_default_value); zend_string *property_oid_output_format_name = zend_string_init("oid_output_format", sizeof("oid_output_format") - 1, true); diff --git a/ext/snmp/snmp_decl.h b/ext/snmp/snmp_decl.h index fcbcd5201587..63ff47d876c8 100644 --- a/ext/snmp/snmp_decl.h +++ b/ext/snmp/snmp_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 25fe9463d1c1db2d058c60f95d63406e1d8fb339 */ + * Stub hash: 234cfdb104e3ee1411008ded0567114d8282fee1 */ -#ifndef ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H -#define ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H +#ifndef ZEND_SNMP_DECL_234cfdb104e3ee1411008ded0567114d8282fee1_H +#define ZEND_SNMP_DECL_234cfdb104e3ee1411008ded0567114d8282fee1_H typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_AllowUnderscores = 1, @@ -36,4 +36,4 @@ typedef enum zend_enum_Snmp_StringOutput { ZEND_ENUM_Snmp_StringOutput_Hex = 3, } zend_enum_Snmp_StringOutput; -#endif /* ZEND_SNMP_DECL_25fe9463d1c1db2d058c60f95d63406e1d8fb339_H */ +#endif /* ZEND_SNMP_DECL_234cfdb104e3ee1411008ded0567114d8282fee1_H */ From 1548034f5e646a61da2549d3894014f1ba86f2ae Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Fri, 21 Aug 2026 06:43:59 +0800 Subject: [PATCH 16/23] Update test output for snmp_set_oid_output_format() --- ext/snmp/tests/snmp_set_oid_output_format.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/snmp/tests/snmp_set_oid_output_format.phpt b/ext/snmp/tests/snmp_set_oid_output_format.phpt index bb8c63bdda1a..af6b804d18df 100644 --- a/ext/snmp/tests/snmp_set_oid_output_format.phpt +++ b/ext/snmp/tests/snmp_set_oid_output_format.phpt @@ -26,7 +26,7 @@ var_dump(snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC)); ?> --EXPECT-- Checking error handling -snmp_set_oid_output_format(): Argument #1 ($format) must be an SNMP_OID_OUTPUT_* constant +snmp_set_oid_output_format(): Argument #1 ($format) must be of type Snmp\\OidOutput, int given Checking working bool(true) bool(true) From a130ef6c55a59e6ad3359526ca2ed1c89db232a1 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Fri, 21 Aug 2026 07:16:20 +0800 Subject: [PATCH 17/23] Swap the string and oid output logic to allow the legacy function to accept enum or const --- ext/snmp/snmp.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 3829c05b7ad2..bd21298d6d18 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1603,18 +1603,13 @@ PHP_FUNCTION(snmp_set_mib_option) /* {{{ Set the string output format. */ PHP_FUNCTION(snmp_set_string_output_format) { - zend_long format; + zend_enum_Snmp_StringOutput format; int snmp_format; - zend_object *format_object = NULL; ZEND_PARSE_PARAMETERS_START(1, 1) - Z_PARAM_OBJ_OF_CLASS_OR_LONG(format_object, SnmpStringOutput_ce, format) + Z_PARAM_ENUM(opt, SnmpStringOutput_ce) ZEND_PARSE_PARAMETERS_END(); - if (format_object != NULL) { - format = zend_enum_fetch_case_id(format_object); - } - switch (format) { case ZEND_ENUM_Snmp_StringOutput_Guess: snmp_format = NETSNMP_STRING_OUTPUT_GUESS; @@ -1681,13 +1676,18 @@ PHP_FUNCTION(snmp_set_output_option) /* {{{ Set the OID output format. */ PHP_FUNCTION(snmp_set_oid_output_format) { - zend_enum_Snmp_OidOutput format; - int snmp_format; + zend_long format; + int snmp_format; + zend_object *format_object = NULL; ZEND_PARSE_PARAMETERS_START(1, 1) - Z_PARAM_ENUM(format, SnmpOidOutput_ce) + Z_PARAM_OBJ_OF_CLASS_OR_LONG(format_object, SnmpOidOutput_ce, format) ZEND_PARSE_PARAMETERS_END(); + if (format_object != NULL) { + format = zend_enum_fetch_case_id(format_object); + } + switch (format) { case ZEND_ENUM_Snmp_OidOutput_Suffix: snmp_format = NETSNMP_OID_OUTPUT_SUFFIX; From 4ad107773ba68caf8f4b147b62cd7d0476239684 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Fri, 21 Aug 2026 07:20:18 +0800 Subject: [PATCH 18/23] Fix typo and error output --- ext/snmp/snmp.c | 2 +- ext/snmp/tests/snmp_set_oid_output_format.phpt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index bd21298d6d18..eb7924fee5a2 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1607,7 +1607,7 @@ PHP_FUNCTION(snmp_set_string_output_format) int snmp_format; ZEND_PARSE_PARAMETERS_START(1, 1) - Z_PARAM_ENUM(opt, SnmpStringOutput_ce) + Z_PARAM_ENUM(format, SnmpStringOutput_ce) ZEND_PARSE_PARAMETERS_END(); switch (format) { diff --git a/ext/snmp/tests/snmp_set_oid_output_format.phpt b/ext/snmp/tests/snmp_set_oid_output_format.phpt index af6b804d18df..582ba79e7c29 100644 --- a/ext/snmp/tests/snmp_set_oid_output_format.phpt +++ b/ext/snmp/tests/snmp_set_oid_output_format.phpt @@ -26,7 +26,7 @@ var_dump(snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC)); ?> --EXPECT-- Checking error handling -snmp_set_oid_output_format(): Argument #1 ($format) must be of type Snmp\\OidOutput, int given +snmp_set_oid_output_format(): Argument #1 ($format) must be a Snmp\OidOutput constant Checking working bool(true) bool(true) From b2df4a19cbf889593d33e950734995a889aa9970 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Fri, 21 Aug 2026 07:24:38 +0800 Subject: [PATCH 19/23] Update SNMP OO test --- ext/snmp/snmp.c | 2 +- ext/snmp/tests/snmp-object-properties.phpt | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index eb7924fee5a2..b006b0091aa9 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -2377,7 +2377,7 @@ static zend_result php_snmp_write_oid_output_format(php_snmp_object *snmp_object snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NONE; return SUCCESS; default: - zend_value_error("SNMP output print format must be a Snmp\\OidOutput constant"); + zend_value_error("SNMP output print format must be a SNMP_OID_OUTPUT_* constant"); return FAILURE; } } diff --git a/ext/snmp/tests/snmp-object-properties.phpt b/ext/snmp/tests/snmp-object-properties.phpt index 4f8519c4f4ad..76060aaba482 100644 --- a/ext/snmp/tests/snmp-object-properties.phpt +++ b/ext/snmp/tests/snmp-object-properties.phpt @@ -112,8 +112,6 @@ object(SNMP)#%d (%d) { bool(false) ["valueretrieval"]=> int(1) - ["string_output_format"]=> - int(0) ["oid_output_format"]=> int(3) ["exceptions_enabled"]=> @@ -151,8 +149,6 @@ object(SNMP)#%d (%d) { bool(false) ["valueretrieval"]=> int(0) - ["string_output_format"]=> - int(0) ["oid_output_format"]=> int(4) ["exceptions_enabled"]=> @@ -190,8 +186,6 @@ object(SNMP)#%d (%d) { bool(false) ["valueretrieval"]=> int(1) - ["string_output_format"]=> - int(0) ["oid_output_format"]=> int(3) ["exceptions_enabled"]=> @@ -234,8 +228,6 @@ object(SNMP)#%d (%d) { bool(false) ["valueretrieval"]=> int(1) - ["string_output_format"]=> - int(0) ["oid_output_format"]=> int(3) ["exceptions_enabled"]=> @@ -251,6 +243,6 @@ Warning: Undefined property: SNMP::$there is no such parameter in %s on line %d NULL bool(false) SNMP retrieval method must be a bitmask of SNMP_VALUE_LIBRARY, SNMP_VALUE_PLAIN, and SNMP_VALUE_OBJECT -SNMP output print format must be an SNMP_OID_OUTPUT_* constant +SNMP output print format must be a SNMP_OID_OUTPUT_* constant Cannot write read-only property SNMP::$info NULL From 04f08450e3f51a54b7e079af8a4509627b153e21 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 22 Aug 2026 08:23:27 +0800 Subject: [PATCH 20/23] Change the input value types for new functions and make default cases ZEND_UNREACHABLE() --- ext/snmp/snmp.c | 15 +++++---------- ext/snmp/snmp.stub.php | 12 ++++++------ ext/snmp/snmp_arginfo.h | 23 +++++++++++++++-------- ext/snmp/snmp_decl.h | 8 ++++---- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index b006b0091aa9..7acf9614d0d0 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1593,8 +1593,7 @@ PHP_FUNCTION(snmp_set_mib_option) snmp_opt = NETSNMP_DS_LIB_MIB_REPLACE; break; default: - zend_argument_value_error(1, "must be an SNMP_MIB_* constant"); - RETURN_THROWS(); + ZEND_UNREACHABLE(); } netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, snmp_opt, (int) val); } @@ -1621,8 +1620,7 @@ PHP_FUNCTION(snmp_set_string_output_format) snmp_format = NETSNMP_STRING_OUTPUT_HEX; break; default: - zend_argument_value_error(1, "must be a Snmp\\StringOutput:: constant"); - RETURN_THROWS(); + ZEND_UNREACHABLE(); } netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, snmp_format); } @@ -1666,8 +1664,7 @@ PHP_FUNCTION(snmp_set_output_option) snmp_opt = NETSNMP_DS_LIB_EXTENDED_INDEX; break; default: - zend_argument_value_error(1, "must be a Snmp\\Output:: constant"); - RETURN_THROWS(); + ZEND_UNREACHABLE(); } netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, snmp_opt, (int) val); } @@ -2004,8 +2001,7 @@ PHP_METHOD(SNMP, setOidOutputFormat) snmp_object->oid_output_format = NETSNMP_OID_OUTPUT_NONE; RETURN_TRUE; default: - zend_argument_value_error(1, "must be a Snmp\\OidOutput constant"); - RETURN_THROWS(); + ZEND_UNREACHABLE(); } } @@ -2035,8 +2031,7 @@ PHP_METHOD(SNMP, setStringOutputFormat) snmp_object->string_output_format = NETSNMP_STRING_OUTPUT_HEX; RETURN_TRUE; default: - zend_argument_value_error(1, "must be a Snmp\\StringOutput:: constant"); - RETURN_THROWS(); + ZEND_UNREACHABLE(); } } /* }}} */ diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index d1a1c9e4b1b6..713ba709fa57 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -134,13 +134,13 @@ function snmp_set_quick_print(bool $enable): true {} function snmp_set_enum_print(bool $enable): true {} - function snmp_set_mib_option(int $option, bool $enable): void {} + function snmp_set_mib_option(Snmp\Mib $option, bool $enable): void {} - function snmp_set_oid_output_format(int $format): true {} + function snmp_set_oid_output_format(Snmp\OidOutput|int $format): true {} - function snmp_set_output_option(int $option, bool $enable): void {} + function snmp_set_output_option(Snmp\Output $option, bool $enable): void {} - function snmp_set_string_output_format(int $format): void {} + function snmp_set_string_output_format(Snmp\StringOutput $format): void {} /** @alias snmp_set_oid_output_format */ function snmp_set_oid_numeric_print(int $format): true {} @@ -251,10 +251,10 @@ public function setSecurity( string $contextName = "", string $contextEngineId = ""): bool {} /** @tentative-return-type */ - public function setOidOutputFormat (int $format): bool {} + public function setOidOutputFormat (Snmp\OidOutput $format): bool {} /** @tentative-return-type */ - public function setStringOutputFormat (int $format): bool {} + public function setStringOutputFormat (Snmp\StringOutput $format): bool {} /** @tentative-return-type */ public function get(array|string $objectId, bool $preserveKeys = false): mixed {} diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index a9aa3ec51636..d978d056258c 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 234cfdb104e3ee1411008ded0567114d8282fee1 + * Stub hash: e7f1f52dc3302ee868fffed46f3b340ee78c28e8 * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) @@ -44,21 +44,26 @@ ZEND_END_ARG_INFO() #define arginfo_snmp_set_enum_print arginfo_snmp_set_quick_print ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_mib_option, 0, 2, IS_VOID, 0) - ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, option, Snmp\\Mib, 0) ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_oid_output_format, 0, 1, IS_TRUE, 0) - ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) + ZEND_ARG_OBJ_TYPE_MASK(0, format, Snmp\\OidOutput, MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() -#define arginfo_snmp_set_output_option arginfo_snmp_set_mib_option +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_output_option, 0, 2, IS_VOID, 0) + ZEND_ARG_OBJ_INFO(0, option, Snmp\\Output, 0) + ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_string_output_format, 0, 1, IS_VOID, 0) - ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, format, Snmp\\StringOutput, 0) ZEND_END_ARG_INFO() -#define arginfo_snmp_set_oid_numeric_print arginfo_snmp_set_oid_output_format +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_oid_numeric_print, 0, 1, IS_TRUE, 0) + ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) +ZEND_END_ARG_INFO() #define arginfo_snmp2_get arginfo_snmpget @@ -152,10 +157,12 @@ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SNMP_setSecurity ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SNMP_setOidOutputFormat, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, format, Snmp\\OidOutput, 0) ZEND_END_ARG_INFO() -#define arginfo_class_SNMP_setStringOutputFormat arginfo_class_SNMP_setOidOutputFormat +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SNMP_setStringOutputFormat, 0, 1, _IS_BOOL, 0) + ZEND_ARG_OBJ_INFO(0, format, Snmp\\StringOutput, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SNMP_get, 0, 1, IS_MIXED, 0) ZEND_ARG_TYPE_MASK(0, objectId, MAY_BE_ARRAY|MAY_BE_STRING, NULL) diff --git a/ext/snmp/snmp_decl.h b/ext/snmp/snmp_decl.h index 63ff47d876c8..6a4c82e2a4b2 100644 --- a/ext/snmp/snmp_decl.h +++ b/ext/snmp/snmp_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 234cfdb104e3ee1411008ded0567114d8282fee1 */ + * Stub hash: e7f1f52dc3302ee868fffed46f3b340ee78c28e8 */ -#ifndef ZEND_SNMP_DECL_234cfdb104e3ee1411008ded0567114d8282fee1_H -#define ZEND_SNMP_DECL_234cfdb104e3ee1411008ded0567114d8282fee1_H +#ifndef ZEND_SNMP_DECL_e7f1f52dc3302ee868fffed46f3b340ee78c28e8_H +#define ZEND_SNMP_DECL_e7f1f52dc3302ee868fffed46f3b340ee78c28e8_H typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_AllowUnderscores = 1, @@ -36,4 +36,4 @@ typedef enum zend_enum_Snmp_StringOutput { ZEND_ENUM_Snmp_StringOutput_Hex = 3, } zend_enum_Snmp_StringOutput; -#endif /* ZEND_SNMP_DECL_234cfdb104e3ee1411008ded0567114d8282fee1_H */ +#endif /* ZEND_SNMP_DECL_e7f1f52dc3302ee868fffed46f3b340ee78c28e8_H */ From fe59e605171e52f03ba8a10396e3bb8902c2ef28 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 22 Aug 2026 08:25:38 +0800 Subject: [PATCH 21/23] Update hashes --- ext/snmp/snmp_arginfo.h | 2 +- ext/snmp/snmp_decl.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index d978d056258c..095f364da85e 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: e7f1f52dc3302ee868fffed46f3b340ee78c28e8 + * Stub hash: 2ab2793ca81fb6ad44d48dea05d5f2ef429bb468 * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) diff --git a/ext/snmp/snmp_decl.h b/ext/snmp/snmp_decl.h index 6a4c82e2a4b2..009e041fe1b8 100644 --- a/ext/snmp/snmp_decl.h +++ b/ext/snmp/snmp_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: e7f1f52dc3302ee868fffed46f3b340ee78c28e8 */ + * Stub hash: 2ab2793ca81fb6ad44d48dea05d5f2ef429bb468 */ -#ifndef ZEND_SNMP_DECL_e7f1f52dc3302ee868fffed46f3b340ee78c28e8_H -#define ZEND_SNMP_DECL_e7f1f52dc3302ee868fffed46f3b340ee78c28e8_H +#ifndef ZEND_SNMP_DECL_2ab2793ca81fb6ad44d48dea05d5f2ef429bb468_H +#define ZEND_SNMP_DECL_2ab2793ca81fb6ad44d48dea05d5f2ef429bb468_H typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_AllowUnderscores = 1, @@ -36,4 +36,4 @@ typedef enum zend_enum_Snmp_StringOutput { ZEND_ENUM_Snmp_StringOutput_Hex = 3, } zend_enum_Snmp_StringOutput; -#endif /* ZEND_SNMP_DECL_e7f1f52dc3302ee868fffed46f3b340ee78c28e8_H */ +#endif /* ZEND_SNMP_DECL_2ab2793ca81fb6ad44d48dea05d5f2ef429bb468_H */ From 3af0691a90b589ec80c730af3fb8dedd5d145920 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 22 Aug 2026 08:40:48 +0800 Subject: [PATCH 22/23] Fix incorrect merge during rebase --- ext/snmp/snmp.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 7acf9614d0d0..da77fee061bd 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -2485,16 +2485,6 @@ PHP_MSHUTDOWN_FUNCTION(snmp) } /* }}} */ -<<<<<<< HEAD -/* {{{ PHP_RSHUTDOWN_FUNCTION */ -static PHP_RSHUTDOWN_FUNCTION(snmp) -{ - if (mib_needs_reset) { - shutdown_mib(); - netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIBDIRS, NULL); - init_mib(); - } -======= /* {{{ PHP_INIT_FUNCTION */ static PHP_RINIT_FUNCTION(snmp) { @@ -2513,6 +2503,12 @@ static PHP_RINIT_FUNCTION(snmp) /* {{{ PHP_RSHUTDOWN_FUNCTION */ static PHP_RSHUTDOWN_FUNCTION(snmp) { + if (mib_needs_reset) { + shutdown_mib(); + netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIBDIRS, NULL); + init_mib(); + } + // Restore the output options set_snmplib_output_options(&saved_snmp_settings); @@ -2520,7 +2516,6 @@ static PHP_RSHUTDOWN_FUNCTION(snmp) netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_PARSE_LABEL, saved_mib_allow_underscores); netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_COMMENT_TERM, saved_mib_comment_term); netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_REPLACE, saved_mib_replace); ->>>>>>> 3af51eda7e1 (Add functions to control more SNMP library output options (#21502)) return SUCCESS; } @@ -2552,11 +2547,7 @@ zend_module_entry snmp_module_entry = { ext_functions, PHP_MINIT(snmp), PHP_MSHUTDOWN(snmp), -<<<<<<< HEAD - NULL, -======= PHP_RINIT(snmp), ->>>>>>> 3af51eda7e1 (Add functions to control more SNMP library output options (#21502)) PHP_RSHUTDOWN(snmp), PHP_MINFO(snmp), PHP_SNMP_VERSION, From 4eb561783f8e7f1c3360795db2baf1e728f03e33 Mon Sep 17 00:00:00 2001 From: Steve Wilton Date: Sat, 22 Aug 2026 09:20:50 +0800 Subject: [PATCH 23/23] Fix argument option for snmp_set_oid_numeric_print --- ext/snmp/snmp.stub.php | 2 +- ext/snmp/snmp_arginfo.h | 6 ++---- ext/snmp/snmp_decl.h | 8 ++++---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index 713ba709fa57..22905908c692 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -143,7 +143,7 @@ function snmp_set_output_option(Snmp\Output $option, bool $enable): void {} function snmp_set_string_output_format(Snmp\StringOutput $format): void {} /** @alias snmp_set_oid_output_format */ - function snmp_set_oid_numeric_print(int $format): true {} + function snmp_set_oid_numeric_print(Snmp\OidOutput|int $format): true {} function snmp2_get(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): mixed {} diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index 095f364da85e..b044c8fd5eb7 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 2ab2793ca81fb6ad44d48dea05d5f2ef429bb468 + * Stub hash: c2fd4b6c2ed2308b50f70cbfbc41dcd106f11e41 * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) @@ -61,9 +61,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_string_output_format, 0 ZEND_ARG_OBJ_INFO(0, format, Snmp\\StringOutput, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_set_oid_numeric_print, 0, 1, IS_TRUE, 0) - ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) -ZEND_END_ARG_INFO() +#define arginfo_snmp_set_oid_numeric_print arginfo_snmp_set_oid_output_format #define arginfo_snmp2_get arginfo_snmpget diff --git a/ext/snmp/snmp_decl.h b/ext/snmp/snmp_decl.h index 009e041fe1b8..16b14026e677 100644 --- a/ext/snmp/snmp_decl.h +++ b/ext/snmp/snmp_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 2ab2793ca81fb6ad44d48dea05d5f2ef429bb468 */ + * Stub hash: c2fd4b6c2ed2308b50f70cbfbc41dcd106f11e41 */ -#ifndef ZEND_SNMP_DECL_2ab2793ca81fb6ad44d48dea05d5f2ef429bb468_H -#define ZEND_SNMP_DECL_2ab2793ca81fb6ad44d48dea05d5f2ef429bb468_H +#ifndef ZEND_SNMP_DECL_c2fd4b6c2ed2308b50f70cbfbc41dcd106f11e41_H +#define ZEND_SNMP_DECL_c2fd4b6c2ed2308b50f70cbfbc41dcd106f11e41_H typedef enum zend_enum_Snmp_Mib { ZEND_ENUM_Snmp_Mib_AllowUnderscores = 1, @@ -36,4 +36,4 @@ typedef enum zend_enum_Snmp_StringOutput { ZEND_ENUM_Snmp_StringOutput_Hex = 3, } zend_enum_Snmp_StringOutput; -#endif /* ZEND_SNMP_DECL_2ab2793ca81fb6ad44d48dea05d5f2ef429bb468_H */ +#endif /* ZEND_SNMP_DECL_c2fd4b6c2ed2308b50f70cbfbc41dcd106f11e41_H */