X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/1ed63b5d0630a4b5b4a8d31174d9f3e95a970913..296d466cd6bbf2f7e75e15bb6a01268e88c76ed0:/print-snmp.c diff --git a/print-snmp.c b/print-snmp.c index 6058294b..76f0bbac 100644 --- a/print-snmp.c +++ b/print-snmp.c @@ -58,19 +58,20 @@ /* \summary: Simple Network Management Protocol (SNMP) printer */ -#ifdef HAVE_CONFIG_H #include -#endif #include "netdissect-stdinc.h" #include #include +#include #ifdef USE_LIBSMI #include #endif +#include "netdissect-ctype.h" + #include "netdissect.h" #include "extract.h" @@ -428,7 +429,6 @@ asn1_parse(netdissect_options *ndo, ND_PRINT("[nothing to parse]"); return -1; } - ND_TCHECK_1(p); /* * it would be nice to use a bit field, but you can't depend on them. @@ -463,7 +463,6 @@ asn1_parse(netdissect_options *ndo, * that won't fit in 32 bits. */ id = 0; - ND_TCHECK_1(p); while (GET_U_1(p) & ASN_BIT8) { if (len < 1) { ND_PRINT("[Xtagfield?]"); @@ -473,13 +472,11 @@ asn1_parse(netdissect_options *ndo, len--; hdr++; p++; - ND_TCHECK_1(p); } if (len < 1) { ND_PRINT("[Xtagfield?]"); return -1; } - ND_TCHECK_1(p); elem->id = id = (id << 7) | GET_U_1(p); --len; ++hdr; @@ -489,7 +486,6 @@ asn1_parse(netdissect_options *ndo, ND_PRINT("[no asnlen]"); return -1; } - ND_TCHECK_1(p); elem->asnlen = GET_U_1(p); p++; len--; hdr++; if (elem->asnlen & ASN_BIT8) { @@ -534,7 +530,7 @@ asn1_parse(netdissect_options *ndo, break; case INTEGER: { - int32_t data; + uint32_t data; elem->type = BE_INT; data = 0; @@ -543,7 +539,7 @@ asn1_parse(netdissect_options *ndo, return -1; } if (GET_U_1(p) & ASN_BIT8) /* negative */ - data = -1; + data = UINT_MAX; for (i = elem->asnlen; i != 0; p++, i--) data = (data << ASN_SHIFT8) | GET_U_1(p); elem->data.integer = data; @@ -700,7 +696,7 @@ asn1_print_string(netdissect_options *ndo, struct be *elem) p = elem->data.str; ND_TCHECK_LEN(p, asnlen); for (i = asnlen; printable && i != 0; p++, i--) - printable = ND_ISPRINT(GET_U_1(p)); + printable = ND_ASCII_ISPRINT(GET_U_1(p)); p = elem->data.str; if (printable) { ND_PRINT("\""); @@ -746,7 +742,8 @@ asn1_print(netdissect_options *ndo, break; case BE_OID: { - int o = 0, first = -1; + int first = -1; + uint32_t o = 0; p = (const u_char *)elem->data.raw; i = asnlen; @@ -769,7 +766,6 @@ asn1_print(netdissect_options *ndo, } for (; i != 0; p++, i--) { - ND_TCHECK_1(p); o = (o << ASN_SHIFT7) + (GET_U_1(p) & ~ASN_BIT8); if (GET_U_1(p) & ASN_LONGLEN) continue; @@ -922,7 +918,6 @@ smi_decode_oid(netdissect_options *ndo, unsigned int firstval; for (*oidlen = 0; i != 0; p++, i--) { - ND_TCHECK_1(p); o = (o << ASN_SHIFT7) + (GET_U_1(p) & ~ASN_BIT8); if (GET_U_1(p) & ASN_LONGLEN) continue; @@ -946,10 +941,6 @@ smi_decode_oid(netdissect_options *ndo, o = 0; } return 0; - -trunc: - nd_print_trunc(ndo); - return -1; } static int smi_check_type(SmiBasetype basetype, int be) @@ -1097,7 +1088,7 @@ smi_print_value(netdissect_options *ndo, } if (NOTIFY_CLASS(pduid) && smiNode->access < SMI_ACCESS_NOTIFY) { - ND_PRINT("[notNotifyable]"); + ND_PRINT("[notNotifiable]"); } if (READ_CLASS(pduid) && smiNode->access < SMI_ACCESS_READ_ONLY) { @@ -1226,7 +1217,7 @@ varbind_print(netdissect_options *ndo, u_short pduid, const u_char *np, u_int length) { struct be elem; - int count = 0, ind; + int count = 0; #ifdef USE_LIBSMI SmiNode *smiNode = NULL; #endif @@ -1246,7 +1237,7 @@ varbind_print(netdissect_options *ndo, length = elem.asnlen; np = (const u_char *)elem.data.raw; - for (ind = 1; length > 0; ind++) { + while (length) { const u_char *vbend; u_int vblength; @@ -1389,7 +1380,6 @@ snmppdu_print(netdissect_options *ndo, np += count; varbind_print(ndo, pduid, np, length); - return; } /* @@ -1480,7 +1470,6 @@ trappdu_print(netdissect_options *ndo, np += count; varbind_print(ndo, TRAP, np, length); - return; } /*