]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-snmp.c
Add CAP_FCNTL and use cap_fcntls_limit().
[tcpdump] / print-snmp.c
index ba326018c28f176f297c2f18404be68a1ebc466b..f5501582ba7a3b8aec3455ec7f55a4857ab013fd 100644 (file)
@@ -66,7 +66,7 @@
 #include <stdio.h>
 #include <string.h>
 
-#ifdef HAVE_SMI_H
+#ifdef USE_LIBSMI
 #include <smi.h>
 #endif
 
@@ -323,15 +323,15 @@ static const struct obj_abrev {
  * temporary internal representation while decoding an ASN.1 data stream.
  */
 struct be {
-       u_int32_t asnlen;
+       uint32_t asnlen;
        union {
                caddr_t raw;
                int32_t integer;
-               u_int32_t uns;
+               uint32_t uns;
                const u_char *str;
                struct {
-                       u_int32_t high;
-                       u_int32_t low;
+                       uint32_t high;
+                       uint32_t low;
                } uns64;
        } data;
        u_short id;
@@ -472,7 +472,7 @@ asn1_parse(netdissect_options *ndo,
        elem->asnlen = *p;
        p++; len--; hdr++;
        if (elem->asnlen & ASN_BIT8) {
-               u_int32_t noct = elem->asnlen % ASN_BIT8;
+               uint32_t noct = elem->asnlen % ASN_BIT8;
                elem->asnlen = 0;
                if (len < noct) {
                        ND_PRINT((ndo, "[asnlen? %d<%d]", len, noct));
@@ -551,7 +551,7 @@ asn1_parse(netdissect_options *ndo,
                        case COUNTER:
                        case GAUGE:
                        case TIMETICKS: {
-                               register u_int32_t data;
+                               register uint32_t data;
                                ND_TCHECK2(*p, elem->asnlen);
                                elem->type = BE_UNS;
                                data = 0;
@@ -562,7 +562,7 @@ asn1_parse(netdissect_options *ndo,
                        }
 
                        case COUNTER64: {
-                               register u_int32_t high, low;
+                               register uint32_t high, low;
                                ND_TCHECK2(*p, elem->asnlen);
                                elem->type = BE_UNS64;
                                high = 0, low = 0;
@@ -662,8 +662,8 @@ asn1_print(netdissect_options *ndo,
            struct be *elem)
 {
        u_char *p = (u_char *)elem->data.raw;
-       u_int32_t asnlen = elem->asnlen;
-       u_int32_t i;
+       uint32_t asnlen = elem->asnlen;
+       uint32_t i;
 
        switch (elem->type) {
 
@@ -867,7 +867,7 @@ asn1_decode(u_char *p, u_int length)
 }
 #endif
 
-#ifdef LIBSMI
+#ifdef USE_LIBSMI
 
 struct smi2be {
     SmiBasetype basetype;
@@ -896,8 +896,9 @@ smi_decode_oid(netdissect_options *ndo,
                unsigned int oidsize, unsigned int *oidlen)
 {
        u_char *p = (u_char *)elem->data.raw;
-       u_int32_t asnlen = elem->asnlen;
+       uint32_t asnlen = elem->asnlen;
        int o = 0, first = -1, i = asnlen;
+       unsigned int firstval;
 
        for (*oidlen = 0; ndo->ndo_sflag && i-- > 0; p++) {
                ND_TCHECK(*p);
@@ -911,12 +912,12 @@ smi_decode_oid(netdissect_options *ndo,
                 */
                if (first < 0) {
                        first = 0;
+                       firstval = o / OIDMUX;
+                       if (firstval > 2) firstval = 2;
+                       o -= firstval * OIDMUX;
                        if (*oidlen < oidsize) {
-                           oid[*oidlen] = o / OIDMUX;
-                           if (oid[*oidlen] > 2) oid[*oidlen] = 2;
+                           oid[(*oidlen)++] = firstval;
                        }
-                       o -= oid[*oidlen] * OIDMUX;
-                       if (*oidlen < oidsize) (*oidlen)++;
                }
                if (*oidlen < oidsize) {
                        oid[(*oidlen)++] = o;
@@ -1199,7 +1200,7 @@ varbind_print(netdissect_options *ndo,
 {
        struct be elem;
        int count = 0, ind;
-#ifdef LIBSMI
+#ifdef USE_LIBSMI
        SmiNode *smiNode = NULL;
 #endif
        int status;
@@ -1246,7 +1247,7 @@ varbind_print(netdissect_options *ndo,
                        asn1_print(ndo, &elem);
                        return;
                }
-#ifdef LIBSMI
+#ifdef USE_LIBSMI
                smiNode = smi_print_variable(ndo, &elem, &status);
 #else
                status = asn1_print(ndo, &elem);
@@ -1272,7 +1273,7 @@ varbind_print(netdissect_options *ndo,
                        }
                } else {
                        if (elem.type != BE_NULL) {
-#ifdef LIBSMI
+#ifdef USE_LIBSMI
                                status = smi_print_value(ndo, smiNode, pduid, &elem);
 #else
                                status = asn1_print(ndo, &elem);