void radius_print(netdissect_options *ndo, const u_char *dat, u_int length) { const struct radius_hdr *rad; u_int len, auth_idx; ndo->ndo_protocol = "radius"; ND_TCHECK_LEN(dat, MIN_RADIUS_LEN); rad = (const struct radius_hdr *)dat; len = EXTRACT_BE_U_2(rad->len); if (len < MIN_RADIUS_LEN) { nd_print_trunc(ndo); return; } if (len > length) len = length; if (ndo->ndo_vflag < 1) { ND_PRINT("RADIUS, %s (%u), id: 0x%02x length: %u", tok2str(radius_command_values,"Unknown Command",EXTRACT_U_1(rad->code)), EXTRACT_U_1(rad->code), EXTRACT_U_1(rad->id), len); return; } else { ND_PRINT("RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ", len, tok2str(radius_command_values,"Unknown Command",EXTRACT_U_1(rad->code)), EXTRACT_U_1(rad->code), EXTRACT_U_1(rad->id)); for(auth_idx=0; auth_idx < 16; auth_idx++) ND_PRINT("%02x", rad->auth[auth_idx]); } if (len > MIN_RADIUS_LEN) radius_attrs_print(ndo, dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN); return; trunc: nd_print_trunc(ndo); }
void radius_print(netdissect_options *ndo, const u_char *dat, u_int length) { register const struct radius_hdr *rad; u_int len, auth_idx; ND_TCHECK2(*dat, MIN_RADIUS_LEN); rad = (struct radius_hdr *)dat; len = EXTRACT_16BITS(&rad->len); if (len < MIN_RADIUS_LEN) { ND_PRINT((ndo, "%s", tstr)); return; } if (len > length) len = length; if (ndo->ndo_vflag < 1) { ND_PRINT((ndo, "RADIUS, %s (%u), id: 0x%02x length: %u", tok2str(radius_command_values,"Unknown Command",rad->code), rad->code, rad->id, len)); return; } else { ND_PRINT((ndo, "RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ", len, tok2str(radius_command_values,"Unknown Command",rad->code), rad->code, rad->id)); for(auth_idx=0; auth_idx < 16; auth_idx++) ND_PRINT((ndo, "%02x", rad->auth[auth_idx])); } if (len > MIN_RADIUS_LEN) radius_attrs_print(ndo, dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN); return; trunc: ND_PRINT((ndo, "%s", tstr)); }
char * radius_print(const u_char *dat, u_int length) { register const struct radius_hdr *rad; u_int len, auth_idx; TCHECK2(*dat, MIN_RADIUS_LEN); rad = (struct radius_hdr *)dat; len = EXTRACT_16BITS(&rad->len); if (len < MIN_RADIUS_LEN) { sprintf(&ArgusBuf[strlen(ArgusBuf)]," [|radius]"); return ArgusBuf; } if (len > length) len = length; if (ArgusParser->vflag < 1) { sprintf(&ArgusBuf[strlen(ArgusBuf)],"RADIUS, %s (%u), id: 0x%02x length: %u", tok2str(radius_command_values,"Unknown Command",rad->code), rad->code, rad->id, len); return ArgusBuf; } else { sprintf(&ArgusBuf[strlen(ArgusBuf)],"RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ", len, tok2str(radius_command_values,"Unknown Command",rad->code), rad->code, rad->id); for(auth_idx=0; auth_idx < 16; auth_idx++) sprintf(&ArgusBuf[strlen(ArgusBuf)],"%02x", rad->auth[auth_idx] ); } if (len > MIN_RADIUS_LEN) radius_attrs_print( dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN); return ArgusBuf; trunc: sprintf(&ArgusBuf[strlen(ArgusBuf)]," [|radius]"); return ArgusBuf; }
void radius_print(packetbody_t dat, u_int length) { __capability const struct radius_hdr *rad; u_int len, auth_idx; PACKET_HAS_SPACE_OR_TRUNC(dat, MIN_RADIUS_LEN); rad = (__capability struct radius_hdr *)dat; len = EXTRACT_16BITS(&rad->len); if (len < MIN_RADIUS_LEN) { printf(" [|radius]"); return; } if (len > length) len = length; if (vflag < 1) { printf("RADIUS, %s (%u), id: 0x%02x length: %u", tok2str(radius_command_values,"Unknown Command",rad->code), rad->code, rad->id, len); return; } else { printf("RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ", len, tok2str(radius_command_values,"Unknown Command",rad->code), rad->code, rad->id); for(auth_idx=0; auth_idx < 16; auth_idx++) printf("%02x", rad->auth[auth_idx] ); } if (len > MIN_RADIUS_LEN) radius_attrs_print( dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN); return; trunc: printf(" [|radius]"); }