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