diff options
author | Peter Wu <peter@lekensteyn.nl> | 2019-08-15 00:19:33 +0100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2019-08-15 04:10:16 +0000 |
commit | a537edfdfff3be7366ae691e6e5403b1972322bf (patch) | |
tree | 7382470b1994d6359fae43fbc5fa6c0703f48830 /epan/dissectors/packet-diameter.c | |
parent | 4a795a457a112e57126810e1587c1bcfcea4fd4f (diff) |
Diameter: Add MS-CHAP/MS-CHAPv2 AVP support for EAP-TLS
Created the Microsoft Diameter file based on MS-CHAP-* AVPs listed at
https://www.iana.org/assignments/eap-numbers/eap-numbers.xhtml#eap-numbers-10
Many values are displayed as bytes for simplicit. The MS-CHAP2-Success
attribute could for example be dissected further as 1 byte followed by a
string, but that requires more effort.
Allow padding to be missing since the eap-ttls-mschapv2.pcapng capture
would throw a Malformed Packet exception otherwise.
Bug: 15603
Change-Id: I9efc322a86802e78bb6cd4bc3df1c1282a45fe9e
Reviewed-on: https://code.wireshark.org/review/34291
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-diameter.c')
-rw-r--r-- | epan/dissectors/packet-diameter.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/epan/dissectors/packet-diameter.c b/epan/dissectors/packet-diameter.c index 0b9ef856de..ffdb092ce4 100644 --- a/epan/dissectors/packet-diameter.c +++ b/epan/dissectors/packet-diameter.c @@ -297,6 +297,7 @@ static expert_field ei_diameter_avp_no_data = EI_INIT; static expert_field ei_diameter_application_id = EI_INIT; static expert_field ei_diameter_version = EI_INIT; static expert_field ei_diameter_avp_pad = EI_INIT; +static expert_field ei_diameter_avp_pad_missing = EI_INIT; static expert_field ei_diameter_code = EI_INIT; static expert_field ei_diameter_avp_code = EI_INIT; static expert_field ei_diameter_avp_vendor_id = EI_INIT; @@ -762,6 +763,13 @@ dissect_diameter_avp(diam_ctx_t *c, tvbuff_t *tvb, int offset, diam_sub_dis_t *d return tvb_reported_length(tvb); } + /* + * Workaround for a MS-CHAPv2 capture from Bug 15603 that lacks padding. + */ + if (tvb_reported_length_remaining(tvb, offset + len) < pad_len) { + pad_len = (guint32)tvb_reported_length_remaining(tvb, offset + len); + } + /* Add root of tree for this AVP */ avp_item = proto_tree_add_item(c->tree, hf_diameter_avp, tvb, offset, len + pad_len, ENC_NA); avp_tree = proto_item_add_subtree(avp_item, a->ett); @@ -891,6 +899,9 @@ dissect_diameter_avp(diam_ctx_t *c, tvbuff_t *tvb, int offset, diam_sub_dis_t *d } } } + if ((len + pad_len) % 4) { + proto_tree_add_expert(avp_tree, c->pinfo, &ei_diameter_avp_pad_missing, tvb, offset, pad_len); + } return len+pad_len; } @@ -2390,6 +2401,7 @@ real_register_diameter_fields(void) { &ei_diameter_avp_vendor_id, { "diameter.unknown_vendor", PI_UNDECODED, PI_WARN, "Unknown Vendor, if you know whose this is you can add it to dictionary.xml", EXPFILL }}, { &ei_diameter_avp_no_data, { "diameter.avp.no_data", PI_UNDECODED, PI_WARN, "Data is empty", EXPFILL }}, { &ei_diameter_avp_pad, { "diameter.avp.pad.non_zero", PI_MALFORMED, PI_NOTE, "Padding is non-zero", EXPFILL }}, + { &ei_diameter_avp_pad_missing, { "diameter.avp.pad.missing", PI_MALFORMED, PI_NOTE, "Padding is missing", EXPFILL }}, { &ei_diameter_avp_len, { "diameter.avp.invalid-len", PI_MALFORMED, PI_WARN, "Wrong length", EXPFILL }}, { &ei_diameter_application_id, { "diameter.applicationId.unknown", PI_UNDECODED, PI_WARN, "Unknown Application Id, if you know what this is you can add it to dictionary.xml", EXPFILL }}, { &ei_diameter_version, { "diameter.version.unknown", PI_UNDECODED, PI_WARN, "Unknown Diameter Version (decoding as RFC 3588)", EXPFILL }}, |