On Mon, Jun 24, 2019 at 06:36:08PM +0200, Phil Sutter wrote:
> Parser already allows to quote user-defined strings in some places to
> avoid clashing with defined keywords, but not everywhere. Extend this
> support further and add a test case for it.
>
> Signed-off-by: Phil Sutter <[email protected]>
> ---
> Changes since v1:
> - Fix testcase, I forgot to commit adjustments done to it.
>
> Note: This is a reduced variant of "src: Quote user-defined names" sent
> back in January. Discussion was not conclusive regarding whether
> to quote these names on output or not, but I assume allowing for
> users to specify them by adding quotes is a step forward without
> drawbacks.
So this will fail later on, right?
nft list ruleset > file.nft
nft -f file.nft
> ---
> src/parser_bison.y | 3 ++-
> .../shell/testcases/nft-f/0018quoted-names_0 | 20 +++++++++++++++++++
> 2 files changed, 22 insertions(+), 1 deletion(-)
> create mode 100755 tests/shell/testcases/nft-f/0018quoted-names_0
>
> diff --git a/src/parser_bison.y b/src/parser_bison.y
> index 670e91f544c75..de8b097a4c222 100644
> --- a/src/parser_bison.y
> +++ b/src/parser_bison.y
> @@ -1761,7 +1761,7 @@ flowtable_list_expr : flowtable_expr_member
> | flowtable_list_expr COMMA opt_newline
> ;
>
> -flowtable_expr_member : STRING
> +flowtable_expr_member : string
> {
> $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
> current_scope(state),
> @@ -1968,6 +1968,7 @@ chain_policy : ACCEPT { $$ =
> NF_ACCEPT; }
> ;
>
> identifier : STRING
> + | QUOTED_STRING
> ;
>
> string : STRING
> diff --git a/tests/shell/testcases/nft-f/0018quoted-names_0
> b/tests/shell/testcases/nft-f/0018quoted-names_0
> new file mode 100755
> index 0000000000000..6526d66b8e8a1
> --- /dev/null
> +++ b/tests/shell/testcases/nft-f/0018quoted-names_0
> @@ -0,0 +1,20 @@
> +#!/bin/bash
> +
> +# Test if keywords are allowed as names if quoted
> +
> +set -e
> +
> +RULESET='
> +table inet "day" {
> + chain "minute" {}
> + set "hour" { type inet_service; }
> + flowtable "second" { hook ingress priority 0; devices = { "lo" }; }
> + counter "table" { packets 0 bytes 0 }
> + quota "chain" { 10 bytes }
> +}'
> +
> +$NFT -f - <<< "$RULESET"
> +
> +# XXX: not possible (yet)
> +#OUTPUT=$($NFT list ruleset)
> +#$NFT -f - <<< "$OUTPUT"
> --
> 2.21.0
>