summaryrefslogtreecommitdiff
path: root/src/cmd/ksh93/ksh-regress.rt
blob: d3d71a1b48a7583d9e19c78107462c66841045b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
NOTE regression tests for --regress enabled ksh

UNIT ksh-regress

EXPORT HOME=. ENV=.env.sh LC_ALL=C HISTFILE=

TEST mode suid/sgid combinations

# these tests are the product { all modes combinations } X { tests }

defaults=(
	"etc=$HOME"
	"source"
)
modes=(
	interactive
	login
	privileged
	rc
	restricted
)
tests=(
	""
	"euid=0"
	"euid=0 p_suid=0"
	"euid=0 p_suid=99999"
	"euid=1"
	"euid=1 p_suid=0"
	"euid=1 p_suid=99999"
	"egid=1"
	"egid=1 p_suid=0"
	"egid=1 p_suid=99999"
)

integer n=1 m=${#modes[@]}
d=
for o in ${defaults[@]}
do	d="$d --regress=$o"
done
for ((b=0; b<m; b++))
do	(( n *= 3 ))
done
for (( b=0; b<n; b++ ))
do	k=
	z=$(printf "%0$m..3u" $b)
	for (( i=0; i<m; i++ ))
	do	case $z in
		1*)	k="$k --no${modes[i]}" ;;
		2*)	k="$k --${modes[i]}" ;;
		esac
		z=${z#?}
	done
	for t in "${tests[@]}"
	do	o=$d
		for r in $t
		do	o="$o --regress=$r"
		done
		o="$o $k"

EXEC $o <<!
set --state
!

	done
done

TEST privileged/noprivileged sequence

EXEC --regress=etc=. --regress=euid=1 --privileged <<!
set --state; set --noprivileged; set --state; set --privileged; set --state; set --noprivileged; set --state
!