]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add and use fr_list_assignment_op
authorAlan T. DeKok <aland@freeradius.org>
Thu, 21 Jul 2022 12:52:13 +0000 (08:52 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 23 Jul 2022 23:47:16 +0000 (19:47 -0400)
src/lib/server/cf_file.c
src/lib/unlang/compile.c
src/lib/util/token.c
src/lib/util/token.h

index 138242771df731b8a0f26e026471b641c3b3e11a..b1c159d9a5dae0369b349983765aa38d6c9bc3c0 100644 (file)
@@ -2180,8 +2180,8 @@ static int parse_input(cf_stack_t *stack)
                        return -1;
                }
 
-               if (!fr_assignment_op[name2_token]) {
-                       ERROR("%s[%d]: Parse error: Invalid assignment operator '%s' for group",
+               if (!fr_list_assignment_op[name2_token]) {
+                       ERROR("%s[%d]: Parse error: Invalid assignment operator '%s' for list",
                              frame->filename, frame->lineno, buff[2]);
                        return -1;
                }
index e20f1667fd9fac7163df9705f8e57053bd771f09..9afd9989985e24338b3d3c79658dd2450ee3facc 100644 (file)
@@ -1662,7 +1662,7 @@ static unlang_t *compile_edit_section(unlang_t *parent, unlang_compile_t *unlang
                return NULL;
        }
        op = cf_section_name2_quote(cs);
-       if ((op == T_INVALID) || !fr_assignment_op[op]) {
+       if ((op == T_INVALID) || !fr_list_assignment_op[op]) {
                cf_log_err(cs, "Invalid operator '%s' for editing list %s.", fr_tokens[op], cf_section_name1(cs));
                return NULL;
        }
index 78c8bd923321703facbbb0d55096fc39d79d0c3e..a8f30c3289d4e0f89e99a72f3b5cfacc34a0bc0c 100644 (file)
@@ -174,6 +174,18 @@ const bool fr_assignment_op[T_TOKEN_LAST] = {
        T(PREPEND),
 };
 
+const bool fr_list_assignment_op[T_TOKEN_LAST] = {
+       T(ADD_EQ),              /* append */
+       T(AND_EQ),              /* intersection */
+       T(OR_EQ),               /* union */
+       T(LE),                  /* merge RHS */
+       T(GE),                  /* merge LHS */
+
+       T(SET),
+       T(EQ),
+       T(PREPEND),             /* prepend */
+};
+
 const bool fr_equality_op[T_TOKEN_LAST] = {
        T(NE),
        T(GE),
index 3e5041085c81d64a7a0193181537b602be13b567..ce14f78ae82734e1a6b41752465e33bf445de916 100644 (file)
@@ -143,6 +143,7 @@ extern const bool fr_assignment_op[T_TOKEN_LAST];
 extern const bool fr_equality_op[T_TOKEN_LAST];
 extern const bool fr_binary_op[T_TOKEN_LAST];
 extern const bool fr_str_tok[T_TOKEN_LAST];
+extern const bool fr_list_assignment_op[T_TOKEN_LAST];
 
 int            getword (char const **ptr, char *buf, int buflen, bool unescape);
 fr_token_t     gettoken(char const **ptr, char *buf, int buflen, bool unescape);