fr_token_t op;
ssize_t slen;
fr_dict_attr_t const *parent_da;
+ int num;
tmpl_rules_t t_rules;
}
}
+ /*
+ * Can't assign to [*] or [#]
+ */
+ num = tmpl_num(map->lhs);
+ if ((num == NUM_ALL) || (num == NUM_COUNT)) {
+ cf_log_err(cs, "Invalid array reference in %s", name);
+ goto fail;
+ }
+
/*
* Do basic sanity checks and resolving.
*/
unlang_edit_t *edit, *edit_free;
unlang_t *c = NULL, *out = UNLANG_IGNORE;
map_t *map;
+ int num;
tmpl_rules_t t_rules;
fr_token_t op;
return NULL;
}
+ /*
+ * Can't assign to [*] or [#]
+ */
+ num = tmpl_num(map->lhs);
+ if ((num == NUM_ALL) || (num == NUM_COUNT)) {
+ cf_log_err(cp, "Invalid array reference in %s", map->lhs->name);
+ goto fail;
+ }
+
/*
* Do basic sanity checks and resolving.
*/
rm -f $(BUILD_DIR)/tests/test.keywords; \
exit 1; \
fi; \
- FOUND=$$(grep -E '^(Error : )?src/tests/keywords/$(notdir $@)' $@.log | head -1 | sed 's/.*\[//;s/\].*//'); \
+ FOUND=$$(grep 'Error : src/tests/keywords/' $@.log | head -1 | sed 's/]:.*//;s/.*\[//;s/\].*//'); \
EXPECTED=$$(grep -n ERROR $< | sed 's/:.*//'); \
if [ "$$EXPECTED" != "$$FOUND" ]; then \
cat $@.log; \
--- /dev/null
+#
+# We might allow this later. But for now, the code doesn't implement it, so we don't allow it.
+#
+&User-Name[*] = "foo" # ERROR
#
-# PRE: update if concat
+# PRE: if concat
#
&request -= &Packet-Type[*]
#
-# PRE: update
+# PRE:
#
-update request {
- &Tmp-String-0 := "foo"
- &Tmp-String-1 := "bar"
-}
+&Tmp-String-0 := "foo"
+&Tmp-String-1 := "bar"
#
# First choice
#
-update request {
- &Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]}}"
-}
-
+&Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]}}"
if (&Tmp-String-2[0] != 'foo') {
fail
}
#
# Second choice
#
-update request {
- &Tmp-String-0 !* ANY
-}
-update request {
- &Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]}}"
-}
+&request -= &Tmp-String-0[*]
+&Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]}}"
if (&Tmp-String-2[0] != 'bar') {
fail
}
#
# Multiple things in an alternation
#
-update request {
- &Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]} foo}"
-}
+&Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]} foo}"
if (&Tmp-String-2[0] != 'bar foo') {
fail
}
#
# Everything null
#
-update request {
- &Tmp-String-1 !* ANY
-}
-update request {
- &Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]}}"
-}
+&request -= &Tmp-String-1[*]
+&Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]}}"
if (!&Tmp-String-2[0] || (&Tmp-String-2[0] != "")) {
fail
}
-#
-# PRE: update
-#
-
#
# Everything null
#
-update request {
- &Tmp-String-0 !* ANY
- &Tmp-String-1 !* ANY
-}
-update request {
- &Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]}}%(delay_10s:)"
-}
+&request -= &Tmp-String-0[*]
+&request -= &Tmp-String-1[*]
+
+&Tmp-String-2 := "%{%{Tmp-String-0[0]}:-%{Tmp-String-1[0]}}%(delay_10s:)"
success
-#
-# PRE: update
-#
-
-update request {
- &Tmp-IP-Address-0 := 192.0.2.1
- &Tmp-IP-Address-0 += 192.0.2.2
+&request += {
+ &Tmp-IP-Address-0 = 192.0.2.1
+ &Tmp-IP-Address-0 = 192.0.2.2
}
-
if ("%{Tmp-IP-Address-0[#]}" != 2) {
test_fail
}
-if (("%{Tmp-IP-Address-0[0]}" != 192.0.2.1) || ("%{Tmp-IP-Address-0[1]}" != 192.0.2.2)) {
+if ((&Tmp-IP-Address-0[0] != 192.0.2.1) || ("%{Tmp-IP-Address-0[1]}" != 192.0.2.2)) {
test_fail
}