X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/c1c3c77463d592cc576eaa491e604752044ca55a..1a04b92e365f5ed01ca38619b41bcc4fc9cbd63c:/print-eap.c diff --git a/print-eap.c b/print-eap.c index 9420d110..827bf672 100644 --- a/print-eap.c +++ b/print-eap.c @@ -16,16 +16,15 @@ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Format and print EAP packets. - * */ +/* \summary: Extensible Authentication Protocol (EAP) printer */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include +#include #include "netdissect.h" #include "extract.h" @@ -149,8 +148,8 @@ static const struct tok eap_aka_subtype_values[] = { */ void eap_print(netdissect_options *ndo, - register const u_char *cp, - u_int length _U_) + const u_char *cp, + u_int length) { const struct eap_frame_t *eap; const u_char *tptr; @@ -168,7 +167,7 @@ eap_print(netdissect_options *ndo, tok2str(eap_frame_type_values, "unknown", eap->type), eap->type, eap->version, - EXTRACT_16BITS(eap->length))); + EXTRACT_BE_U_2(eap->length))); return; } @@ -176,28 +175,31 @@ eap_print(netdissect_options *ndo, tok2str(eap_frame_type_values, "unknown", eap->type), eap->type, eap->version, - EXTRACT_16BITS(eap->length))); + EXTRACT_BE_U_2(eap->length))); - tptr += sizeof(const struct eap_frame_t); - tlen -= sizeof(const struct eap_frame_t); + tptr += sizeof(struct eap_frame_t); + tlen -= sizeof(struct eap_frame_t); switch (eap->type) { case EAP_FRAME_TYPE_PACKET: - type = *(tptr); - len = EXTRACT_16BITS(tptr+2); + ND_TCHECK_1(tptr); + type = EXTRACT_U_1(tptr); + ND_TCHECK_2(tptr + 2); + len = EXTRACT_BE_U_2(tptr + 2); ND_PRINT((ndo, ", %s (%u), id %u, len %u", tok2str(eap_code_values, "unknown", type), type, - *(tptr+1), + EXTRACT_U_1((tptr + 1)), len)); - ND_TCHECK2(*tptr, len); + ND_TCHECK_LEN(tptr, len); if (type <= 2) { /* For EAP_REQUEST and EAP_RESPONSE only */ - subtype = *(tptr+4); + ND_TCHECK_1(tptr + 4); + subtype = EXTRACT_U_1(tptr + 4); ND_PRINT((ndo, "\n\t\t Type %s (%u)", - tok2str(eap_type_values, "unknown", *(tptr+4)), - *(tptr + 4))); + tok2str(eap_type_values, "unknown", subtype), + subtype)); switch (subtype) { case EAP_TYPE_IDENTITY: @@ -223,35 +225,41 @@ eap_print(netdissect_options *ndo, * type one octet per type */ while (count < len) { + ND_TCHECK_1(tptr + count); ND_PRINT((ndo, " %s (%u),", - tok2str(eap_type_values, "unknown", *(tptr+count)), - *(tptr + count))); + tok2str(eap_type_values, "unknown", EXTRACT_U_1((tptr + count))), + EXTRACT_U_1(tptr + count))); count++; } break; case EAP_TYPE_TTLS: - ND_PRINT((ndo, " TTLSv%u", - EAP_TTLS_VERSION(*(tptr + 5)))); /* fall through */ case EAP_TYPE_TLS: + ND_TCHECK_1(tptr + 5); + if (subtype == EAP_TYPE_TTLS) + ND_PRINT((ndo, " TTLSv%u", + EAP_TTLS_VERSION(EXTRACT_U_1((tptr + 5))))); ND_PRINT((ndo, " flags [%s] 0x%02x,", - bittok2str(eap_tls_flags_values, "none", *(tptr+5)), - *(tptr + 5))); + bittok2str(eap_tls_flags_values, "none", EXTRACT_U_1((tptr + 5))), + EXTRACT_U_1(tptr + 5))); - if (EAP_TLS_EXTRACT_BIT_L(*(tptr+5))) { - ND_PRINT((ndo, " len %u", EXTRACT_32BITS(tptr + 6))); + if (EAP_TLS_EXTRACT_BIT_L(EXTRACT_U_1(tptr + 5))) { + ND_TCHECK_4(tptr + 6); + ND_PRINT((ndo, " len %u", EXTRACT_BE_U_4(tptr + 6))); } break; case EAP_TYPE_FAST: + ND_TCHECK_1(tptr + 5); ND_PRINT((ndo, " FASTv%u", - EAP_TTLS_VERSION(*(tptr + 5)))); + EAP_TTLS_VERSION(EXTRACT_U_1((tptr + 5))))); ND_PRINT((ndo, " flags [%s] 0x%02x,", - bittok2str(eap_tls_flags_values, "none", *(tptr+5)), - *(tptr + 5))); + bittok2str(eap_tls_flags_values, "none", EXTRACT_U_1((tptr + 5))), + EXTRACT_U_1(tptr + 5))); - if (EAP_TLS_EXTRACT_BIT_L(*(tptr+5))) { - ND_PRINT((ndo, " len %u", EXTRACT_32BITS(tptr + 6))); + if (EAP_TLS_EXTRACT_BIT_L(EXTRACT_U_1(tptr + 5))) { + ND_TCHECK_4(tptr + 6); + ND_PRINT((ndo, " len %u", EXTRACT_BE_U_4(tptr + 6))); } /* FIXME - TLV attributes follow */ @@ -259,9 +267,10 @@ eap_print(netdissect_options *ndo, case EAP_TYPE_AKA: case EAP_TYPE_SIM: + ND_TCHECK_1(tptr + 5); ND_PRINT((ndo, " subtype [%s] 0x%02x,", - tok2str(eap_aka_subtype_values, "unknown", *(tptr+5)), - *(tptr + 5))); + tok2str(eap_aka_subtype_values, "unknown", EXTRACT_U_1((tptr + 5))), + EXTRACT_U_1(tptr + 5))); /* FIXME - TLV attributes follow */ break;