]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
use ::enum-name for subrequest enums
authorAlan T. DeKok <aland@freeradius.org>
Thu, 5 Sep 2024 17:19:06 +0000 (13:19 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 5 Sep 2024 23:04:07 +0000 (19:04 -0400)
doc/antora/modules/reference/pages/unlang/subrequest.adoc
src/lib/unlang/compile.c
src/tests/keywords/subrequest
src/tests/keywords/subrequest-cancel
src/tests/keywords/subrequest-detach
src/tests/keywords/subrequest-if
src/tests/keywords/subrequest-rcode
src/tests/keywords/subrequest-request-qualifiers
src/tests/keywords/subrequest-return
src/tests/keywords/subrequest-src-dst
src/tests/keywords/subrequest-src-dst-nested

index d9698ab633ac89fc15f2a47afaa19c5dca5cd524..fab9412e2e3f79fe693d93635c603b661078d0a5 100644 (file)
@@ -16,7 +16,7 @@ refer to parent requests.
 
 <type>:: The type of the child request being created.
 +
-The _<type>_ field is a either a packet name such as `Access-Request`,
+The _<type>_ field is a either an enumerated packet name such as `::Access-Request`,
 or a protocol name followed by a packet name, such as
 `dhcpv4.Discover`.  Please see the protocol dictionaries for a
 complete list of packet types for each protocol.
index 2ba29f285f7dcf8a78ecb1f04a4fd11aef8a6329..0883c64657f0362f5b6702a996aeaeffff8c1974 100644 (file)
@@ -3990,6 +3990,18 @@ static unlang_t *compile_subrequest(unlang_t *parent, unlang_compile_t *unlang_c
                return NULL;
        }
 
+       /*
+        *      ::enum is this dictionary, "Packet-Type = ::enum"
+        */
+       if ((name2[0] == ':') && (name2[1] == ':')) {
+               dict = unlang_ctx->rules->attr.dict_def;
+               packet_name = name2;
+               goto get_packet_type;
+       }
+
+       /*
+        *      If !tmpl_require_enum_prefix, '&' means "attribute reference".
+        */
        if (name2[0] == '&') {
                size_t slen;
 
@@ -4070,6 +4082,11 @@ get_packet_type:
        }
 
        if (packet_name) {
+               /*
+                *      Allow ::enum-name for packet types
+                */
+               if ((packet_name[0] == ':') && (packet_name[1] == ':')) packet_name += 2;
+
                type_enum = fr_dict_enum_by_name(da, packet_name, -1);
                if (!type_enum) {
                        cf_log_err(cs, "No such value '%s' for attribute 'Packet-Type' in namespace '%s'",
index 83e2675dad29a991722846a5f8400d5acf8fa473..b5560f827c377dd910f65641068ea865b5235222 100644 (file)
@@ -1,4 +1,4 @@
-subrequest Access-Request {
+subrequest ::Access-Request {
        &parent.control.User-Name := 'bob'
        success
 }
index f3eca48ad1927d0a083264686a460ccb4ebfbee2..74229e8a26cf7f0edc609e24f2010a3c560d233e 100644 (file)
@@ -2,7 +2,7 @@ string foo
 string bar
 
 # Cancel in subrequest
-subrequest Access-Request {
+subrequest ::Access-Request {
        &parent.foo := 'testing'
 
        # Immediately cancel the subrequest
index 40df3c3d45989c78526429085fad6eb3a0d850a1..b791c93837af28a522f8147c802876ffaedec533 100644 (file)
@@ -4,7 +4,7 @@
 &Filter-Id := 'testing'
 
 # Cancel in subrequest
-subrequest Access-Request {
+subrequest ::Access-Request {
        detach
 
        # Smoke test, check for crashes
@@ -34,7 +34,7 @@ fail {
 }
 
 # Check that detached requests can be cancelled
-subrequest Access-Request {
+subrequest ::Access-Request {
        detach
 
        # Smoke test for cancelling detached requests
index c88eda26710d492b6dc6ae314f6c2d39934be2ed..9c17bd5149a2da4205e22cdcf84152d599f50b4a 100644 (file)
@@ -1,7 +1,7 @@
 #
 #  PRE: subrequest
 #
-subrequest Access-Request {
+subrequest ::Access-Request {
        &User-Name := &parent.request.User-Name
 
        if (!&User-Name) {
index ff85da294001a4064da80a28bf6922ed36d2f7dc..06473df9269c7d6e20162704cbfa1c7f7302f4c7 100644 (file)
@@ -1,6 +1,6 @@
 
 # request->rcode is updated to the result of the subrequest section
-subrequest Access-Request {
+subrequest ::Access-Request {
        ok {
                ok = 10
        }
index c398218de0e2d979106fd8e54f2b2a95a07d6c9b..177a5c8f2b44de396b19ddc81e213d85f2f697cc 100644 (file)
@@ -1,4 +1,4 @@
-subrequest Access-Request {
+subrequest ::Access-Request {
        #
        #  Prefix/attribute parsing disambiguation
        #
@@ -6,10 +6,10 @@ subrequest Access-Request {
 
        &User-Name := "obo"
 
-       subrequest Access-Request {
+       subrequest ::Access-Request {
                &User-Name := "jim"
 
-               subrequest Access-Request {
+               subrequest ::Access-Request {
                        &User-Name := "joe"
 
                        &outer.request += {
index 9254bdfab1f7c5cfa0de88fc4d3dd0fb04ee6385..c9f98878d2e6a8e7d4c764c99934010e3b0d8246 100644 (file)
@@ -1,4 +1,4 @@
-subrequest Access-Request {
+subrequest ::Access-Request {
        &parent.request.Filter-Id := "testing1234"
 
        return
index e8bc15b46934c66dc831868107d9ac6c6f851579..23a64046e96d6470609f5625a21c7601cfef9f68 100644 (file)
@@ -1,7 +1,7 @@
 #
 #  PRE: subrequest
 #
-subrequest Access-Request &request &reply.Tmp-Group-0 {
+subrequest ::Access-Request &request &reply.Tmp-Group-0 {
        if (!&User-Name) {
                test_fail
        }
index 23ee615728054e9a7ff8e956da477251119fb691..b4e65a621bd2568334e335556d50967531c858eb 100644 (file)
@@ -1,7 +1,7 @@
 #
 #  PRE: subrequest
 #
-subrequest Access-Request &request &reply.Tmp-Group-0 {
+subrequest ::Access-Request &request &reply.Tmp-Group-0 {
        subrequest Access-Request &request &reply.Tmp-Group-0 {
                if (!&User-Name) {
                        test_fail