]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Try attribute references and xlats first... oops
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 24 Jan 2022 22:41:25 +0000 (16:41 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 24 Jan 2022 22:41:25 +0000 (16:41 -0600)
src/lib/server/tmpl_tokenize.c

index c8355dad0d037823d938fb75097d552c3cc66b6c..710badc53e958b9dae335bf5676611329a6aec83 100644 (file)
@@ -2565,35 +2565,6 @@ ssize_t tmpl_afrom_substr(TALLOC_CTX *ctx, tmpl_t **out,
 
        switch (quote) {
        case T_BARE_WORD:
-               /*
-                *      Deal with explicit casts...
-                */
-               if (!fr_type_is_null(t_rules->data.cast)) {
-                       fr_value_box_t tmp, *actual;
-
-                       if (!fr_type_is_leaf(t_rules->data.cast)) {
-                               fr_strerror_printf("%s is not a valid cast type",
-                                                  fr_type_to_str(t_rules->data.cast));
-                               return 0;
-                       }
-
-                       vpt = tmpl_alloc_null(ctx);
-                       slen = fr_value_box_from_substr(vpt, &tmp,
-                                                       t_rules->data.cast, t_rules->data.enumv,
-                                                       in, p_rules, false);
-                       if (slen < 0) {
-                               talloc_free(vpt);
-                               return slen;
-                       }
-
-                       tmpl_init(vpt, TMPL_TYPE_DATA, quote, fr_sbuff_start(&our_in), fr_sbuff_used(&our_in));
-
-                       actual = tmpl_value(vpt);
-                       fr_value_box_copy_shallow(NULL, actual, &tmp);
-
-                       return fr_sbuff_set(in, &our_in);
-               }
-
                /*
                 *      Skip other bareword types if
                 *      we find a '&' prefix.
@@ -2634,6 +2605,35 @@ ssize_t tmpl_afrom_substr(TALLOC_CTX *ctx, tmpl_t **out,
                        return fr_sbuff_set(in, &our_in);
                }
 
+               /*
+                *      Deal with explicit casts...
+                */
+               if (!fr_type_is_null(t_rules->data.cast)) {
+                       fr_value_box_t tmp, *actual;
+
+                       if (!fr_type_is_leaf(t_rules->data.cast)) {
+                               fr_strerror_printf("%s is not a valid cast type",
+                                                  fr_type_to_str(t_rules->data.cast));
+                               return 0;
+                       }
+
+                       vpt = tmpl_alloc_null(ctx);
+                       slen = fr_value_box_from_substr(vpt, &tmp,
+                                                       t_rules->data.cast, t_rules->data.enumv,
+                                                       in, p_rules, false);
+                       if (slen < 0) {
+                               talloc_free(vpt);
+                               return slen;
+                       }
+
+                       tmpl_init(vpt, TMPL_TYPE_DATA, quote, fr_sbuff_start(&our_in), fr_sbuff_used(&our_in));
+
+                       actual = tmpl_value(vpt);
+                       fr_value_box_copy_shallow(NULL, actual, &tmp);
+
+                       return fr_sbuff_set(in, &our_in);
+               }
+
                /*
                 *      See if it's a boolean value
                 */