From: Arran Cudbard-Bell Date: Mon, 24 Jan 2022 22:41:25 +0000 (-0600) Subject: Try attribute references and xlats first... oops X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a998096bd58ec7309d4b13e92599512c590b0aa;p=thirdparty%2Ffreeradius-server.git Try attribute references and xlats first... oops --- diff --git a/src/lib/server/tmpl_tokenize.c b/src/lib/server/tmpl_tokenize.c index c8355dad0d..710badc53e 100644 --- a/src/lib/server/tmpl_tokenize.c +++ b/src/lib/server/tmpl_tokenize.c @@ -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 */