aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-kerberos.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-11-10 19:58:03 +0000
committerMichael Mann <mmann78@netscape.net>2013-11-10 19:58:03 +0000
commitce62a3c5ccbfcb28d049e8b14f96fd138cdd3747 (patch)
tree402d94ca06906c96b26fab6c20d4d0554712fec4 /epan/dissectors/packet-kerberos.c
parente78924d5a424f8623a137d96f6e4cd3db46ceaaa (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.c21
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;
}