From: Alan T. DeKok Date: Mon, 6 Jan 2025 23:44:47 +0000 (-0500) Subject: add callback to parse protocol-specific data types X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a3bf07ded95b2c708a4058770485b8c332f1dd4;p=thirdparty%2Ffreeradius-server.git add callback to parse protocol-specific data types --- diff --git a/src/lib/util/dict.h b/src/lib/util/dict.h index 8d66cf25807..ca9b408efe2 100644 --- a/src/lib/util/dict.h +++ b/src/lib/util/dict.h @@ -304,6 +304,7 @@ typedef enum { } fr_dict_attr_err_t; typedef bool (*fr_dict_attr_valid_func_t)(fr_dict_attr_t *da); +typedef bool (*fr_dict_attr_type_parse_t)(fr_type_t *type, fr_dict_attr_flags_t *flags, char const *name); /* * Forward declarations to avoid circular references. @@ -449,6 +450,7 @@ typedef struct { ///< Called when comparing attributes by their fields. } flags; + fr_dict_attr_type_parse_t type_parse; //!< parse unknown type names fr_dict_attr_valid_func_t valid; //!< Validation function to ensure that ///< new attributes are valid. } attr; diff --git a/src/lib/util/dict_tokenize.c b/src/lib/util/dict_tokenize.c index 03c2d4178f0..8501728dc3d 100644 --- a/src/lib/util/dict_tokenize.c +++ b/src/lib/util/dict_tokenize.c @@ -435,8 +435,16 @@ static int dict_process_type_field(dict_tokenize_ctx_t *dctx, char const *name, */ type = fr_type_from_str(name); if (fr_type_is_null(type)) { - fr_strerror_printf("Unknown data type '%s'", name); - return -1; + fr_dict_attr_t *da = *da_p; + + if (!da->dict->proto->attr.type_parse) { + fr_strerror_printf("Unknown data type '%s'", name); + return -1; + } + + if (!da->dict->proto->attr.type_parse(&type, &da->flags, name)) { + return -1; + } } return dict_attr_type_init(da_p, type);