Skip to content

Commit 0d16411

Browse files
author
foobar
committed
- Fixed bug #37164 (snmp_set_oid_numeric_print() misbehaves)
. Renamed the function to snmp_set_oid_output_format() which describes it's behaviour better. Old one was left as an alias for it. . Added 2 new constants: SNMP_OID_OUTPUT_FULL and SNMP_OID_OUTPUT_NUMERIC - Fixed some memleaks # Included some ws fixes to annoy Derick. :)
1 parent feaeb45 commit 0d16411

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

ext/snmp/snmp.c

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ zend_function_entry snmp_functions[] = {
124124
PHP_FE(snmp_set_quick_print, NULL)
125125
#ifdef HAVE_NET_SNMP
126126
PHP_FE(snmp_set_enum_print, NULL)
127-
PHP_FE(snmp_set_oid_numeric_print, NULL)
127+
PHP_FE(snmp_set_oid_output_format, NULL)
128+
PHP_FALIAS(snmp_set_oid_numeric_print, snmp_set_oid_output_format, NULL)
128129
#endif
129130
PHP_FE(snmpset, NULL)
130131

@@ -198,6 +199,11 @@ PHP_MINIT_FUNCTION(snmp)
198199
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PERSIST_STATE, 1);
199200
#endif
200201

202+
#ifdef HAVE_NET_SNMP
203+
REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_FULL", NETSNMP_OID_OUTPUT_FULL, CONST_CS | CONST_PERSISTENT);
204+
REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC", NETSNMP_OID_OUTPUT_NUMERIC, CONST_CS | CONST_PERSISTENT);
205+
#endif
206+
201207
REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY", SNMP_VALUE_LIBRARY, CONST_CS | CONST_PERSISTENT);
202208
REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN", SNMP_VALUE_PLAIN, CONST_CS | CONST_PERSISTENT);
203209
REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT", SNMP_VALUE_OBJECT, CONST_CS | CONST_PERSISTENT);
@@ -432,13 +438,13 @@ static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st,
432438
RETURN_FALSE;
433439
}
434440
} else if (st >= SNMP_CMD_WALK) {
435-
if (session->version == SNMP_VERSION_1) {
441+
if (session->version == SNMP_VERSION_1) {
436442
pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
437443
} else {
438444
pdu = snmp_pdu_create(SNMP_MSG_GETBULK);
439445
pdu->non_repeaters = 0;
440446
pdu->max_repetitions = 20;
441-
}
447+
}
442448
snmp_add_null_var(pdu, name, name_length);
443449
}
444450

@@ -522,6 +528,9 @@ static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st,
522528
}
523529
}
524530
snmp_close(ss);
531+
if (st == SNMP_CMD_WALK || st == SNMP_CMD_REALWALK) {
532+
zval_dtor(return_value);
533+
}
525534
RETURN_FALSE;
526535
}
527536
}
@@ -731,21 +740,30 @@ PHP_FUNCTION(snmp_set_enum_print)
731740
}
732741
/* }}} */
733742

734-
/* {{{ proto void snmp_set_oid_numeric_print(int oid_numeric_print)
735-
Return all objects including their respective object id withing the specified one */
736-
PHP_FUNCTION(snmp_set_oid_numeric_print)
743+
/* {{{ proto void snmp_set_oid_output_format(int oid_format)
744+
Set the OID output format. */
745+
PHP_FUNCTION(snmp_set_oid_output_format)
737746
{
738747
int argc = ZEND_NUM_ARGS();
739748
long a1;
740749

741750
if (zend_parse_parameters(argc TSRMLS_CC, "l", &a1) == FAILURE) {
742751
return;
743752
}
744-
if ((int) a1 != 0) {
745-
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,
746-
NETSNMP_DS_LIB_OID_OUTPUT_FORMAT,
747-
NETSNMP_OID_OUTPUT_NUMERIC);
753+
754+
switch ((int) a1) {
755+
case 0:
756+
case NETSNMP_OID_OUTPUT_FULL:
757+
a1 = NETSNMP_OID_OUTPUT_FULL;
758+
break;
759+
760+
default:
761+
case NETSNMP_OID_OUTPUT_NUMERIC:
762+
a1 = NETSNMP_OID_OUTPUT_NUMERIC;
763+
break;
748764
}
765+
766+
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, a1);
749767
}
750768
/* }}} */
751769
#endif

0 commit comments

Comments
 (0)