xref: /freebsd/libexec/rc/tests/safe_eval_test.sh (revision 6eba055fcf5b0bbfbebcac59f5982d13815001b0)
1#-
2# SPDX-License-Identifier: BSD-2-Clause
3#
4# Copyright 2026 Simon J Gerraty
5#
6
7atf_test_case safe_set_reject
8safe_set_reject_head()
9{
10	atf_set "descr" "Verify that safe_set rejects shell meta chars"
11}
12
13safe_set_reject_body()
14{
15	__name="$(atf_get ident)"
16	__input=$(mktemp -t "${__name}.input")
17
18	cat <<'EOF' > "$__input"
19: ignore=this
20# ignore this too
21# avoid # in the middle of a quoted value like:
22# oops="this # will cause synatx error"
23quoted="this and that"
24simple=ok          # trailing comments ignored
25  also=ok          # leading white-space ignored
26	 also_wik=ok
27host=`hostname`'   # backtics - delete line
28os=$(uname -s)     # $() - delete line
29oops=one;hostname' # replace ; with _ so: one_hostname
30regex="prefix[abc-]*" # []* replaced with _
31EOF
32
33	__output=$(safe_set < "$__input" | tr '"\012' '\047;')
34	atf_check_equal "$__output" "quoted='this and that';simple=ok;also=ok;also_wik=ok;oops=one_hostname_;regex='prefix_abc-__';"
35}
36
37
38atf_test_case safe_set_xtras
39safe_set_xtras_head()
40{
41	atf_set "descr" "Verify that safe_set handles extra allowed chars"
42}
43
44safe_set_xtras_body()
45{
46	__name="$(atf_get ident)"
47	__input=$(mktemp -t "${__name}.input")
48
49	cat <<'EOF' > "$__input"
50: ignore=this
51# ignore this too
52regex="prefix[abc-]*"
53EOF
54
55	__output=$(safe_set "[]*" < "$__input" | tr '"\012' '\047;')
56	atf_check_equal "$__output" "regex='prefix[abc-]*';"
57}
58
59atf_init_test_cases()
60{
61	SAFE_EVAL=${SAFE_EVAL:-/libexec/safe_eval.sh}
62	. $SAFE_EVAL
63	atf_add_test_case safe_set_reject
64	atf_add_test_case safe_set_xtras
65}
66