]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
update tokenizer for tmpl_require_enum_prefix
authorAlan T. DeKok <aland@freeradius.org>
Mon, 2 Sep 2024 13:03:11 +0000 (09:03 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 2 Sep 2024 13:04:29 +0000 (09:04 -0400)
it still has issues parsing

(byte)Class

because it tries to parse "Class" as data type "byte"

src/lib/server/tmpl_tokenize.c
src/tests/keywords/all.mk
src/tests/keywords/vendor-specific-error [deleted file]

index 4c16db456fbe7fa0ec75a65f3dae2d70e428c1b7..f4f79c444a33eb934c2ff1ec72f61137d6bcfb58 100644 (file)
@@ -2237,12 +2237,21 @@ ssize_t tmpl_afrom_attr_substr(TALLOC_CTX *ctx, tmpl_attr_error_t *err,
         */
        switch (at_rules->prefix) {
        case TMPL_ATTR_REF_PREFIX_YES:
-               if (!fr_sbuff_next_if_char(&our_name, '&')) {
-                       fr_strerror_const("Invalid attribute reference, missing '&' prefix");
-                       if (err) *err = TMPL_ATTR_ERROR_BAD_PREFIX;
-                       FR_SBUFF_ERROR_RETURN(&our_name);
+               if (!tmpl_require_enum_prefix) {
+                       if (!fr_sbuff_next_if_char(&our_name, '&')) {
+                               fr_strerror_const("Invalid attribute reference, missing '&' prefix");
+                               if (err) *err = TMPL_ATTR_ERROR_BAD_PREFIX;
+                               FR_SBUFF_ERROR_RETURN(&our_name);
+                       }
+                       break;
                }
+               FALL_THROUGH;   /* if we do require enum prefixes, then the '&' is optional */
 
+       case TMPL_ATTR_REF_PREFIX_AUTO:
+               /*
+                *      '&' prefix can be there, but doesn't have to be
+                */
+               (void) fr_sbuff_next_if_char(&our_name, '&');
                break;
 
        case TMPL_ATTR_REF_PREFIX_NO:
@@ -2252,13 +2261,6 @@ ssize_t tmpl_afrom_attr_substr(TALLOC_CTX *ctx, tmpl_attr_error_t *err,
                        FR_SBUFF_ERROR_RETURN(&our_name);
                }
                break;
-
-       case TMPL_ATTR_REF_PREFIX_AUTO:
-               /*
-                *      '&' prefix can be there, but doesn't have to be
-                */
-               (void) fr_sbuff_next_if_char(&our_name, '&');
-               break;
        }
 
        MEM(vpt = tmpl_alloc(ctx, TMPL_TYPE_ATTR, T_BARE_WORD, NULL, 0));
@@ -5559,7 +5561,12 @@ ssize_t tmpl_preparse(char const **out, size_t *outlen, char const *in, size_t i
        default:
        bare_word:
                *out = p;
-               quote = '\0';
+
+               if (tmpl_require_enum_prefix) {
+                       quote = '['; /* foo[1] is OK */
+               } else {
+                       quote = '\0';
+               }
 
        skip_word:
                *type = T_BARE_WORD;
index 5d685e980126a3640ad3b0f80d8c0f455e2487f0..21371cc3a2f7bc9c02f778c2b30719b1c0a7b36d 100644 (file)
@@ -151,6 +151,8 @@ KEYWORD_LIBS        := $(addsuffix .la,$(addprefix rlm_,$(KEYWORD_MODULES))) rlm_csv.la
 #
 #      (make -k test.keywords 2>&1) | grep 'KEYWORD=' | sed 's/KEYWORD=//;s/ .*$//'
 #
+#  @todo - set "-S require_enum_prefix=yes" here, so that the flag is set _before_ we read the config files.
+#
 $(OUTPUT)/%: $(DIR)/% $(TEST_BIN_DIR)/unit_test_module | $(KEYWORD_RADDB) $(KEYWORD_LIBS) build.raddb rlm_test.la rlm_csv.la rlm_unpack.la
        $(eval CMD:=KEYWORD=$(notdir $@) $(TEST_BIN)/unit_test_module $(NEW_COND) $(UNIT_TEST_KEYWORD_ARGS.$(subst -,_,$(notdir $@))) -D share/dictionary -d src/tests/keywords/ -i "$@.attrs" -f "$@.attrs" -r "$@" -xx)
        @echo "KEYWORD-TEST $(notdir $@)"
diff --git a/src/tests/keywords/vendor-specific-error b/src/tests/keywords/vendor-specific-error
deleted file mode 100644 (file)
index 0f853e0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-#  PRE: update
-#
-#  Tests for Vendor-Specific 
-#
-update reply {
-       Vendor-Specific := "foo"        # ERROR
-}