From e7082f51949e2b2ed8a872978d706ab2d110f5af Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Sun, 14 Nov 2004 09:48:11 +0000 Subject: [PATCH] Since we can now handle SEQUENCE OF ANY uncomment this "difficult" field from the Attribute SEQUENCE to make it more complete. svn path=/trunk/; revision=12527 --- asn1/x509if/InformationFramework.asn | 12 +++--- asn1/x509if/x509if.cnf | 3 -- epan/dissectors/packet-x509if.c | 61 +++++++++++++++++++++------- 3 files changed, 52 insertions(+), 24 deletions(-) diff --git a/asn1/x509if/InformationFramework.asn b/asn1/x509if/InformationFramework.asn index cf46c993b6..01b8c213b2 100644 --- a/asn1/x509if/InformationFramework.asn +++ b/asn1/x509if/InformationFramework.asn @@ -25,13 +25,13 @@ IMPORTS AttributeId ::= OBJECT IDENTIFIER ---AttributeValue ::= ANY --- +AttributeValue ::= ANY + -- attribute data types Attribute ::= SEQUENCE { - type AttributeId --- value --- SET SIZE (0..MAX) OF AttributeValue + type AttributeId, + values + SET SIZE (0..MAX) OF AttributeValue -- valuesWithContext -- SET SIZE (1..MAX) OF -- SEQUENCE {value ANY, @@ -96,7 +96,7 @@ RelativeDistinguishedName ::= AttributeTypeAndDistinguishedValue ::= SEQUENCE { type AttributeId, - value ANY, + value AttributeValue, primaryDistinguished BOOLEAN OPTIONAL -- valuesWithContext -- SET SIZE (1..MAX) OF diff --git a/asn1/x509if/x509if.cnf b/asn1/x509if/x509if.cnf index 861ec0fa5c..e51db1fc3a 100644 --- a/asn1/x509if/x509if.cnf +++ b/asn1/x509if/x509if.cnf @@ -26,9 +26,6 @@ RDNSequence #.FN_BODY AttributeValue offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree); -#.FN_BODY AttributeTypeAndDistinguishedValue/value - offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree); - #.END diff --git a/epan/dissectors/packet-x509if.c b/epan/dissectors/packet-x509if.c index 339498e608..0c028fd58f 100644 --- a/epan/dissectors/packet-x509if.c +++ b/epan/dissectors/packet-x509if.c @@ -54,10 +54,12 @@ int hf_x509if_object_identifier_id = -1; /*--- Included file: packet-x509if-hf.c ---*/ static int hf_x509if_type = -1; /* AttributeId */ +static int hf_x509if_values = -1; /* SET_OF_AttributeValue */ +static int hf_x509if_values_item = -1; /* AttributeValue */ static int hf_x509if_rdnSequence = -1; /* RDNSequence */ static int hf_x509if_RDNSequence_item = -1; /* RelativeDistinguishedName */ static int hf_x509if_RelativeDistinguishedName_item = -1; /* AttributeTypeAndDistinguishedValue */ -static int hf_x509if_value = -1; /* T_value */ +static int hf_x509if_value = -1; /* AttributeValue */ static int hf_x509if_primaryDistinguished = -1; /* BOOLEAN */ /* named bits */ static int hf_x509if_AllowedSubset_baseObject = -1; @@ -72,6 +74,7 @@ static int hf_x509if_AllowedSubset_wholeSubtree = -1; /*--- Included file: packet-x509if-ett.c ---*/ static gint ett_x509if_Attribute = -1; +static gint ett_x509if_SET_OF_AttributeValue = -1; static gint ett_x509if_Name = -1; static gint ett_x509if_RDNSequence = -1; static gint ett_x509if_RelativeDistinguishedName = -1; @@ -102,8 +105,41 @@ static int dissect_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int return dissect_x509if_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_type); } + + +static int +dissect_x509if_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree); + + + + return offset; +} +static int dissect_values_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_values_item); +} +static int dissect_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_value); +} + +static const ber_sequence SET_OF_AttributeValue_set_of[1] = { + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_values_item }, +}; + +static int +dissect_x509if_SET_OF_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + SET_OF_AttributeValue_set_of, hf_index, ett_x509if_SET_OF_AttributeValue); + + return offset; +} +static int dissect_values(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509if_SET_OF_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_values); +} + static const ber_sequence Attribute_sequence[] = { { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_values }, { 0, 0, 0, NULL } }; @@ -124,20 +160,6 @@ dissect_x509if_AttributeType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offse } - -static int -dissect_x509if_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { - offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree); - - - - return offset; -} -static int dissect_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_x509if_T_value(FALSE, tvb, offset, pinfo, tree, hf_x509if_value); -} - - static int dissect_x509if_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { offset = dissect_ber_boolean(pinfo, tree, tvb, offset, hf_index); @@ -292,6 +314,14 @@ void proto_register_x509if(void) { { "type", "x509if.type", FT_STRING, BASE_NONE, NULL, 0, "", HFILL }}, + { &hf_x509if_values, + { "values", "x509if.values", + FT_UINT32, BASE_DEC, NULL, 0, + "Attribute/values", HFILL }}, + { &hf_x509if_values_item, + { "Item", "x509if.values_item", + FT_NONE, BASE_NONE, NULL, 0, + "Attribute/values/_item", HFILL }}, { &hf_x509if_rdnSequence, { "rdnSequence", "x509if.rdnSequence", FT_UINT32, BASE_DEC, NULL, 0, @@ -335,6 +365,7 @@ void proto_register_x509if(void) { /*--- Included file: packet-x509if-ettarr.c ---*/ &ett_x509if_Attribute, + &ett_x509if_SET_OF_AttributeValue, &ett_x509if_Name, &ett_x509if_RDNSequence, &ett_x509if_RelativeDistinguishedName,