summaryrefslogtreecommitdiffstats
path: root/usr.sbin/tcpdump/print-ike.c
diff options
context:
space:
mode:
authorho <ho@openbsd.org>2002-06-11 18:12:11 +0000
committerho <ho@openbsd.org>2002-06-11 18:12:11 +0000
commit3db910db280f40b7508b4acbf3bd10a895d38d9b (patch)
tree911075fcadcf352b1a92dc0ab3c1ab8762041415 /usr.sbin/tcpdump/print-ike.c
parentturn on pf21 (diff)
downloadwireguard-openbsd-3db910db280f40b7508b4acbf3bd10a895d38d9b.tar.xz
wireguard-openbsd-3db910db280f40b7508b4acbf3bd10a895d38d9b.zip
Don't assume 32bit SPI/CPI numbers.
Diffstat (limited to 'usr.sbin/tcpdump/print-ike.c')
-rw-r--r--usr.sbin/tcpdump/print-ike.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/usr.sbin/tcpdump/print-ike.c b/usr.sbin/tcpdump/print-ike.c
index 9a862688dd8..1842fe3261b 100644
--- a/usr.sbin/tcpdump/print-ike.c
+++ b/usr.sbin/tcpdump/print-ike.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: print-ike.c,v 1.11 2002/06/11 17:05:13 ho Exp $ */
+/* $OpenBSD: print-ike.c,v 1.12 2002/06/11 18:12:11 ho Exp $ */
/*
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
@@ -29,7 +29,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /home/cvs/src/usr.sbin/tcpdump/print-ike.c,v 1.11 2002/06/11 17:05:13 ho Exp $ (XXX)";
+ "@(#) $Header: /home/cvs/src/usr.sbin/tcpdump/print-ike.c,v 1.12 2002/06/11 18:12:11 ho Exp $ (XXX)";
#endif
#include <sys/param.h>
@@ -343,23 +343,25 @@ ike_pl_transform_print (u_char *buf, int len, u_char doi)
void
ike_pl_proposal_print (u_char *buf, int len, u_char doi)
{
+ u_int8_t i, spisz = buf[2];
+
printf(" proposal: %d proto: %s spisz: %d xforms: %d",
buf[0], (buf[1] < (sizeof ike / sizeof ike[0]) ? ike[buf[1]] :
- "(unknown)"), buf[2], buf[3]);
+ "(unknown)"), spisz, buf[3]);
/* We need to store this for upcoming ike_attribute_print call. */
xform_proto = buf[1];
- if (buf[2]) {
- /* XXX it is possible that spisz may be != 4 ... */
- printf(" SPI: 0x%08x",
- buf[4]<<24 | buf[5]<<16 | buf[6]<<8 | buf[7]);
+ if (spisz) {
+ printf(" SPI: 0x");
+ for (i = 0; i < spisz && (i + 4) < len; i++)
+ printf ("%02x", buf[i + 4]);
doi = IPSEC_DOI;
} else
doi = ISAKMP_DOI;
if ((char)buf[3] > 0)
- ike_pl_print(PAYLOAD_TRANSFORM, buf+4+buf[2], doi);
+ ike_pl_print(PAYLOAD_TRANSFORM, buf + 4 + buf[2], doi);
}
void