diff options
author | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2005-02-25 11:38:56 +0000 |
---|---|---|
committer | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2005-02-25 11:38:56 +0000 |
commit | 7f86cffa5898e3e4616a6c1461563a8b959b7ee9 (patch) | |
tree | 4a0f7585e3094e5f32afb2669de750ba970665d7 /epan | |
parent | 4a338216da1cfa0ce089f39268e2b44f0805e47e (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.c | 20 | ||||
-rw-r--r-- | epan/dissectors/packet-kerberos4.c | 1 |
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)); } |