Added Tony Hart's <thart@avici.com> patch to dissect MD5 authentication

data in OSPF. (corrected copy)

svn path=/trunk/; revision=889
This commit is contained in:
Gilbert Ramirez 1999-10-19 15:59:04 +00:00
parent 0d1465731b
commit f50168c85d
2 changed files with 36 additions and 4 deletions

View File

@ -2,7 +2,7 @@
* Routines for OSPF packet disassembly
* (c) Copyright Hannes R. Boehm <hannes@boehm.org>
*
* $Id: packet-ospf.c,v 1.13 1999/08/26 07:34:41 guy Exp $
* $Id: packet-ospf.c,v 1.14 1999/10/19 15:59:03 gram Exp $
*
* At this time, this module is able to analyze OSPF
* packets as specified in RFC2328. MOSPF (RFC1584) and other
@ -55,11 +55,13 @@ static int proto_ospf = -1;
void
dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
e_ospfhdr ospfh;
e_ospf_crypto *crypto;
int i, saved_len, ospflen;
proto_tree *ospf_tree = NULL;
proto_item *ti;
proto_tree *ospf_header_tree;
char auth_data[9]="";
char auth_data[(2 * 16) + 1]="";
char *packet_type;
static value_string pt_vals[] = { {OSPF_HELLO, "Hello Packet" },
{OSPF_DB_DESC, "DB Descr." },
@ -116,8 +118,19 @@ dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data: %s", auth_data);
break;
case OSPF_AUTH_CRYPT:
crypto = (e_ospf_crypto *)ospfh.auth_data;
proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type: crypt");
proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data (crypt)");
proto_tree_add_text(ospf_header_tree, offset + 18 , 1, "Auth Key ID: %d",
crypto->key_id);
proto_tree_add_text(ospf_header_tree, offset + 19 , 1, "Auth Data Length: %d",
crypto->length);
proto_tree_add_text(ospf_header_tree, offset + 20 , 4, "Auth Crypto Sequence Number: 0x%x",
ntohl(crypto->sequence_num));
ospflen = ntohs(ospfh.length);
for (i = 0; i < crypto->length && i < (sizeof(auth_data)/2); i++)
sprintf(&auth_data[i*2],"%02x",pd[offset + ospflen + i]);
proto_tree_add_text(ospf_header_tree, offset + ospflen , 16, "Auth Data: %s", auth_data);
break;
default:
proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type (unknown)");
@ -126,8 +139,18 @@ dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
/* Temporarily adjust the captured length to match the size of the OSPF
* packet (since the dissect routines use it to work out where the end of
* the ospf packet is).
*/
saved_len = pi.captured_len;
if (BYTES_ARE_IN_FRAME(offset, ntohs(ospfh.length))) {
pi.captured_len = offset + ntohs(ospfh.length);
}
/* Skip over header */
offset += OSPF_HEADER_LENGTH;
switch(ospfh.packet_type){
case OSPF_HELLO:
dissect_ospf_hello(pd, offset, fd, ospf_tree);
@ -145,8 +168,10 @@ dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
dissect_ospf_ls_ack(pd, offset, fd, ospf_tree);
break;
default:
pi.captured_len = saved_len;
dissect_data(pd, offset, fd, tree);
}
pi.captured_len = saved_len;
}
void

View File

@ -1,6 +1,6 @@
/* packet-ospf.h (c) 1998 Hannes Boehm */
/* $Id: packet-ospf.h,v 1.4 1999/10/06 03:33:48 guy Exp $ */
/* $Id: packet-ospf.h,v 1.5 1999/10/19 15:59:04 gram Exp $ */
#define OSPF_HEADER_LENGTH 24
@ -123,6 +123,13 @@ typedef struct _e_ospf_asexternal_lsa {
guint32 external_tag;
} e_ospf_asexternal_lsa;
typedef struct _e_ospf_crypto {
guint16 mbz;
guint8 key_id;
guint8 length;
guint32 sequence_num;
} e_ospf_crypto;
void dissect_ospf_hello(const u_char*, int, frame_data*, proto_tree*);
void dissect_ospf_db_desc(const u_char*, int, frame_data*, proto_tree*);