]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
allow ::enum for 'case' statements
authorAlan T. DeKok <aland@freeradius.org>
Wed, 16 Jul 2025 10:40:54 +0000 (06:40 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 16 Jul 2025 11:06:02 +0000 (07:06 -0400)
src/lib/server/cf_file.c
src/tests/keywords/switch-enum [new file with mode: 0644]

index 98e1e4b703ebb3acde158b484c4c5fbd7582ab7a..36edb1e991e5d3ced0d1e0c11a6b0e01cf67d693 100644 (file)
@@ -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 (file)
index 0000000..a096242
--- /dev/null
@@ -0,0 +1,15 @@
+Service-Type := ::Framed-User
+
+switch Service-Type {
+       case ::Framed-User {
+               success
+       }
+
+       case ::Authenticate-Only {
+               test_fail
+       }
+
+       default {
+               test_fail
+       }
+}