X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/e0d20f2c0824412b64738c6fa14f87bc8d0ef54d..5cc4c57d4320f80c059506eccd5ad7fa3d97c66f:/print-radius.c?ds=sidebyside diff --git a/print-radius.c b/print-radius.c index d388a8f1..cf5b5983 100644 --- a/print-radius.c +++ b/print-radius.c @@ -44,7 +44,7 @@ #ifndef lint static const char rcsid[] _U_ = - "$Id: print-radius.c,v 1.24 2004-01-07 08:00:52 hannes Exp $"; + "$Id: print-radius.c,v 1.27 2004-07-21 21:45:47 guy Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -503,13 +503,20 @@ print_vendor_attr(register u_char *data, u_int length, u_short attr_code _U_) length-=4; printf("Vendor: %s (%u)", - tok2str(oui_values,"Unknown",vendor_id), + tok2str(smi_values,"Unknown",vendor_id), vendor_id); while (length >= 2) { + if(!TTEST2(*data, 2)) + return; + vendor_type = *(data); vendor_length = *(data+1); + data+=2; + if(!TTEST2(*data, vendor_length)) + return; + printf("\n\t Vendor Attribute: %u, Length: %u, Value: ", vendor_type, vendor_length); @@ -803,14 +810,14 @@ radius_attr_print(register const u_char *attr, u_int length) while (length > 0) { - if (rad_attr->len == 0) + if (rad_attr->len == 0 && rad_attr->type < (TAM_SIZE(attr_type)-1)) { printf("\n\t %s Attribute (%u), zero-length", attr_type[rad_attr->type].name, rad_attr->type); return; } - if ( rad_attr->len <= length ) + if ( rad_attr->len <= length && rad_attr->type < (TAM_SIZE(attr_type)-1)) { printf("\n\t %s Attribute (%u), length: %u, Value: ", attr_type[rad_attr->type].name, @@ -833,9 +840,9 @@ radius_attr_print(register const u_char *attr, u_int length) printf(" [|radius]"); return; } - /* do we want to see an additionally hexdump ? */ - if (vflag> 1) - print_unknown_data((char *)rad_attr+2,"\n\t ",(rad_attr->len)-2); + /* do we also want to see a hex dump ? */ + if (vflag> 1 && rad_attr->len >= 2) + print_unknown_data((u_char *)rad_attr+2,"\n\t ",(rad_attr->len)-2); length-=(rad_attr->len); rad_attr = (struct radius_attr *)( ((char *)(rad_attr))+rad_attr->len);