[oe] [PATCH][meta-networking] net-snmp: fix for Security Advisory - CVE-2014-3565
Joe MacDonald
Joe_MacDonald at mentor.com
Tue Nov 4 21:25:03 UTC 2014
Merged, thanks.
-J.
[[oe] [PATCH][meta-networking] net-snmp: fix for Security Advisory - CVE-2014-3565] On 14.11.04 (Tue 14:09) rongqing.li at windriver.com wrote:
> From: Roy Li <rongqing.li at windriver.com>
>
> snmplib/mib.c in net-snmp 5.7.0 and earlier, when the -OQ option is used,
> allows remote attackers to cause a denial of service (snmptrapd crash) via
> a crafted SNMP trap message, which triggers a conversion to the variable
> type designated in the MIB file, as demonstrated by a NULL type in an ifMtu
> trap message.
>
> http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-3565
>
> Signed-off-by: Roy Li <rongqing.li at windriver.com>
> ---
> ...s-for-printing-variables-with-wrong-types.patch | 455 ++++++++++++++++++++
> .../recipes-protocols/net-snmp/net-snmp_5.7.2.1.bb | 1 +
> 2 files changed, 456 insertions(+)
> create mode 100644 meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Added-checks-for-printing-variables-with-wrong-types.patch
>
> diff --git a/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Added-checks-for-printing-variables-with-wrong-types.patch b/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Added-checks-for-printing-variables-with-wrong-types.patch
> new file mode 100644
> index 0000000..30374cf
> --- /dev/null
> +++ b/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Added-checks-for-printing-variables-with-wrong-types.patch
> @@ -0,0 +1,455 @@
> +From 7f4a7b891332899cea26e95be0337aae01648742 Mon Sep 17 00:00:00 2001
> +From: Jan Safranek <jsafranek at users.sourceforge.net>
> +Date: Thu, 31 Jul 2014 13:46:49 +0200
> +Subject: [PATCH] Added checks for printing variables with wrong types.
> +
> +Upstream-Status: Backport
> +
> +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).
> +
> +Signed-off-by: Jan Safranek <jsafranek at users.sourceforge.net>
> +---
> + snmplib/mib.c | 270 ++++++++++++++++++++++++++++-----------------------------
> + 1 file changed, 135 insertions(+), 135 deletions(-)
> +
> +diff --git a/snmplib/mib.c b/snmplib/mib.c
> +index 9d3ca41..c6e0010 100644
> +--- a/snmplib/mib.c
> ++++ b/snmplib/mib.c
> +@@ -439,17 +439,16 @@ sprint_realloc_octet_string(u_char ** buf, size_t * buf_len,
> + 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;
> +- }
> + }
> +
> +
> +@@ -702,16 +701,16 @@ sprint_realloc_float(u_char ** buf, size_t * buf_len,
> + 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)) {
> +@@ -772,17 +771,16 @@ sprint_realloc_double(u_char ** buf, size_t * buf_len,
> + 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)) {
> +@@ -847,20 +845,21 @@ sprint_realloc_counter64(u_char ** buf, size_t * buf_len, size_t * out_len,
> + {
> + 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)) {
> +@@ -948,23 +947,25 @@ sprint_realloc_opaque(u_char ** buf, size_t * buf_len,
> + 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:
> +@@ -1040,17 +1041,16 @@ sprint_realloc_object_identifier(u_char ** buf, size_t * buf_len,
> + {
> + 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)) {
> +@@ -1110,16 +1110,16 @@ sprint_realloc_timeticks(u_char ** buf, size_t * buf_len, size_t * out_len,
> + {
> + 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)) {
> +@@ -1277,17 +1277,18 @@ sprint_realloc_integer(u_char ** buf, size_t * buf_len, size_t * out_len,
> + {
> + 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;
> +@@ -1380,16 +1381,16 @@ sprint_realloc_uinteger(u_char ** buf, size_t * buf_len, size_t * out_len,
> + {
> + 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) {
> +@@ -1477,17 +1478,16 @@ sprint_realloc_gauge(u_char ** buf, size_t * buf_len, size_t * out_len,
> + {
> + 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)) {
> +@@ -1550,16 +1550,16 @@ sprint_realloc_counter(u_char ** buf, size_t * buf_len, size_t * out_len,
> + {
> + 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)) {
> +@@ -1613,16 +1613,16 @@ sprint_realloc_networkaddress(u_char ** buf, size_t * buf_len,
> + {
> + 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)) {
> +@@ -1679,16 +1679,16 @@ sprint_realloc_ipaddress(u_char ** buf, size_t * buf_len, size_t * out_len,
> + {
> + 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)) {
> +@@ -1737,20 +1737,20 @@ sprint_realloc_null(u_char ** buf, size_t * buf_len, size_t * out_len,
> + 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);
> + }
> +
> +
> +@@ -1785,16 +1785,16 @@ sprint_realloc_bitstring(u_char ** buf, size_t * buf_len, size_t * out_len,
> + 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)) {
> +@@ -1869,16 +1869,16 @@ sprint_realloc_nsapaddress(u_char ** buf, size_t * buf_len,
> + 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)) {
> +--
> +1.7.10.4
> +
> diff --git a/meta-networking/recipes-protocols/net-snmp/net-snmp_5.7.2.1.bb b/meta-networking/recipes-protocols/net-snmp/net-snmp_5.7.2.1.bb
> index 9012615..82ce4db 100644
> --- a/meta-networking/recipes-protocols/net-snmp/net-snmp_5.7.2.1.bb
> +++ b/meta-networking/recipes-protocols/net-snmp/net-snmp_5.7.2.1.bb
> @@ -7,6 +7,7 @@ LIC_FILES_CHKSUM = "file://README;beginline=3;endline=8;md5=7f7f00ba639ac8e8deb5
> DEPENDS = "openssl libnl pciutils"
>
> SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.zip \
> + file://0001-Added-checks-for-printing-variables-with-wrong-types.patch \
> file://init \
> file://snmpd.conf \
> file://snmptrapd.conf \
> --
> 1.7.10.4
>
--
-Joe MacDonald.
:wq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-devel/attachments/20141104/39a63a77/attachment-0002.sig>
More information about the Openembedded-devel
mailing list