diff options
author | Gilbert Ramirez <gram@alumni.rice.edu> | 1999-08-03 14:59:16 +0000 |
---|---|---|
committer | Gilbert Ramirez <gram@alumni.rice.edu> | 1999-08-03 14:59:16 +0000 |
commit | feaab633b56e6207a3d374a7a94defcd8bf42729 (patch) | |
tree | 7ca7effe1ff05aa447ac1347d8dcbc88403b30b0 | |
parent | dd7f28464974daa83c629fd7e0ff6ea25d384ceb (diff) |
Checked in Johan's Updated RADIUS dissector which uses the new proto_tree
implementation.
svn path=/trunk/; revision=425
-rw-r--r-- | packet-radius.c | 77 | ||||
-rw-r--r-- | proto.c | 4 |
2 files changed, 61 insertions, 20 deletions
diff --git a/packet-radius.c b/packet-radius.c index 08e4471042..8ea0bfaf25 100644 --- a/packet-radius.c +++ b/packet-radius.c @@ -1,7 +1,7 @@ /* packet-radius.c * Routines for RADIUS packet disassembly * - * $Id: packet-radius.c,v 1.2 1999/07/13 02:52:54 gram Exp $ + * $Id: packet-radius.c,v 1.3 1999/08/03 14:59:16 gram Exp $ * * Ethereal - Network traffic analyzer * By Johan Feyaerts @@ -20,6 +20,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +int proto_radius = -1; +int hf_radius_length = -1; +int hf_radius_code = -1; +int hf_radius_id =-1; #ifdef HAVE_CONFIG_H #include "config.h" @@ -433,8 +437,7 @@ value_string *valstrarr; { case( RADIUS_STRING ): case( RADIUS_BINSTRING ): - -result=rdconvertbufftostr(avph->avp_length-2,&(pd[offset+2])); + result=rdconvertbufftostr(avph->avp_length-2,&(pd[offset+2])); break; case( RADIUS_INTEGER4 ): sprintf(textbuffer,"%u", intval); @@ -513,8 +516,10 @@ void dissect_attribute_value_pairs(const u_char *pd, int offset, frame_data proto_tree_add_text(tree,offset,0,"No Attribute Value Pairs Found"); return; } + while (avplength > 0 ) { + memcpy(&avph,&pd[offset],sizeof(e_avphdr)); avplength=avplength-avph.avp_length; avptpstrval=match_strval(avph.avp_type, radius_attrib_type_vals); @@ -526,6 +531,7 @@ void dissect_attribute_value_pairs(const u_char *pd, int offset, frame_data offset=offset+avph.avp_length; } } + void dissect_radius(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) @@ -547,38 +553,54 @@ proto_tree rhident= (int)rh.rh_ident; rhlength= (int)ntohs(rh.rh_pktlength); codestrval= match_strval(rhcode,radius_vals); + if (codestrval==NULL) + { + codestrval="Unknown Packet"; + } if (check_col(fd, COL_PROTOCOL)) col_add_str(fd, COL_PROTOCOL, "RADIUS"); - if (check_col(fd, COL_INFO) && codestrval !=NULL) + if (check_col(fd, COL_INFO)) { - col_add_fstr(fd,COL_INFO,codestrval); + sprintf(textbuffer,"%s(%d) (id=%d, l=%d)", + codestrval, rhcode, rhident, rhlength); + col_add_fstr(fd,COL_INFO,textbuffer); } if (tree) { - - ti = proto_tree_add_text(tree, offset, rhlength, "RADIUS"); + + ti = proto_tree_add_item(tree,proto_radius, offset, rhlength, + NULL); radius_tree = proto_item_add_subtree(ti, ETT_RADIUS); - proto_tree_add_text(radius_tree, offset, 1, - "Packet code:0x%01x (%s)",rhcode, codestrval); - proto_tree_add_text(radius_tree, offset+1, 1, - "Packet identifier: 0x%01x (%d)", rhident, rhident); - proto_tree_add_text(radius_tree, offset+2, 2, - "Packet length: 0x%02x (%d)", rhlength,rhlength); - proto_tree_add_text(radius_tree, offset+4, AUTHENTICATOR_LENGTH, - "Authenticator"); - hdrlength=RD_HDR_LENGTH+AUTHENTICATOR_LENGTH; - avplength= rhlength - hdrlength; + + proto_tree_add_item_format(radius_tree,hf_radius_code, offset, 1, + rh.rh_code, "Packet code:0x%01x (%s)",rhcode, codestrval); + proto_tree_add_item_format(radius_tree,hf_radius_id, offset+1, 1, + rh.rh_ident, "Packet identifier: 0x%01x (%d)", + rhident,rhident); + + proto_tree_add_item_format(radius_tree, hf_radius_length, + offset+2, 2, + (guint16)rhlength, + "Packet length: 0x%02x(%d)",rhlength,rhlength); + proto_tree_add_text(radius_tree, offset+4, + AUTHENTICATOR_LENGTH, + "Authenticator"); + + hdrlength=RD_HDR_LENGTH+AUTHENTICATOR_LENGTH; + avplength= rhlength -hdrlength; offsetavp=offset+hdrlength; /* list the attribute value pairs */ - avptf = proto_tree_add_text(radius_tree, - offset+hdrlength,avplength, + + avptf = proto_tree_add_text(radius_tree + ,offset+hdrlength,avplength, "Attribute value pairs"); avptree = proto_item_add_subtree(avptf, ETT_RADIUS_AVP); + if (avptree !=NULL) { dissect_attribute_value_pairs( pd, @@ -586,3 +608,20 @@ proto_tree } } } +/* registration with the filtering engine */ +void +proto_register_radius(void) +{ + static hf_register_info hf[] = { + { &hf_radius_code, + { "Code","radius.code", FT_UINT8, NULL }}, + { &hf_radius_id, + { "Identifier", "radius.id", FT_UINT8, NULL }}, + { &hf_radius_length, + { "Length","radius.length", FT_UINT16, NULL }} + }; + + proto_radius = proto_register_protocol ("Radius Protocol", "radius"); + proto_register_field_array(proto_radius, hf, array_length(hf)); +} + @@ -1,7 +1,7 @@ /* proto.c * Routines for protocol tree * - * $Id: proto.c,v 1.9 1999/08/03 14:49:34 gram Exp $ + * $Id: proto.c,v 1.10 1999/08/03 14:59:16 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -119,6 +119,7 @@ void proto_register_osi(void); void proto_register_ospf(void); void proto_register_pop(void); void proto_register_ppp(void); +void proto_register_radius(void); void proto_register_rip(void); void proto_register_rsvp(void); void proto_register_rtsp(void); @@ -213,6 +214,7 @@ proto_init(void) proto_register_ospf(); proto_register_pop(); proto_register_ppp(); + proto_register_radius(); proto_register_rip(); proto_register_rsvp(); proto_register_rtsp(); |