aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-gssapi.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/epan/dissectors/packet-gssapi.c b/epan/dissectors/packet-gssapi.c
index f7ce0c7ff0..9dd85f5e5c 100644
--- a/epan/dissectors/packet-gssapi.c
+++ b/epan/dissectors/packet-gssapi.c
@@ -368,16 +368,34 @@ dissect_gssapi_work(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
} else {
tvbuff_t *oid_tvb_local;
- oid_tvb_local = tvb_new_subset_remaining(gss_tvb, start_offset);
- if (is_verifier)
+ if (is_verifier) {
handle = oidvalue->wrap_handle;
- else
+ if (handle != NULL) {
+ oid_tvb_local = tvb_new_subset_remaining(gss_tvb, start_offset);
+ len = call_dissector_with_data(handle, oid_tvb_local, pinfo, subtree, encrypt_info);
+ if (len == 0)
+ return_offset = tvb_captured_length(gss_tvb);
+ else
+ return_offset = start_offset + len;
+ } else {
+ proto_tree_add_item(subtree, hf_gssapi_auth_verifier, gss_tvb, offset, -1, ENC_NA);
+ return_offset = tvb_captured_length(gss_tvb);
+ }
+ } else {
handle = oidvalue->handle;
- len = call_dissector_with_data(handle, oid_tvb_local, pinfo, subtree, encrypt_info);
- if (len == 0)
- return_offset = tvb_captured_length(gss_tvb);
- else
- return_offset = start_offset + len;
+ if (handle != NULL) {
+ oid_tvb_local = tvb_new_subset_remaining(gss_tvb, start_offset);
+ len = call_dissector_with_data(handle, oid_tvb_local, pinfo, subtree, encrypt_info);
+ if (len == 0)
+ return_offset = tvb_captured_length(gss_tvb);
+ else
+ return_offset = start_offset + len;
+ } else {
+ proto_tree_add_item(subtree, hf_gssapi_auth_credentials, gss_tvb, offset, -1, ENC_NA);
+ return_offset = tvb_captured_length(gss_tvb);
+ }
+ }
+
goto done; /* We are finished here */
}
}