From: Alan T. DeKok Date: Sun, 3 Sep 2023 12:59:36 +0000 (-0400) Subject: allow ::name for enum names X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a428fc9670286de0cd97a8d3a3e2a94492d14cec;p=thirdparty%2Ffreeradius-server.git allow ::name for enum names --- diff --git a/src/lib/server/tmpl_tokenize.c b/src/lib/server/tmpl_tokenize.c index 6b8414d5049..b75726cda85 100644 --- a/src/lib/server/tmpl_tokenize.c +++ b/src/lib/server/tmpl_tokenize.c @@ -2878,6 +2878,20 @@ fr_slen_t tmpl_afrom_substr(TALLOC_CTX *ctx, tmpl_t **out, if (fr_sbuff_is_char(&our_in, '&')) return tmpl_afrom_attr_substr(ctx, NULL, out, in, p_rules, t_rules); + /* + * ::value + * + * Treated as enum name. + * + * @todo - move the enum parsing here, and then unresolved tmpls _always_ become xlat references. + * and when we fix that, change the enum name to include the :: + */ + if (fr_sbuff_is_str_literal(&our_in, "::")) { + (void) fr_sbuff_advance(&our_in, 2); + goto do_enum; + } + + /* * Allow bareword xlats if we * find a '%' prefix. @@ -2995,6 +3009,7 @@ fr_slen_t tmpl_afrom_substr(TALLOC_CTX *ctx, tmpl_t **out, /* * Attempt to resolve enumeration values */ + do_enum: vpt = tmpl_alloc_null(ctx); /* diff --git a/src/tests/keywords/enum-name b/src/tests/keywords/enum-name new file mode 100644 index 00000000000..1220606fd50 --- /dev/null +++ b/src/tests/keywords/enum-name @@ -0,0 +1,7 @@ +&Service-Type := ::Framed-User + +if !(&Service-Type == ::Framed-User) { + test_fail +} + +success