]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add tag compatible function
authorAlan T. DeKok <aland@freeradius.org>
Sat, 22 Feb 2025 16:21:14 +0000 (11:21 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 22 Feb 2025 19:29:38 +0000 (14:29 -0500)
some attributes can be encoded in multiple ways, but will all
decode to the same FreeRADIUS data type.  Adding a function
allows us to be more flexible about the input data.

src/protocols/der/base.c
src/protocols/der/der.h

index 23270de7b3184dfd2fbbe4bf03b382d713153b6f..ccde8033fa3152ac32b8cf2c3ebfa118936fa7ed 100644 (file)
@@ -74,6 +74,16 @@ char const *fr_der_tag_to_str(fr_der_tag_t tag)
        return fr_table_str_by_value(tag_name_to_number, tag, "???");
 }
 
+static const uint64_t der_tags_compatible[FR_DER_TAG_MAX] = {
+       [FR_DER_TAG_UTC_TIME] = (1 << FR_DER_TAG_GENERALIZED_TIME),
+       [FR_DER_TAG_GENERALIZED_TIME] = (1 << FR_DER_TAG_UTC_TIME),
+};
+
+bool fr_der_tags_compatible(fr_der_tag_t tag1, fr_der_tag_t tag2)
+{
+       return (der_tags_compatible[tag1] & (1 << (uint64_t) tag2)) != 0;
+}
+
 /*
  *     Create a mapping between FR_TYPE_* and valid FR_DER_TAG_*'s
  */
index 152f8f1ded71d3f7b2b855d8e4bd9fa740ef869a..5dab7abf9651a7a57816fa029f14c240aed57d4c 100644 (file)
@@ -132,6 +132,7 @@ static inline fr_der_attr_flags_t const *fr_der_attr_flags(fr_dict_attr_t const
  */
 fr_der_tag_t fr_type_to_der_tag_default(fr_type_t type);
 bool   fr_type_to_der_tag_valid(fr_type_t type, fr_der_tag_t tag);
+bool   fr_der_tags_compatible(fr_der_tag_t tag1, fr_der_tag_t tag2);
 char   const *fr_der_tag_to_str(fr_der_tag_t tag);
 
 int    fr_der_global_init(void);