forked from osmocom/wireshark
RADIUS: Remove some shortcuts in how we handle Ascend-Data-Filter
Do it via type "abinary" like the comment suggests. Note: VSA "abinary" code path untested. Ping-Bug: 11630 Change-Id: Ie8ebbb2fdbc9f04faad40150652277f1396ea030 Reviewed-on: https://code.wireshark.org/review/22973 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
71dd3658b7
commit
e7284adcdf
|
@ -983,6 +983,9 @@ radius_decrypt_avp(gchar *dest, int dest_len, tvbuff_t *tvb, int offset, int len
|
||||||
gcry_md_close(old_md5_handle);
|
gcry_md_close(old_md5_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_avp_to_tree_with_dissector(proto_tree *avp_tree, proto_item *avp_item, packet_info *pinfo, tvbuff_t *tvb, radius_avp_dissector_t *avp_dissector, guint32 avp_length, guint32 offset);
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
radius_integer(radius_attr_info_t *a, proto_tree *tree, packet_info *pinfo _U_, tvbuff_t *tvb, int offset, int len, proto_item *avp_item)
|
radius_integer(radius_attr_info_t *a, proto_tree *tree, packet_info *pinfo _U_, tvbuff_t *tvb, int offset, int len, proto_item *avp_item)
|
||||||
|
@ -1220,6 +1223,10 @@ radius_date(radius_attr_info_t *a, proto_tree *tree, packet_info *pinfo _U_, tvb
|
||||||
void
|
void
|
||||||
radius_abinary(radius_attr_info_t *a, proto_tree *tree, packet_info *pinfo _U_, tvbuff_t *tvb, int offset, int len, proto_item *avp_item)
|
radius_abinary(radius_attr_info_t *a, proto_tree *tree, packet_info *pinfo _U_, tvbuff_t *tvb, int offset, int len, proto_item *avp_item)
|
||||||
{
|
{
|
||||||
|
if (a->code.u8_code[0] == 242) {
|
||||||
|
add_avp_to_tree_with_dissector(tree, avp_item, pinfo, tvb, dissect_ascend_data_filter, len, offset);
|
||||||
|
return;
|
||||||
|
}
|
||||||
proto_tree_add_item(tree, a->hf, tvb, offset, len, ENC_NA);
|
proto_tree_add_item(tree, a->hf, tvb, offset, len, ENC_NA);
|
||||||
proto_item_append_text(avp_item, "%s", tvb_bytes_to_str(wmem_packet_scope(), tvb, offset, len));
|
proto_item_append_text(avp_item, "%s", tvb_bytes_to_str(wmem_packet_scope(), tvb, offset, len));
|
||||||
}
|
}
|
||||||
|
@ -1315,6 +1322,17 @@ radius_tlv(radius_attr_info_t *a, proto_tree *tree, packet_info *pinfo _U_, tvbu
|
||||||
proto_item_append_text(avp_item, "%d TLV(s) inside", tlv_num);
|
proto_item_append_text(avp_item, "%d TLV(s) inside", tlv_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_avp_to_tree_with_dissector(proto_tree *avp_tree, proto_item *avp_item, packet_info *pinfo, tvbuff_t *tvb, radius_avp_dissector_t *avp_dissector, guint32 avp_length, guint32 offset)
|
||||||
|
{
|
||||||
|
tvbuff_t *tvb_value;
|
||||||
|
const gchar *str;
|
||||||
|
|
||||||
|
tvb_value = tvb_new_subset_length(tvb, offset, avp_length);
|
||||||
|
str = avp_dissector(avp_tree, tvb_value, pinfo);
|
||||||
|
proto_item_append_text(avp_item, "%s", str);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_avp_to_tree(proto_tree *avp_tree, proto_item *avp_item, packet_info *pinfo, tvbuff_t *tvb, radius_attr_info_t *dictionary_entry, guint32 avp_length, guint32 offset)
|
add_avp_to_tree(proto_tree *avp_tree, proto_item *avp_item, packet_info *pinfo, tvbuff_t *tvb, radius_attr_info_t *dictionary_entry, guint32 avp_length, guint32 offset)
|
||||||
{
|
{
|
||||||
|
@ -1343,20 +1361,14 @@ add_avp_to_tree(proto_tree *avp_tree, proto_item *avp_item, packet_info *pinfo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proto_item_append_text(avp_item, ": ");
|
||||||
|
|
||||||
if (dictionary_entry->dissector) {
|
if (dictionary_entry->dissector) {
|
||||||
tvbuff_t *tvb_value;
|
add_avp_to_tree_with_dissector(avp_tree, avp_item, pinfo, tvb, dictionary_entry->dissector, avp_length, offset);
|
||||||
const gchar *str;
|
return;
|
||||||
|
|
||||||
tvb_value = tvb_new_subset_length(tvb, offset, avp_length);
|
|
||||||
|
|
||||||
str = dictionary_entry->dissector(avp_tree, tvb_value, pinfo);
|
|
||||||
|
|
||||||
proto_item_append_text(avp_item, ": %s", str);
|
|
||||||
} else {
|
|
||||||
proto_item_append_text(avp_item, ": ");
|
|
||||||
|
|
||||||
dictionary_entry->type(dictionary_entry, avp_tree, pinfo, tvb, offset, avp_length, avp_item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dictionary_entry->type(dictionary_entry, avp_tree, pinfo, tvb, offset, avp_length, avp_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -2797,15 +2809,6 @@ register_radius_fields(const char *unused _U_)
|
||||||
radius_register_avp_dissector(0, 58, dissect_rfc4675_egress_vlan_name);
|
radius_register_avp_dissector(0, 58, dissect_rfc4675_egress_vlan_name);
|
||||||
|
|
||||||
radius_register_avp_dissector(VENDOR_COSINE, 5, dissect_cosine_vpvc);
|
radius_register_avp_dissector(VENDOR_COSINE, 5, dissect_cosine_vpvc);
|
||||||
/*
|
|
||||||
* XXX - should we just call dissect_ascend_data_filter()
|
|
||||||
* in radius_abinary()?
|
|
||||||
*
|
|
||||||
* Note that there is no attribute 242 in dictionary.redback.
|
|
||||||
*/
|
|
||||||
radius_register_avp_dissector(VENDOR_ASCEND, 242, dissect_ascend_data_filter);
|
|
||||||
radius_register_avp_dissector(VENDOR_REDBACK, 242, dissect_ascend_data_filter);
|
|
||||||
radius_register_avp_dissector(0, 242, dissect_ascend_data_filter);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX - we should special-case Cisco attribute 252; see the comment in
|
* XXX - we should special-case Cisco attribute 252; see the comment in
|
||||||
|
|
Loading…
Reference in New Issue