aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/snmp
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2019-10-20 20:36:53 +0200
committerJaap Keuter <jaap.keuter@xs4all.nl>2019-10-22 16:37:48 +0000
commit54fac1e3097142062f5ed8e1d34ed5a247d9ed70 (patch)
tree4a9b30469374a32cbe1bb7c13b206c1846f37671 /epan/dissectors/asn1/snmp
parent3f105cae4d2ddcb0e8b719ee4b7bbe9c91465911 (diff)
SNMP: handle Net-SNMP Engine Id of 12 octets
The Net-SNMP code creates an Engine Id size based on the compilation size, either 8 or 12 octets long. The initial change added handling of the '4B/8B random, 4B epoch seconds' format. A different format seems more likely though, hence this change, implementing handling of the '4B random, 4B/8B epoch seconds' format instead. Bug: 16051 Change-Id: I8105b0ba69004f6c15e6b1926c677cb4c5b76f17 Reviewed-on: https://code.wireshark.org/review/34816 Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Jaap Keuter <jaap.keuter@xs4all.nl>
Diffstat (limited to 'epan/dissectors/asn1/snmp')
-rw-r--r--epan/dissectors/asn1/snmp/packet-snmp-template.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/epan/dissectors/asn1/snmp/packet-snmp-template.c b/epan/dissectors/asn1/snmp/packet-snmp-template.c
index 8a9ecfd38b..acdb2acd9b 100644
--- a/epan/dissectors/asn1/snmp/packet-snmp-template.c
+++ b/epan/dissectors/asn1/snmp/packet-snmp-template.c
@@ -1116,7 +1116,8 @@ dissect_snmp_engineid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int o
{
proto_item *item = NULL;
guint8 conformance, format;
- guint32 enterpriseid, seconds;
+ guint32 enterpriseid;
+ time_t seconds;
nstime_t ts;
int len_remain = len;
@@ -1201,13 +1202,17 @@ dissect_snmp_engineid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int o
/* most common enterprise-specific format: (ucd|net)-snmp random */
if ((enterpriseid==2021)||(enterpriseid==8072)) {
proto_item_append_text(item, (enterpriseid==2021) ? ": UCD-SNMP Random" : ": Net-SNMP Random");
- /* demystify: 4B/8B random, 4B epoch seconds */
+ /* demystify: 4B random, 4B/8B epoch seconds */
if ((len_remain==8) || (len_remain==12)) {
- proto_tree_add_item(tree, hf_snmp_engineid_data, tvb, offset, len_remain - 4, ENC_NA);
- seconds = tvb_get_letohl(tvb, offset + (len_remain - 4));
+ proto_tree_add_item(tree, hf_snmp_engineid_data, tvb, offset, 4, ENC_NA);
+ if (len_remain==8) {
+ seconds = (time_t)tvb_get_letohl(tvb, offset + 4);
+ } else {
+ seconds = (time_t)tvb_get_letohi64(tvb, offset + 4);
+ }
ts.secs = seconds;
ts.nsecs = 0;
- proto_tree_add_time_format_value(tree, hf_snmp_engineid_time, tvb, offset + (len_remain - 4), 4,
+ proto_tree_add_time_format_value(tree, hf_snmp_engineid_time, tvb, offset + 4, len_remain - 4,
&ts, "%s",
abs_time_secs_to_str(wmem_packet_scope(), seconds, ABSOLUTE_TIME_LOCAL, TRUE));
offset+=len_remain;