aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-diameter.c
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2019-08-15 00:19:33 +0100
committerAnders Broman <a.broman58@gmail.com>2019-08-15 04:10:16 +0000
commita537edfdfff3be7366ae691e6e5403b1972322bf (patch)
tree7382470b1994d6359fae43fbc5fa6c0703f48830 /epan/dissectors/packet-diameter.c
parent4a795a457a112e57126810e1587c1bcfcea4fd4f (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.c12
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 }},