Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:13.2
net-snmp
net-snmp-5.7.2-fix-snmptrapd-remote-denial-of-s...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File net-snmp-5.7.2-fix-snmptrapd-remote-denial-of-service.patch of Package net-snmp
commit 7f4a7b891332899cea26e95be0337aae01648742 Author: Jan Safranek <jsafranek@users.sourceforge.net> Date: Thu Jul 31 13:46:49 2014 +0200 Added checks for printing variables with wrong types. When -OQ command line argument is used, variable formatter preffers the type of the varible parsed from a MIB file instead of checking type of the variable as parsed from SNMP message. This can lead to crashes when incoming packets contains a variable with NULL type, while the MIB says the variable should be non-NULL, like Integer. The formatter then tries to interpret the NULL (from packet) as Integer (from MIB file). Index: net-snmp-5.7.3.pre5/snmplib/mib.c =================================================================== --- net-snmp-5.7.3.pre5.orig/snmplib/mib.c +++ net-snmp-5.7.3.pre5/snmplib/mib.c @@ -464,17 +464,16 @@ sprint_realloc_octet_string(u_char ** bu u_char *cp; int output_format, cnt; - if ((var->type != ASN_OCTET_STR) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - const char str[] = "Wrong Type (should be OCTET STRING): "; - if (snmp_cstrcat - (buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_OCTET_STR) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + const char str[] = "Wrong Type (should be OCTET STRING): "; + if (!snmp_cstrcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } @@ -742,16 +741,16 @@ sprint_realloc_float(u_char ** buf, size const struct enum_list *enums, const char *hint, const char *units) { - if ((var->type != ASN_OPAQUE_FLOAT) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - if (snmp_cstrcat(buf, buf_len, out_len, allow_realloc, - "Wrong Type (should be Float): ")) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_OPAQUE_FLOAT) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be Float): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -812,17 +811,16 @@ sprint_realloc_double(u_char ** buf, siz const struct enum_list *enums, const char *hint, const char *units) { - if ((var->type != ASN_OPAQUE_DOUBLE) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - if (snmp_cstrcat - (buf, buf_len, out_len, allow_realloc, - "Wrong Type (should be Double): ")) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_OPAQUE_DOUBLE) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be Double): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -887,20 +885,21 @@ sprint_realloc_counter64(u_char ** buf, { char a64buf[I64CHARSZ + 1]; - if ((var->type != ASN_COUNTER64 + if (var->type != ASN_COUNTER64 #ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES && var->type != ASN_OPAQUE_COUNTER64 && var->type != ASN_OPAQUE_I64 && var->type != ASN_OPAQUE_U64 #endif - ) && (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - if (snmp_cstrcat(buf, buf_len, out_len, allow_realloc, - "Wrong Type (should be Counter64): ")) { - return sprint_realloc_by_type(buf, buf_len, out_len, + ) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be Counter64): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -988,23 +987,25 @@ sprint_realloc_opaque(u_char ** buf, siz const struct enum_list *enums, const char *hint, const char *units) { - if ((var->type != ASN_OPAQUE + if (var->type != ASN_OPAQUE #ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES && var->type != ASN_OPAQUE_COUNTER64 && var->type != ASN_OPAQUE_U64 && var->type != ASN_OPAQUE_I64 && var->type != ASN_OPAQUE_FLOAT && var->type != ASN_OPAQUE_DOUBLE #endif /* NETSNMP_WITH_OPAQUE_SPECIAL_TYPES */ - ) && (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - if (snmp_cstrcat(buf, buf_len, out_len, allow_realloc, - "Wrong Type (should be Opaque): ")) { - return sprint_realloc_by_type(buf, buf_len, out_len, + ) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be Opaque): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } + #ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES switch (var->type) { case ASN_OPAQUE_COUNTER64: @@ -1080,17 +1081,16 @@ sprint_realloc_object_identifier(u_char { int buf_overflow = 0; - if ((var->type != ASN_OBJECT_ID) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = - "Wrong Type (should be OBJECT IDENTIFIER): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_OBJECT_ID) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be OBJECT IDENTIFIER): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -1150,16 +1150,16 @@ sprint_realloc_timeticks(u_char ** buf, { char timebuf[40]; - if ((var->type != ASN_TIMETICKS) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be Timeticks): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_TIMETICKS) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be Timeticks): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS)) { @@ -1317,17 +1317,18 @@ sprint_realloc_integer(u_char ** buf, si { char *enum_string = NULL; - if ((var->type != ASN_INTEGER) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be INTEGER): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_INTEGER) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be INTEGER): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } + for (; enums; enums = enums->next) { if (enums->value == *var->val.integer) { enum_string = enums->label; @@ -1420,16 +1421,16 @@ sprint_realloc_uinteger(u_char ** buf, s { char *enum_string = NULL; - if ((var->type != ASN_UINTEGER) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be UInteger32): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_UINTEGER) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be UInteger32): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } for (; enums; enums = enums->next) { @@ -1517,17 +1518,16 @@ sprint_realloc_gauge(u_char ** buf, size { char tmp[32]; - if ((var->type != ASN_GAUGE) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = - "Wrong Type (should be Gauge32 or Unsigned32): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_GAUGE) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be Gauge32 or Unsigned32): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -1590,16 +1590,16 @@ sprint_realloc_counter(u_char ** buf, si { char tmp[32]; - if ((var->type != ASN_COUNTER) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be Counter32): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_COUNTER) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be Counter32): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -1653,16 +1653,16 @@ sprint_realloc_networkaddress(u_char ** { size_t i; - if ((var->type != ASN_IPADDRESS) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be NetworkAddress): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_IPADDRESS) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be NetworkAddress): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -1719,16 +1719,16 @@ sprint_realloc_ipaddress(u_char ** buf, { u_char *ip = var->val.string; - if ((var->type != ASN_IPADDRESS) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be IpAddress): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_IPADDRESS) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be IpAddress): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -1777,20 +1777,20 @@ sprint_realloc_null(u_char ** buf, size_ const struct enum_list *enums, const char *hint, const char *units) { - if ((var->type != ASN_NULL) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be NULL): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_NULL) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be NULL): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } - } else { - u_char str[] = "NULL"; - return snmp_strcat(buf, buf_len, out_len, allow_realloc, str); } + + u_char str[] = "NULL"; + return snmp_strcat(buf, buf_len, out_len, allow_realloc, str); } @@ -1825,16 +1825,16 @@ sprint_realloc_bitstring(u_char ** buf, u_char *cp; char *enum_string; - if ((var->type != ASN_BIT_STR && var->type != ASN_OCTET_STR) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be BITS): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_BIT_STR && var->type != ASN_OCTET_STR) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be BITS): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) { @@ -1909,16 +1909,16 @@ sprint_realloc_nsapaddress(u_char ** buf const struct enum_list *enums, const char *hint, const char *units) { - if ((var->type != ASN_NSAP) && - (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT))) { - u_char str[] = "Wrong Type (should be NsapAddress): "; - if (snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) { - return sprint_realloc_by_type(buf, buf_len, out_len, + if (var->type != ASN_NSAP) { + if (!netsnmp_ds_get_boolean( + NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICKE_PRINT)) { + u_char str[] = "Wrong Type (should be NsapAddress): "; + if (!snmp_strcat(buf, buf_len, out_len, allow_realloc, str)) + return 0; + } + return sprint_realloc_by_type(buf, buf_len, out_len, allow_realloc, var, NULL, NULL, NULL); - } else { - return 0; - } } if (!netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT)) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor