X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/0b08cf5378648279efb96ecf03ea2e3f75bc4eff..0845bc813c1cc48b18cdefff0b387c110647463c:/print-ahcp.c diff --git a/print-ahcp.c b/print-ahcp.c index 1d498735..ebc74091 100644 --- a/print-ahcp.c +++ b/print-ahcp.c @@ -40,7 +40,7 @@ #include "addrtoname.h" static const char tstr[] = " [|ahcp]"; -static const char cstr[] = "(corrupt)"; +static const char istr[] = " (invalid)"; #define AHCP_MAGIC_NUMBER 43 #define AHCP_VERSION_1 1 @@ -99,13 +99,14 @@ static const struct tok ahcp1_opt_str[] = { }; static int -ahcp_time_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { +ahcp_time_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) +{ time_t t; struct tm *tm; char buf[BUFSIZE]; if (cp + 4 != ep) - goto corrupt; + goto invalid; ND_TCHECK2(*cp, 4); t = EXTRACT_32BITS(cp); if (NULL == (tm = gmtime(&t))) @@ -116,8 +117,8 @@ ahcp_time_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { ND_PRINT((ndo, ": %s UTC", buf)); return 0; -corrupt: - ND_PRINT((ndo, ": %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return 0; trunc: @@ -126,15 +127,16 @@ trunc: } static int -ahcp_seconds_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { +ahcp_seconds_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) +{ if (cp + 4 != ep) - goto corrupt; + goto invalid; ND_TCHECK2(*cp, 4); ND_PRINT((ndo, ": %us", EXTRACT_32BITS(cp))); return 0; -corrupt: - ND_PRINT((ndo, ": %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return 0; trunc: @@ -143,27 +145,26 @@ trunc: } static int -ahcp_ipv6_addresses_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { +ahcp_ipv6_addresses_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) +{ const char *sep = ": "; while (cp < ep) { if (cp + 16 > ep) - goto corrupt; + goto invalid; ND_TCHECK2(*cp, 16); - ND_PRINT((ndo, "%s%s", sep, #ifdef INET6 - ip6addr_string(cp) + ND_PRINT((ndo, "%s%s", sep, ip6addr_string(ndo, cp))); #else - "(compiled w/o IPv6)" + ND_PRINT((ndo, "%s(compiled w/o IPv6)", sep)); #endif /* INET6 */ - )); cp += 16; sep = ", "; } return 0; -corrupt: - ND_PRINT((ndo, ": %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return 0; trunc: @@ -172,21 +173,22 @@ trunc: } static int -ahcp_ipv4_addresses_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { +ahcp_ipv4_addresses_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) +{ const char *sep = ": "; while (cp < ep) { if (cp + 4 > ep) - goto corrupt; + goto invalid; ND_TCHECK2(*cp, 4); - ND_PRINT((ndo, "%s%s", sep, ipaddr_string(cp))); + ND_PRINT((ndo, "%s%s", sep, ipaddr_string(ndo, cp))); cp += 4; sep = ", "; } return 0; -corrupt: - ND_PRINT((ndo, ": %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return 0; trunc: @@ -195,27 +197,26 @@ trunc: } static int -ahcp_ipv6_prefixes_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { +ahcp_ipv6_prefixes_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) +{ const char *sep = ": "; while (cp < ep) { if (cp + 17 > ep) - goto corrupt; + goto invalid; ND_TCHECK2(*cp, 17); - ND_PRINT((ndo, "%s%s/%u", sep, #ifdef INET6 - ip6addr_string(cp), + ND_PRINT((ndo, "%s%s/%u", sep, ip6addr_string(ndo, cp), *(cp + 16))); #else - "(compiled w/o IPv6)", + ND_PRINT((ndo, "%s(compiled w/o IPv6)/%u", sep, *(cp + 16))); #endif /* INET6 */ - *(cp + 16))); cp += 17; sep = ", "; } return 0; -corrupt: - ND_PRINT((ndo, ": %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return 0; trunc: @@ -224,21 +225,22 @@ trunc: } static int -ahcp_ipv4_prefixes_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { +ahcp_ipv4_prefixes_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) +{ const char *sep = ": "; while (cp < ep) { if (cp + 5 > ep) - goto corrupt; + goto invalid; ND_TCHECK2(*cp, 5); - ND_PRINT((ndo, "%s%s/%u", sep, ipaddr_string(cp), *(cp + 4))); + ND_PRINT((ndo, "%s%s/%u", sep, ipaddr_string(ndo, cp), *(cp + 4))); cp += 5; sep = ", "; } return 0; -corrupt: - ND_PRINT((ndo, ": %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return 0; trunc: @@ -266,7 +268,8 @@ static int }; static void -ahcp1_options_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { +ahcp1_options_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) +{ uint8_t option_no, option_len; while (cp < ep) { @@ -279,12 +282,12 @@ ahcp1_options_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) continue; /* Length */ if (cp + 1 > ep) - goto corrupt; + goto invalid; ND_TCHECK2(*cp, 1); option_len = *cp; cp += 1; if (cp + option_len > ep) - goto corrupt; + goto invalid; /* Value */ if (option_no <= AHCP1_OPT_MAX && data_decoders[option_no] != NULL) { if (data_decoders[option_no](ndo, cp, cp + option_len) < 0) @@ -297,8 +300,8 @@ ahcp1_options_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) } return; -corrupt: - ND_PRINT((ndo, " %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return; trunc: @@ -306,12 +309,13 @@ trunc: } static void -ahcp1_body_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { +ahcp1_body_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) +{ uint8_t type, mbz; uint16_t body_len; if (cp + AHCP1_BODY_MIN_LEN > ep) - goto corrupt; + goto invalid; /* Type */ ND_TCHECK2(*cp, 1); type = *cp; @@ -332,7 +336,7 @@ ahcp1_body_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { ND_PRINT((ndo, ", Length %u", body_len)); } if (cp + body_len > ep) - goto corrupt; + goto invalid; /* Options */ if (ndo->ndo_vflag >= 2) @@ -341,8 +345,8 @@ ahcp1_body_print(netdissect_options *ndo, const u_char *cp, const u_char *ep) { ND_TCHECK2(*cp, body_len); return; -corrupt: - ND_PRINT((ndo, " %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return; trunc: @@ -350,17 +354,18 @@ trunc: } void -ahcp_print(netdissect_options *ndo, const u_char *cp, const u_int len) { +ahcp_print(netdissect_options *ndo, const u_char *cp, const u_int len) +{ const u_char *ep = cp + len; uint8_t version; ND_PRINT((ndo, "AHCP")); if (len < 2) - goto corrupt; + goto invalid; /* Magic */ ND_TCHECK2(*cp, 1); if (*cp != AHCP_MAGIC_NUMBER) - goto corrupt; + goto invalid; cp += 1; /* Version */ ND_TCHECK2(*cp, 1); @@ -370,7 +375,7 @@ ahcp_print(netdissect_options *ndo, const u_char *cp, const u_int len) { case AHCP_VERSION_1: { ND_PRINT((ndo, " Version 1")); if (len < AHCP1_HEADER_FIX_LEN) - goto corrupt; + goto invalid; if (!ndo->ndo_vflag) { ND_TCHECK2(*cp, AHCP1_HEADER_FIX_LEN - 2); cp += AHCP1_HEADER_FIX_LEN - 2; @@ -389,11 +394,11 @@ ahcp_print(netdissect_options *ndo, const u_char *cp, const u_int len) { cp += 4; /* Source Id */ ND_TCHECK2(*cp, 8); - ND_PRINT((ndo, ", Source Id %s", linkaddr_string(cp, 0, 8))); + ND_PRINT((ndo, ", Source Id %s", linkaddr_string(ndo, cp, 0, 8))); cp += 8; /* Destination Id */ ND_TCHECK2(*cp, 8); - ND_PRINT((ndo, ", Destination Id %s", linkaddr_string(cp, 0, 8))); + ND_PRINT((ndo, ", Destination Id %s", linkaddr_string(ndo, cp, 0, 8))); cp += 8; } /* Body */ @@ -406,11 +411,10 @@ ahcp_print(netdissect_options *ndo, const u_char *cp, const u_int len) { } return; -corrupt: - ND_PRINT((ndo, " %s", cstr)); +invalid: + ND_PRINT((ndo, "%s", istr)); ND_TCHECK2(*cp, ep - cp); return; trunc: ND_PRINT((ndo, "%s", tstr)); } -