]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-isakmp.c
CHANGES: Add/move change(s) backported to 4.99
[tcpdump] / print-isakmp.c
index 9a66274882a2da9555c4e3a5b82b70b02dea454b..6a978ad0c7e0efc26225058ee300326611b6c028 100644 (file)
 
 /* specification: RFC 2407, RFC 2408, RFC 5996 */
 
-#ifdef HAVE_CONFIG_H
 #include <config.h>
-#endif
-
-/* The functions from print-esp.c used in this file are only defined when both
- * OpenSSL and evp.h are detected. Employ the same preprocessor device here.
- */
-#ifndef HAVE_OPENSSL_EVP_H
-#undef HAVE_LIBCRYPTO
-#endif
 
 #include "netdissect-stdinc.h"
 
@@ -122,9 +113,9 @@ struct isakmp {
 #define ISAKMP_FLAG_extra 0x04
 
 /* IKEv2 */
-#define ISAKMP_FLAG_I (1 << 3)  /* (I)nitiator */
-#define ISAKMP_FLAG_V (1 << 4)  /* (V)ersion   */
-#define ISAKMP_FLAG_R (1 << 5)  /* (R)esponse  */
+#define ISAKMP_FLAG_I (1 << 3)  /* Initiator */
+#define ISAKMP_FLAG_V (1 << 4)  /* Version   */
+#define ISAKMP_FLAG_R (1 << 5)  /* Response  */
 
 
 /* 3.2 Payload Generic Header
@@ -243,7 +234,7 @@ struct ikev1_pl_cr {
        Certificate Types (variable length)
          -- Contains a list of the types of certificates requested,
          sorted in order of preference.  Each individual certificate
-         type is 1 octet.  This field is NOT requiredo
+         type is 1 octet.  This field is NOT required.
        */
        /* # Certificate Authorities (1 octet) */
        /* Certificate Authorities (variable length) */
@@ -741,10 +732,10 @@ static const char *etypestr[] = {
                ? npfunc[(x)] : NULL)
 
 static int
-iszero(const u_char *p, size_t l)
+iszero(netdissect_options *ndo, const u_char *p, size_t l)
 {
        while (l != 0) {
-               if (*p)
+               if (GET_U_1(p))
                        return 0;
                p++;
                l--;
@@ -1828,14 +1819,16 @@ ikev1_d_print(netdissect_options *ndo, u_char tpay _U_,
        ND_PRINT(" spilen=%u", spi_size);
        num_spi = GET_BE_U_2(p->num_spi);
        ND_PRINT(" nspi=%u", num_spi);
-       ND_PRINT(" spi=");
        q = (const uint8_t *)(p + 1);
-       for (i = 0; i < num_spi; i++) {
-               if (i != 0)
-                       ND_PRINT(",");
-               if (!rawprint(ndo, (const uint8_t *)q, spi_size))
-                       goto trunc;
-               q += spi_size;
+       if (spi_size) {
+               ND_PRINT(" spi=");
+               for (i = 0; i < num_spi; i++) {
+                       if (i != 0)
+                               ND_PRINT(",");
+                       if (!rawprint(ndo, (const uint8_t *)q, spi_size))
+                               goto trunc;
+                       q += spi_size;
+               }
        }
        return q;
 trunc:
@@ -2309,7 +2302,7 @@ ikev2_auth_print(netdissect_options *ndo, u_char tpay,
        const struct ikev2_auth *p;
        const char *v2_auth[]={ "invalid", "rsasig",
                                "shared-secret", "dsssig" };
-       const u_char *authdata = (const u_char*)ext + sizeof(struct ikev2_auth);
+       const u_char *authdata = (const u_char *)ext + sizeof(struct ikev2_auth);
 
        ND_TCHECK_LEN(ext, sizeof(struct ikev2_auth));
        p = (const struct ikev2_auth *)ext;
@@ -2841,7 +2834,7 @@ ikev1_print(netdissect_options *ndo,
 
        i = cookie_find(&base->i_ck);
        if (i < 0) {
-               if (iszero((const u_char *)&base->r_ck, sizeof(base->r_ck))) {
+               if (iszero(ndo, base->r_ck, sizeof(base->r_ck))) {
                        /* the first packet */
                        ND_PRINT(" I");
                        if (bp2)
@@ -3111,7 +3104,6 @@ isakmp_rfc3948_print(netdissect_options *ndo,
        if(length < 4) {
                goto trunc;
        }
-       ND_TCHECK_1(bp + 3);
 
        /*
         * see if this is an IKE packet
@@ -3139,5 +3131,4 @@ isakmp_rfc3948_print(netdissect_options *ndo,
 
 trunc:
        nd_print_trunc(ndo);
-       return;
 }