]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
don't allow <cast>
authorAlan T. DeKok <aland@freeradius.org>
Sat, 24 Aug 2024 11:51:05 +0000 (07:51 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 24 Aug 2024 12:28:26 +0000 (08:28 -0400)
The rest of the parser hasn't supported it for a while, so we also
remove it from tmpl_preparse()

src/lib/server/tmpl_tokenize.c

index 5411ddaf2c7f90449a88eb877443d47e111c2d0c..e0bcd69f8f6bfc0846f6b2345103081c9f38c114 100644 (file)
@@ -3513,10 +3513,7 @@ ssize_t tmpl_cast_from_substr(tmpl_rules_t *rules, fr_sbuff_t *in)
        fr_type_t               cast;
        ssize_t                 slen;
 
-       if (fr_sbuff_next_if_char(&our_in, '<')) {
-               close = '>';
-
-       } else if (fr_sbuff_next_if_char(&our_in, '(')) {
+       if (fr_sbuff_next_if_char(&our_in, '(')) {
                close = ')';
 
        } else {
@@ -5249,55 +5246,12 @@ ssize_t tmpl_preparse(char const **out, size_t *outlen, char const *in, size_t i
        while (isspace((uint8_t) *p) && (p < end)) p++;
        if (p >= end) return p - in;
 
-       if (*p == '<') {
-               fr_type_t cast;
-               char const *q;
-
-               if (!castda) {
-                       fr_strerror_const("Unexpected cast");
-               return_p:
-                       return -(p - in);
-               }
-
-               p++;
-               fr_skip_whitespace(p);
-
-               for (q = p; *q && !isspace((uint8_t) *q) && (*q != '>'); q++) {
-                       /* nothing */
-               }
-
-               cast = fr_table_value_by_substr(fr_type_table, p, q - p, FR_TYPE_NULL);
-               if (fr_type_is_null(cast)) {
-                       return_P("Unknown data type");
-               }
-
-               /*
-                *      We can only cast to basic data types.  Complex ones
-                *      are forbidden.
-                */
-               if (fr_type_is_non_leaf(cast)) {
-                       return_P("Forbidden data type in cast");
-               }
-
-               *castda = fr_dict_attr_child_by_num(fr_dict_root(fr_dict_internal()), FR_CAST_BASE + cast);
-               if (!*castda) {
-                       return_P("Cannot cast to this data type");
-               }
-
-               p = q;
-               fr_skip_whitespace(p);
-               if (*p != '>') {
-                       return_P("Expected '>'");
-               }
-               p++;
-
-               fr_skip_whitespace(p);
-       }
-
        if (require_regex) {
                if (castda && *castda) {
                        p++;
-                       return_P("Invalid cast before regular expression");
+                       fr_strerror_const("Invalid cast before regular expression");
+               return_p:
+                       return -(p - in);
                }
 
                /*