aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>1999-08-03 14:59:16 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>1999-08-03 14:59:16 +0000
commitfeaab633b56e6207a3d374a7a94defcd8bf42729 (patch)
tree7ca7effe1ff05aa447ac1347d8dcbc88403b30b0
parentdd7f28464974daa83c629fd7e0ff6ea25d384ceb (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.c77
-rw-r--r--proto.c4
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));
+}
+
diff --git a/proto.c b/proto.c
index ddb48b3dde..81e2d45478 100644
--- a/proto.c
+++ b/proto.c
@@ -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();