aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2005-02-25 11:38:56 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2005-02-25 11:38:56 +0000
commit7f86cffa5898e3e4616a6c1461563a8b959b7ee9 (patch)
tree4a0f7585e3094e5f32afb2669de750ba970665d7 /epan
parent4a338216da1cfa0ce089f39268e2b44f0805e47e (diff)
add support to call krb4 for suspected krb4 stuff soming in on udp port 88
weirdo krb4 implementations apparently do this. svn path=/trunk/; revision=13516
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-kerberos.c20
-rw-r--r--epan/dissectors/packet-kerberos4.c1
2 files changed, 21 insertions, 0 deletions
diff --git a/epan/dissectors/packet-kerberos.c b/epan/dissectors/packet-kerberos.c
index 81015e056e..f2c5ca1d22 100644
--- a/epan/dissectors/packet-kerberos.c
+++ b/epan/dissectors/packet-kerberos.c
@@ -287,6 +287,8 @@ static gint ett_krb_e_checksum = -1;
guint32 krb5_errorcode;
+dissector_handle_t krb4_handle=NULL;
+
static int do_col_info;
@@ -3645,6 +3647,21 @@ dissect_kerberos_main(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int d
static void
dissect_kerberos_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
+ /* Some weird kerberos implementation apparently do krb4 on the krb5 port.
+ Since all (except weirdo transarc krb4 stuff) use
+ an opcode <=16 in the first byte, use this to see if it might
+ be krb4.
+ All krb5 commands start with an APPL tag and thus is >=0x60
+ so if first byte is <=16 just blindly assume it is krb4 then
+ */
+ if(tvb_get_guint8(tvb, 0)<=0x10){
+ if(krb4_handle){
+ call_dissector(krb4_handle, tvb, pinfo, tree);
+ }
+ return;
+ }
+
+
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "KRB5");
@@ -4244,6 +4261,7 @@ proto_register_kerberos(void)
"The keytab file containing all the secrets",
&keytab_filename);
#endif
+
}
static int wrap_dissect_gss_kerb(tvbuff_t *tvb, int offset, packet_info *pinfo,
@@ -4277,6 +4295,8 @@ proto_reg_handoff_kerberos(void)
{
dissector_handle_t kerberos_handle_tcp;
+ krb4_handle = find_dissector("krb4");
+
kerberos_handle_udp = create_dissector_handle(dissect_kerberos_udp,
proto_kerberos);
kerberos_handle_tcp = create_dissector_handle(dissect_kerberos_tcp,
diff --git a/epan/dissectors/packet-kerberos4.c b/epan/dissectors/packet-kerberos4.c
index 1b2e1c95b5..b19db07ff1 100644
--- a/epan/dissectors/packet-kerberos4.c
+++ b/epan/dissectors/packet-kerberos4.c
@@ -432,6 +432,7 @@ proto_register_krb4(void)
proto_krb4 = proto_register_protocol("Kerberos v4",
"KRB4", "krb4");
+ register_dissector("krb4", dissect_krb4, proto_krb4);
proto_register_field_array(proto_krb4, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}