diff options
author | Gerald Combs <gerald@wireshark.org> | 2019-03-25 09:56:56 -0700 |
---|---|---|
committer | Dario Lombardo <lomato@gmail.com> | 2019-03-26 08:49:36 +0000 |
commit | 8cdc95842687feee32856afba8e7087396082158 (patch) | |
tree | ddb3cb399d85a200ab55f658a4aca0a4f5644411 /epan/dissectors/packet-gssapi.c | |
parent | 7dda6c4e6446555ba057b4b0e18cad317794a9fe (diff) |
GSS-API: Make sure we call a valid dissector.
Make our unknown dissector handle logic conistent with other parts of
the code.
Bug: 15613
Change-Id: Id0daf9bf0be14b99ec592f4f561cc8935d5cb4a6
Reviewed-on: https://code.wireshark.org/review/32576
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Dario Lombardo <lomato@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-gssapi.c')
-rw-r--r-- | epan/dissectors/packet-gssapi.c | 34 |
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 */ } } |