1271294Sngie#!/bin/sh
2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/chmod/11.t 211352 2010-08-15 21:24:17Z pjd $
3271294Sngie
4271294Sngiedesc="chmod returns EFTYPE if the effective user ID is not the super-user, the mode includes the sticky bit (S_ISVTX), and path does not refer to a directory"
5271294Sngie
6271294Sngiedir=`dirname $0`
7271294Sngie. ${dir}/../misc.sh
8271294Sngie
9271294Sngieif supported lchmod; then
10271294Sngie	echo "1..173"
11271294Sngieelse
12271294Sngie	echo "1..109"
13271294Sngiefi
14271294Sngie
15271294Sngien0=`namegen`
16271294Sngien1=`namegen`
17271294Sngien2=`namegen`
18271294Sngie
19271294Sngieexpect 0 mkdir ${n0} 0755
20271294Sngiecdir=`pwd`
21271294Sngiecd ${n0}
22271294Sngie
23271294Sngiefor type in regular dir fifo block char socket symlink; do
24271294Sngie	if [ "${type}" != "symlink" ]; then
25271294Sngie		create_file ${type} ${n1}
26271294Sngie		expect 0 chmod ${n1} 01621
27271294Sngie		expect 01621 stat ${n1} mode
28271294Sngie		expect 0 symlink ${n1} ${n2}
29271294Sngie		expect 0 chmod ${n2} 01700
30271294Sngie		expect 01700 stat ${n1} mode
31271294Sngie		expect 0 unlink ${n2}
32271294Sngie		if [ "${type}" = "dir" ]; then
33271294Sngie			expect 0 rmdir ${n1}
34271294Sngie		else
35271294Sngie			expect 0 unlink ${n1}
36271294Sngie		fi
37271294Sngie	fi
38271294Sngie
39271294Sngie	if supported lchmod; then
40271294Sngie		create_file ${type} ${n1}
41271294Sngie		expect 0 lchmod ${n1} 01621
42271294Sngie		expect 01621 lstat ${n1} mode
43271294Sngie		if [ "${type}" = "dir" ]; then
44271294Sngie			expect 0 rmdir ${n1}
45271294Sngie		else
46271294Sngie			expect 0 unlink ${n1}
47271294Sngie		fi
48271294Sngie	fi
49271294Sngiedone
50271294Sngie
51271294Sngieexpect 0 mkdir ${n1} 0755
52271294Sngieexpect 0 chown ${n1} 65534 65534
53271294Sngieexpect 0 -u 65534 -g 65534 chmod ${n1} 01755
54271294Sngieexpect 01755 stat ${n1} mode
55271294Sngieexpect 0 symlink ${n1} ${n2}
56271294Sngieexpect 0 chmod ${n2} 01700
57271294Sngieexpect 01700 stat ${n1} mode
58271294Sngieexpect 0 unlink ${n2}
59271294Sngieexpect 0 rmdir ${n1}
60271294Sngie
61271294Sngiefor type in regular fifo block char socket symlink; do
62271294Sngie	if [ "${type}" != "symlink" ]; then
63271294Sngie		create_file ${type} ${n1} 0640 65534 65534
64271294Sngie		expect 0 symlink ${n1} ${n2}
65271294Sngie		case "${os}" in
66271294Sngie		FreeBSD)
67271294Sngie			expect EFTYPE -u 65534 -g 65534 chmod ${n1} 01644
68271294Sngie			expect 0640 stat ${n1} mode
69271294Sngie			expect EFTYPE -u 65534 -g 65534 chmod ${n2} 01644
70271294Sngie			expect 0640 stat ${n1} mode
71271294Sngie			;;
72271294Sngie		SunOS)
73271294Sngie			expect 0 -u 65534 -g 65534 chmod ${n1} 01644
74271294Sngie			expect 0644 stat ${n1} mode
75271294Sngie			expect 0 -u 65534 -g 65534 chmod ${n2} 01640
76271294Sngie			expect 0640 stat ${n1} mode
77271294Sngie			;;
78271294Sngie		Linux)
79271294Sngie			expect 0 -u 65534 -g 65534 chmod ${n1} 01644
80271294Sngie			expect 01644 stat ${n1} mode
81271294Sngie			expect 0 -u 65534 -g 65534 chmod ${n2} 01640
82271294Sngie			expect 01640 stat ${n1} mode
83271294Sngie			;;
84271294Sngie		esac
85271294Sngie		expect 0 unlink ${n2}
86271294Sngie		if [ "${type}" = "dir" ]; then
87271294Sngie			expect 0 rmdir ${n1}
88271294Sngie		else
89271294Sngie			expect 0 unlink ${n1}
90271294Sngie		fi
91271294Sngie	fi
92271294Sngie
93271294Sngie	if supported lchmod; then
94271294Sngie		create_file ${type} ${n1} 0640 65534 65534
95271294Sngie		case "${os}" in
96271294Sngie		FreeBSD)
97271294Sngie			expect EFTYPE -u 65534 -g 65534 lchmod ${n1} 01644
98271294Sngie			expect 0640 lstat ${n1} mode
99271294Sngie			;;
100271294Sngie		SunOS)
101271294Sngie			expect 0 -u 65534 -g 65534 lchmod ${n1} 01644
102271294Sngie			expect 0644 lstat ${n1} mode
103271294Sngie			;;
104271294Sngie		Linux)
105271294Sngie			expect 0 -u 65534 -g 65534 lchmod ${n1} 01644
106271294Sngie			expect 01644 lstat ${n1} mode
107271294Sngie			;;
108271294Sngie		esac
109271294Sngie		if [ "${type}" = "dir" ]; then
110271294Sngie			expect 0 rmdir ${n1}
111271294Sngie		else
112271294Sngie			expect 0 unlink ${n1}
113271294Sngie		fi
114271294Sngie	fi
115271294Sngiedone
116271294Sngie
117271294Sngiecd ${cdir}
118271294Sngieexpect 0 rmdir ${n0}
119