]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
allow << and >>
authorAlan T. DeKok <aland@freeradius.org>
Thu, 10 Feb 2022 00:41:03 +0000 (19:41 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 10 Feb 2022 00:41:03 +0000 (19:41 -0500)
src/lib/unlang/xlat_expr.c
src/tests/xlat/expr.txt

index b33aaed8b14439fb1e2319baa2b4019a01357278..a18ec8e6552d1e203cd9e94f8c0c903cfa337190 100644 (file)
@@ -346,6 +346,8 @@ XLAT_BINARY_FUNC(op_div, T_DIV)
 XLAT_BINARY_FUNC(op_and, T_AND)
 XLAT_BINARY_FUNC(op_or,  T_OR)
 XLAT_BINARY_FUNC(op_xor,  T_XOR)
+XLAT_BINARY_FUNC(op_rshift, T_RSHIFT)
+XLAT_BINARY_FUNC(op_lshift, T_LSHIFT)
 
 XLAT_BINARY_FUNC(cmp_eq,  T_OP_CMP_EQ)
 XLAT_BINARY_FUNC(cmp_ne,  T_OP_NE)
@@ -640,6 +642,8 @@ int xlat_register_expressions(void)
        XLAT_REGISTER_BINARY_OP(T_AND, and);
        XLAT_REGISTER_BINARY_OP(T_OR, or);
        XLAT_REGISTER_BINARY_OP(T_XOR, xor);
+       XLAT_REGISTER_BINARY_OP(T_RSHIFT, rshift);
+       XLAT_REGISTER_BINARY_OP(T_LSHIFT, lshift);
 
        XLAT_REGISTER_BINARY_CMP(T_OP_CMP_EQ, eq);
        XLAT_REGISTER_BINARY_CMP(T_OP_NE, ne);
@@ -684,6 +688,8 @@ static const fr_sbuff_term_elem_t binary_ops[T_TOKEN_LAST] = {
        [ T_AND ]               = L("op_and"),
        [ T_OR ]                = L("op_or"),
        [ T_XOR ]               = L("op_xor"),
+       [ T_RSHIFT ]            = L("op_rshift"),
+       [ T_LSHIFT ]            = L("op_lshift"),
 
        [ T_LAND ]              = L("logical_and"),
        [ T_LOR ]               = L("logical_or"),
index b036027268515271bcc9ddfa370012ee00d3ccb4..6f18ba6d5af370ea0ccf9cbd4f8bf4e8ab315292 100644 (file)
@@ -30,3 +30,25 @@ match 0xabcdef1234
 
 xlat_expr 2 ^ 4
 match 6
+
+xlat_expr (uint32) 8 >> 2
+match 2
+
+xlat_expr (uint32) 1 << 31
+match 2147483648
+
+#
+#  The errors actually go out RPEDEBUG(), and aren't visible to unit_test_module :(
+#
+xlat_expr (uint32) 1 << 32
+match ERROR expanding xlat: 
+
+#
+#  This shifts it 8, and then tries to cast it to uint8?
+#
+xlat_expr (uint8) 1 << 8
+match ERROR expanding xlat: 
+
+# Cannot perform any operations for destination type ether
+xlat_expr 00:01:02:03:04:05 ^ 11:22:33:44:55:66
+match ERROR expanding xlat: