From: Alan T. DeKok Date: Thu, 8 May 2025 01:40:06 +0000 (-0400) Subject: quote strings are strings X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bf8e643423dd1fdf65a4e5345be0336f07f7bc3d;p=thirdparty%2Ffreeradius-server.git quote strings are strings --- diff --git a/src/lib/server/tmpl_eval.c b/src/lib/server/tmpl_eval.c index e0acc1530e5..d19ff0f96ba 100644 --- a/src/lib/server/tmpl_eval.c +++ b/src/lib/server/tmpl_eval.c @@ -1336,6 +1336,8 @@ fr_type_t tmpl_data_type(tmpl_t const *vpt) { if (tmpl_rules_cast(vpt) != FR_TYPE_NULL) return tmpl_rules_cast(vpt); + if (vpt->quote != T_BARE_WORD) return FR_TYPE_STRING; + if (tmpl_is_data(vpt)) return tmpl_value_type(vpt); if (tmpl_is_attr(vpt)) return tmpl_attr_tail_da(vpt)->type; diff --git a/src/lib/unlang/xlat_tokenize.c b/src/lib/unlang/xlat_tokenize.c index 2699e0106b9..d6c6f6b525f 100644 --- a/src/lib/unlang/xlat_tokenize.c +++ b/src/lib/unlang/xlat_tokenize.c @@ -2069,6 +2069,8 @@ fr_type_t xlat_data_type(xlat_exp_head_t const *head) if (xlat_exp_next(head, node)) return FR_TYPE_NULL; + if (node->quote != T_BARE_WORD) return FR_TYPE_STRING; + if (node->type == XLAT_FUNC) { return node->call.func->return_type; } diff --git a/src/tests/keywords/switch-string b/src/tests/keywords/switch-string new file mode 100644 index 00000000000..2b23aa091d3 --- /dev/null +++ b/src/tests/keywords/switch-string @@ -0,0 +1,19 @@ +# +# PRE: switch +# + +switch "%str.substr(%{User-Name}, 0, 3)" { + case 'bob' { + success + } + + case 'doug' { + Filter-Id := "doug" + test_fail + } + + default { + Filter-Id := "default" + test_fail + } +}