From: Alan T. DeKok Date: Thu, 21 Jul 2022 12:52:13 +0000 (-0400) Subject: add and use fr_list_assignment_op X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=874acb596c790d3e14ee9fc257cc0446a427a5da;p=thirdparty%2Ffreeradius-server.git add and use fr_list_assignment_op --- diff --git a/src/lib/server/cf_file.c b/src/lib/server/cf_file.c index 138242771df..b1c159d9a5d 100644 --- a/src/lib/server/cf_file.c +++ b/src/lib/server/cf_file.c @@ -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; } diff --git a/src/lib/unlang/compile.c b/src/lib/unlang/compile.c index e20f1667fd9..9afd9989985 100644 --- a/src/lib/unlang/compile.c +++ b/src/lib/unlang/compile.c @@ -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; } diff --git a/src/lib/util/token.c b/src/lib/util/token.c index 78c8bd92332..a8f30c3289d 100644 --- a/src/lib/util/token.c +++ b/src/lib/util/token.c @@ -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), diff --git a/src/lib/util/token.h b/src/lib/util/token.h index 3e5041085c8..ce14f78ae82 100644 --- a/src/lib/util/token.h +++ b/src/lib/util/token.h @@ -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);