From 154f7e531db850f2f717b1e0b99bdf61d9a58f00 Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Wed, 16 Jul 2025 06:40:54 -0400 Subject: [PATCH] allow ::enum for 'case' statements --- src/lib/server/cf_file.c | 8 ++++++++ src/tests/keywords/switch-enum | 15 +++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/tests/keywords/switch-enum diff --git a/src/lib/server/cf_file.c b/src/lib/server/cf_file.c index 98e1e4b703..36edb1e991 100644 --- a/src/lib/server/cf_file.c +++ b/src/lib/server/cf_file.c @@ -2454,6 +2454,14 @@ check_for_eol: goto operator; case CF_UNLANG_ALLOW: + /* + * 'case ::foo' is allowed. For generality, we just expect that the second argument to + * 'case' is not an operator. + */ + if (strcmp(buff[1], "case") == 0) { + break; + } + /* * It's not a string, bare word, or attribute reference. It must be an operator. */ diff --git a/src/tests/keywords/switch-enum b/src/tests/keywords/switch-enum new file mode 100644 index 0000000000..a09624289a --- /dev/null +++ b/src/tests/keywords/switch-enum @@ -0,0 +1,15 @@ +Service-Type := ::Framed-User + +switch Service-Type { + case ::Framed-User { + success + } + + case ::Authenticate-Only { + test_fail + } + + default { + test_fail + } +} -- 2.47.3