diff options
author | Michael Mann <mmann78@netscape.net> | 2013-11-10 19:58:03 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-11-10 19:58:03 +0000 |
commit | ce62a3c5ccbfcb28d049e8b14f96fd138cdd3747 (patch) | |
tree | 402d94ca06906c96b26fab6c20d4d0554712fec4 /epan/dissectors/packet-kerberos.c | |
parent | e78924d5a424f8623a137d96f6e4cd3db46ceaaa (diff) |
Use ASN.1 private data instead of pinfo->private_data to exchange kerberos callback functions.
svn path=/trunk/; revision=53240
Diffstat (limited to 'epan/dissectors/packet-kerberos.c')
-rw-r--r-- | epan/dissectors/packet-kerberos.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/epan/dissectors/packet-kerberos.c b/epan/dissectors/packet-kerberos.c index 15ed1098b1..f0610542b4 100644 --- a/epan/dissectors/packet-kerberos.c +++ b/epan/dissectors/packet-kerberos.c @@ -361,10 +361,8 @@ static gboolean gbl_do_col_info; static void -call_kerberos_callbacks(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int tag) +call_kerberos_callbacks(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int tag, kerberos_callbacks *cb) { - kerberos_callbacks *cb=(kerberos_callbacks *)pinfo->private_data; - if(!cb){ return; } @@ -3468,13 +3466,13 @@ dissect_krb5_Authenticator(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx static int -dissect_krb5_PRIV_BODY_user_data(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_) +dissect_krb5_PRIV_BODY_user_data(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) { tvbuff_t *new_tvb; offset=dissect_ber_octet_string(FALSE, actx, tree, tvb, offset, hf_krb_PRIV_BODY_user_data, &new_tvb); if (new_tvb) - call_kerberos_callbacks(actx->pinfo, tree, new_tvb, KRB_CBTAG_PRIV_USER_DATA); + call_kerberos_callbacks(actx->pinfo, tree, new_tvb, KRB_CBTAG_PRIV_USER_DATA, (kerberos_callbacks*)actx->private_data); return offset; } @@ -3753,12 +3751,12 @@ dissect_krb5_CRED(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx static int -dissect_krb5_SAFE_BODY_user_data(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_) +dissect_krb5_SAFE_BODY_user_data(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) { tvbuff_t *new_tvb; offset=dissect_ber_octet_string(FALSE, actx, tree, tvb, offset, hf_krb_SAFE_BODY_user_data, &new_tvb); if (new_tvb) - call_kerberos_callbacks(actx->pinfo, tree, new_tvb, KRB_CBTAG_SAFE_USER_DATA); + call_kerberos_callbacks(actx->pinfo, tree, new_tvb, KRB_CBTAG_SAFE_USER_DATA, (kerberos_callbacks*)actx->private_data); return offset; } static int @@ -4692,15 +4690,12 @@ dissect_kerberos_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, volatile int offset = 0; proto_tree *volatile kerberos_tree = NULL; proto_item *volatile item = NULL; - void *saved_private_data; asn1_ctx_t asn1_ctx; /* TCP record mark and length */ guint32 krb_rm = 0; gint krb_reclen = 0; - saved_private_data=pinfo->private_data; - pinfo->private_data=cb; gbl_do_col_info=dci; if (have_rm) { @@ -4710,7 +4705,6 @@ dissect_kerberos_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, * What is a reasonable size limit? */ if (krb_reclen > 10 * 1024 * 1024) { - pinfo->private_data=saved_private_data; return (-1); } if (do_col_protocol) { @@ -4735,7 +4729,6 @@ dissect_kerberos_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, get_ber_identifier(tvb, offset, &tmp_class, &tmp_pc, &tmp_tag); if(tmp_class!=BER_CLASS_APP){ - pinfo->private_data=saved_private_data; return 0; } switch(tmp_tag){ @@ -4758,7 +4751,6 @@ dissect_kerberos_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, case KRB5_MSG_ERROR: break; default: - pinfo->private_data=saved_private_data; return 0; } if (do_col_protocol) { @@ -4773,16 +4765,15 @@ dissect_kerberos_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, } } asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + asn1_ctx.private_data = cb; TRY { offset=dissect_ber_old_choice(&asn1_ctx, kerberos_tree, tvb, offset, kerberos_applications_choice, -1, -1, NULL); } CATCH_BOUNDS_ERRORS { - pinfo->private_data=saved_private_data; RETHROW; } ENDTRY; proto_item_set_len(item, offset); - pinfo->private_data=saved_private_data; return offset; } |