1271294Sngie#!/bin/sh
2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/chown/00.t 228975 2011-12-30 00:04:11Z uqs $
3271294Sngie
4271294Sngiedesc="chown changes ownership"
5271294Sngie
6271294Sngiedir=`dirname $0`
7271294Sngie. ${dir}/../misc.sh
8271294Sngie
9271294Sngieif supported lchmod; then
10271294Sngie	echo "1..1349"
11271294Sngieelse
12271294Sngie	echo "1..1323"
13271294Sngiefi
14271294Sngie
15271294Sngien0=`namegen`
16271294Sngien1=`namegen`
17271294Sngien2=`namegen`
18271294Sngie
19271294Sngieexpect 0 mkdir ${n2} 0755
20271294Sngiecdir=`pwd`
21271294Sngiecd ${n2}
22271294Sngie
23271294Sngie# super-user can always modify ownership
24271294Sngiefor type in regular dir fifo block char socket symlink; do
25271294Sngie	if [ "${type}" != "symlink" ]; then
26271294Sngie		create_file ${type} ${n0}
27271294Sngie
28271294Sngie		expect 0 chown ${n0} 123 456
29271294Sngie		expect 123,456 lstat ${n0} uid,gid
30271294Sngie		expect 0 chown ${n0} 0 0
31271294Sngie		expect 0,0 lstat ${n0} uid,gid
32271294Sngie
33271294Sngie		expect 0 symlink ${n0} ${n1}
34271294Sngie		uidgid=`${fstest} lstat ${n1} uid,gid`
35271294Sngie		expect 0 chown ${n1} 123 456
36271294Sngie		expect 123,456 stat ${n1} uid,gid
37271294Sngie		expect 123,456 stat ${n0} uid,gid
38271294Sngie		expect ${uidgid} lstat ${n1} uid,gid
39271294Sngie		expect 0 unlink ${n1}
40271294Sngie
41271294Sngie		if [ "${type}" = "dir" ]; then
42271294Sngie			expect 0 rmdir ${n0}
43271294Sngie		else
44271294Sngie			expect 0 unlink ${n0}
45271294Sngie		fi
46271294Sngie	fi
47271294Sngie
48271294Sngie	create_file ${type} ${n0}
49271294Sngie	expect 0 lchown ${n0} 123 456
50271294Sngie	expect 123,456 lstat ${n0} uid,gid
51271294Sngie	if [ "${type}" = "dir" ]; then
52271294Sngie		expect 0 rmdir ${n0}
53271294Sngie	else
54271294Sngie		expect 0 unlink ${n0}
55271294Sngie	fi
56271294Sngiedone
57271294Sngie
58271294Sngie# non-super-user can modify file group if he is owner of a file and
59271294Sngie# gid he is setting is in his groups list.
60271294Sngiefor type in regular dir fifo block char socket symlink; do
61271294Sngie	if [ "${type}" != "symlink" ]; then
62271294Sngie		create_file ${type} ${n0}
63271294Sngie
64271294Sngie		expect 0 chown ${n0} 65534 65533
65271294Sngie		expect 65534,65533 lstat ${n0} uid,gid
66271294Sngie		expect 0 -u 65534 -g 65532,65531 -- chown ${n0} -1 65532
67271294Sngie		expect 65534,65532 lstat ${n0} uid,gid
68271294Sngie		expect 0 -u 65534 -g 65532,65531 chown ${n0} 65534 65531
69271294Sngie		expect 65534,65531 lstat ${n0} uid,gid
70271294Sngie
71271294Sngie		expect 0 symlink ${n0} ${n1}
72271294Sngie		uidgid=`${fstest} lstat ${n1} uid,gid`
73271294Sngie		expect 0 chown ${n1} 65534 65533
74271294Sngie		expect 65534,65533 stat ${n0} uid,gid
75271294Sngie		expect 65534,65533 stat ${n1} uid,gid
76271294Sngie		expect ${uidgid} lstat ${n1} uid,gid
77271294Sngie		expect 0 -u 65534 -g 65532,65531 -- chown ${n1} -1 65532
78271294Sngie		expect 65534,65532 stat ${n0} uid,gid
79271294Sngie		expect 65534,65532 stat ${n1} uid,gid
80271294Sngie		expect ${uidgid} lstat ${n1} uid,gid
81271294Sngie		expect 0 -u 65534 -g 65532,65531 chown ${n1} 65534 65531
82271294Sngie		expect 65534,65531 stat ${n0} uid,gid
83271294Sngie		expect 65534,65531 stat ${n1} uid,gid
84271294Sngie		expect ${uidgid} lstat ${n1} uid,gid
85271294Sngie		expect 0 unlink ${n1}
86271294Sngie
87271294Sngie		if [ "${type}" = "dir" ]; then
88271294Sngie			expect 0 rmdir ${n0}
89271294Sngie		else
90271294Sngie			expect 0 unlink ${n0}
91271294Sngie		fi
92271294Sngie	fi
93271294Sngie
94271294Sngie	create_file ${type} ${n0}
95271294Sngie	expect 0 lchown ${n0} 65534 65533
96271294Sngie	expect 65534,65533 lstat ${n0} uid,gid
97271294Sngie	expect 0 -u 65534 -g 65532,65531 -- lchown ${n0} -1 65532
98271294Sngie	expect 65534,65532 lstat ${n0} uid,gid
99271294Sngie	expect 0 -u 65534 -g 65532,65531 lchown ${n0} 65534 65531
100271294Sngie	expect 65534,65531 lstat ${n0} uid,gid
101271294Sngie	if [ "${type}" = "dir" ]; then
102271294Sngie		expect 0 rmdir ${n0}
103271294Sngie	else
104271294Sngie		expect 0 unlink ${n0}
105271294Sngie	fi
106271294Sngiedone
107271294Sngie
108271294Sngie# chown(2) return 0 if user is not owner of a file, but chown(2) is called
109271294Sngie# with both uid and gid equal to -1.
110271294Sngiefor type in regular dir fifo block char socket symlink; do
111271294Sngie	if [ "${type}" != "symlink" ]; then
112271294Sngie		create_file ${type} ${n0}
113271294Sngie
114271294Sngie		expect 0 chown ${n0} 65534 65533
115271294Sngie		expect 0 -u 65532 -g 65531 -- chown ${n0} -1 -1
116271294Sngie		expect 65534,65533 stat ${n0} uid,gid
117271294Sngie
118271294Sngie		expect 0 symlink ${n0} ${n1}
119271294Sngie		uidgid=`${fstest} lstat ${n1} uid,gid`
120271294Sngie		expect 0 chown ${n1} 65534 65533
121271294Sngie		expect 65534,65533 stat ${n0} uid,gid
122271294Sngie		expect 65534,65533 stat ${n1} uid,gid
123271294Sngie		expect ${uidgid} lstat ${n1} uid,gid
124271294Sngie		expect 0 -u 65532 -g 65531 -- chown ${n0} -1 -1
125271294Sngie		expect 65534,65533 stat ${n0} uid,gid
126271294Sngie		expect 65534,65533 stat ${n1} uid,gid
127271294Sngie		expect ${uidgid} lstat ${n1} uid,gid
128271294Sngie		expect 0 unlink ${n1}
129271294Sngie
130271294Sngie		if [ "${type}" = "dir" ]; then
131271294Sngie			expect 0 rmdir ${n0}
132271294Sngie		else
133271294Sngie			expect 0 unlink ${n0}
134271294Sngie		fi
135271294Sngie	fi
136271294Sngie
137271294Sngie	create_file ${type} ${n0}
138271294Sngie	expect 0 lchown ${n0} 65534 65533
139271294Sngie	expect 0 -u 65532 -g 65531 -- lchown ${n0} -1 -1
140271294Sngie	expect 65534,65533 lstat ${n0} uid,gid
141271294Sngie	if [ "${type}" = "dir" ]; then
142271294Sngie		expect 0 rmdir ${n0}
143271294Sngie	else
144271294Sngie		expect 0 unlink ${n0}
145271294Sngie	fi
146271294Sngiedone
147271294Sngie
148271294Sngie# when super-user calls chown(2), set-uid and set-gid bits may be removed.
149271294Sngiefor type in regular dir fifo block char socket symlink; do
150271294Sngie	if [ "${type}" != "symlink" ]; then
151271294Sngie		create_file ${type} ${n0}
152271294Sngie
153271294Sngie		expect 0 chown ${n0} 65534 65533
154271294Sngie		expect 0 chmod ${n0} 06555
155271294Sngie		expect 06555,65534,65533 stat ${n0} mode,uid,gid
156271294Sngie		expect 0 chown ${n0} 65532 65531
157271294Sngie		expect "(06555|0555),65532,65531" stat ${n0} mode,uid,gid
158271294Sngie		expect 0 chmod ${n0} 06555
159271294Sngie		expect 06555,65532,65531 stat ${n0} mode,uid,gid
160271294Sngie		expect 0 chown ${n0} 0 0
161271294Sngie		expect "(06555|0555),0,0" stat ${n0} mode,uid,gid
162271294Sngie
163271294Sngie		expect 0 symlink ${n0} ${n1}
164271294Sngie		expect 0 chown ${n1} 65534 65533
165271294Sngie		expect 0 chmod ${n1} 06555
166271294Sngie		expect 06555,65534,65533 stat ${n0} mode,uid,gid
167271294Sngie		expect 06555,65534,65533 stat ${n1} mode,uid,gid
168271294Sngie		expect 0 chown ${n1} 65532 65531
169271294Sngie		expect "(06555|0555),65532,65531" stat ${n0} mode,uid,gid
170271294Sngie		expect "(06555|0555),65532,65531" stat ${n1} mode,uid,gid
171271294Sngie		expect 0 chmod ${n1} 06555
172271294Sngie		expect 06555,65532,65531 stat ${n0} mode,uid,gid
173271294Sngie		expect 06555,65532,65531 stat ${n1} mode,uid,gid
174271294Sngie		expect 0 chown ${n1} 0 0
175271294Sngie		expect "(06555|0555),0,0" stat ${n0} mode,uid,gid
176271294Sngie		expect "(06555|0555),0,0" stat ${n1} mode,uid,gid
177271294Sngie		expect 0 unlink ${n1}
178271294Sngie
179271294Sngie		if [ "${type}" = "dir" ]; then
180271294Sngie			expect 0 rmdir ${n0}
181271294Sngie		else
182271294Sngie			expect 0 unlink ${n0}
183271294Sngie		fi
184271294Sngie	fi
185271294Sngie
186271294Sngie	if [ "${type}" != "symlink" ] || supported lchmod; then
187271294Sngie		create_file ${type} ${n0}
188271294Sngie		expect 0 lchown ${n0} 65534 65533
189271294Sngie		if supported lchmod; then
190271294Sngie			expect 0 lchmod ${n0} 06555
191271294Sngie		else
192271294Sngie			expect 0 chmod ${n0} 06555
193271294Sngie		fi
194271294Sngie		expect 06555,65534,65533 lstat ${n0} mode,uid,gid
195271294Sngie		expect 0 lchown ${n0} 65532 65531
196271294Sngie		expect "(06555|0555),65532,65531" lstat ${n0} mode,uid,gid
197271294Sngie		if supported lchmod; then
198271294Sngie			expect 0 lchmod ${n0} 06555
199271294Sngie		else
200271294Sngie			expect 0 chmod ${n0} 06555
201271294Sngie		fi
202271294Sngie		expect 06555,65532,65531 lstat ${n0} mode,uid,gid
203271294Sngie		expect 0 lchown ${n0} 0 0
204271294Sngie		expect "(06555|0555),0,0" lstat ${n0} mode,uid,gid
205271294Sngie		if [ "${type}" = "dir" ]; then
206271294Sngie			expect 0 rmdir ${n0}
207271294Sngie		else
208271294Sngie			expect 0 unlink ${n0}
209271294Sngie		fi
210271294Sngie	fi
211271294Sngiedone
212271294Sngie
213271294Sngie# when non-super-user calls chown(2) successfully, set-uid and set-gid bits may
214271294Sngie# be removed, except when both uid and gid are equal to -1.
215271294Sngiefor type in regular dir fifo block char socket symlink; do
216271294Sngie	if [ "${type}" != "symlink" ]; then
217271294Sngie		create_file ${type} ${n0}
218271294Sngie
219271294Sngie		expect 0 chown ${n0} 65534 65533
220271294Sngie		expect 0 chmod ${n0} 06555
221271294Sngie		expect 06555,65534,65533 stat ${n0} mode,uid,gid
222271294Sngie		expect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532
223271294Sngie		expect 0555,65534,65532 stat ${n0} mode,uid,gid
224271294Sngie		expect 0 chmod ${n0} 06555
225271294Sngie		expect 06555,65534,65532 stat ${n0} mode,uid,gid
226271294Sngie		expect 0 -u 65534 -g 65533,65532 -- chown ${n0} -1 65533
227271294Sngie		expect 0555,65534,65533 stat ${n0} mode,uid,gid
228271294Sngie		expect 0 chmod ${n0} 06555
229271294Sngie		expect 06555,65534,65533 stat ${n0} mode,uid,gid
230271294Sngie		expect 0 -u 65534 -g 65533,65532 -- chown ${n0} -1 -1
231271294Sngie		expect "(06555|0555),65534,65533" stat ${n0} mode,uid,gid
232271294Sngie
233271294Sngie		expect 0 symlink ${n0} ${n1}
234271294Sngie		expect 0 chown ${n1} 65534 65533
235271294Sngie		expect 0 chmod ${n1} 06555
236271294Sngie		expect 06555,65534,65533 stat ${n0} mode,uid,gid
237271294Sngie		expect 06555,65534,65533 stat ${n1} mode,uid,gid
238271294Sngie		expect 0 -u 65534 -g 65533,65532 chown ${n1} 65534 65532
239271294Sngie		expect 0555,65534,65532 stat ${n0} mode,uid,gid
240271294Sngie		expect 0555,65534,65532 stat ${n1} mode,uid,gid
241271294Sngie		expect 0 chmod ${n1} 06555
242271294Sngie		expect 06555,65534,65532 stat ${n0} mode,uid,gid
243271294Sngie		expect 06555,65534,65532 stat ${n1} mode,uid,gid
244271294Sngie		expect 0 -u 65534 -g 65533,65532 -- chown ${n1} -1 65533
245271294Sngie		expect 0555,65534,65533 stat ${n0} mode,uid,gid
246271294Sngie		expect 0555,65534,65533 stat ${n1} mode,uid,gid
247271294Sngie		expect 0 chmod ${n1} 06555
248271294Sngie		expect 06555,65534,65533 stat ${n0} mode,uid,gid
249271294Sngie		expect 06555,65534,65533 stat ${n1} mode,uid,gid
250271294Sngie		expect 0 -u 65534 -g 65533,65532 -- chown ${n1} -1 -1
251271294Sngie		expect "(06555|0555),65534,65533" stat ${n0} mode,uid,gid
252271294Sngie		expect "(06555|0555),65534,65533" stat ${n1} mode,uid,gid
253271294Sngie		expect 0 unlink ${n1}
254271294Sngie
255271294Sngie		if [ "${type}" = "dir" ]; then
256271294Sngie			expect 0 rmdir ${n0}
257271294Sngie		else
258271294Sngie			expect 0 unlink ${n0}
259271294Sngie		fi
260271294Sngie	fi
261271294Sngie
262271294Sngie	if [ "${type}" != "symlink" ] || supported lchmod; then
263271294Sngie		create_file ${type} ${n0}
264271294Sngie
265271294Sngie		expect 0 lchown ${n0} 65534 65533
266271294Sngie		if supported lchmod; then
267271294Sngie			expect 0 lchmod ${n0} 06555
268271294Sngie		else
269271294Sngie			expect 0 chmod ${n0} 06555
270271294Sngie		fi
271271294Sngie		expect 06555,65534,65533 lstat ${n0} mode,uid,gid
272271294Sngie		expect 0 -u 65534 -g 65533,65532 lchown ${n0} 65534 65532
273271294Sngie		expect 0555,65534,65532 lstat ${n0} mode,uid,gid
274271294Sngie		if supported lchmod; then
275271294Sngie			expect 0 lchmod ${n0} 06555
276271294Sngie		else
277271294Sngie			expect 0 chmod ${n0} 06555
278271294Sngie		fi
279271294Sngie		expect 06555,65534,65532 lstat ${n0} mode,uid,gid
280271294Sngie		expect 0 -u 65534 -g 65533,65532 -- lchown ${n0} -1 65533
281271294Sngie		expect 0555,65534,65533 lstat ${n0} mode,uid,gid
282271294Sngie		if supported lchmod; then
283271294Sngie			expect 0 lchmod ${n0} 06555
284271294Sngie		else
285271294Sngie			expect 0 chmod ${n0} 06555
286271294Sngie		fi
287271294Sngie		expect 06555,65534,65533 lstat ${n0} mode,uid,gid
288271294Sngie		expect 0 -u 65534 -g 65533,65532 -- lchown ${n0} -1 -1
289271294Sngie		expect "(06555|0555),65534,65533" lstat ${n0} mode,uid,gid
290271294Sngie
291271294Sngie		if [ "${type}" = "dir" ]; then
292271294Sngie			expect 0 rmdir ${n0}
293271294Sngie		else
294271294Sngie			expect 0 unlink ${n0}
295271294Sngie		fi
296271294Sngie	fi
297271294Sngiedone
298271294Sngie
299271294Sngie# successful chown(2) call (except uid and gid equal to -1) updates ctime.
300271294Sngiefor type in regular dir fifo block char socket symlink; do
301271294Sngie	if [ "${type}" != "symlink" ]; then
302271294Sngie		create_file ${type} ${n0}
303271294Sngie
304271294Sngie		ctime1=`${fstest} stat ${n0} ctime`
305271294Sngie		sleep 1
306271294Sngie		expect 0 chown ${n0} 65534 65533
307271294Sngie		expect 65534,65533 stat ${n0} uid,gid
308271294Sngie		ctime2=`${fstest} stat ${n0} ctime`
309271294Sngie		test_check $ctime1 -lt $ctime2
310271294Sngie		ctime1=`${fstest} stat ${n0} ctime`
311271294Sngie		sleep 1
312271294Sngie		expect 0 -u 65534 -g 65532 chown ${n0} 65534 65532
313271294Sngie		expect 65534,65532 stat ${n0} uid,gid
314271294Sngie		ctime2=`${fstest} stat ${n0} ctime`
315271294Sngie		test_check $ctime1 -lt $ctime2
316271294Sngie
317271294Sngie		expect 0 symlink ${n0} ${n1}
318271294Sngie		ctime1=`${fstest} stat ${n1} ctime`
319271294Sngie		sleep 1
320271294Sngie		expect 0 chown ${n1} 65533 65532
321271294Sngie		expect 65533,65532 stat ${n1} uid,gid
322271294Sngie		ctime2=`${fstest} stat ${n1} ctime`
323271294Sngie		test_check $ctime1 -lt $ctime2
324271294Sngie		ctime1=`${fstest} stat ${n1} ctime`
325271294Sngie		sleep 1
326271294Sngie		expect 0 -u 65533 -g 65531 chown ${n1} 65533 65531
327271294Sngie		expect 65533,65531 stat ${n1} uid,gid
328271294Sngie		ctime2=`${fstest} stat ${n1} ctime`
329271294Sngie		test_check $ctime1 -lt $ctime2
330271294Sngie		expect 0 unlink ${n1}
331271294Sngie
332271294Sngie		if [ "${type}" = "dir" ]; then
333271294Sngie			expect 0 rmdir ${n0}
334271294Sngie		else
335271294Sngie			expect 0 unlink ${n0}
336271294Sngie		fi
337271294Sngie	fi
338271294Sngie
339271294Sngie	create_file ${type} ${n0}
340271294Sngie
341271294Sngie	ctime1=`${fstest} lstat ${n0} ctime`
342271294Sngie	sleep 1
343271294Sngie	expect 0 lchown ${n0} 65534 65533
344271294Sngie	expect 65534,65533 lstat ${n0} uid,gid
345271294Sngie	ctime2=`${fstest} lstat ${n0} ctime`
346271294Sngie	test_check $ctime1 -lt $ctime2
347271294Sngie	ctime1=`${fstest} lstat ${n0} ctime`
348271294Sngie	sleep 1
349271294Sngie	expect 0 -u 65534 -g 65532 lchown ${n0} 65534 65532
350271294Sngie	expect 65534,65532 lstat ${n0} uid,gid
351271294Sngie	ctime2=`${fstest} lstat ${n0} ctime`
352271294Sngie	test_check $ctime1 -lt $ctime2
353271294Sngie
354271294Sngie	if [ "${type}" = "dir" ]; then
355271294Sngie		expect 0 rmdir ${n0}
356271294Sngie	else
357271294Sngie		expect 0 unlink ${n0}
358271294Sngie	fi
359271294Sngiedone
360271294Sngie
361271294Sngiefor type in regular dir fifo block char socket symlink; do
362271294Sngie	if [ "${type}" != "symlink" ]; then
363271294Sngie		create_file ${type} ${n0}
364271294Sngie
365271294Sngie		ctime1=`${fstest} stat ${n0} ctime`
366271294Sngie		sleep 1
367271294Sngie		expect 0 -- chown ${n0} -1 -1
368271294Sngie		ctime2=`${fstest} stat ${n0} ctime`
369271294Sngie		todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
370271294Sngie		test_check $ctime1 -eq $ctime2
371271294Sngie		expect 0,0 stat ${n0} uid,gid
372271294Sngie
373271294Sngie		expect 0 symlink ${n0} ${n1}
374271294Sngie		ctime1=`${fstest} stat ${n1} ctime`
375271294Sngie		sleep 1
376271294Sngie		expect 0 -- chown ${n1} -1 -1
377271294Sngie		ctime2=`${fstest} stat ${n1} ctime`
378271294Sngie		todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
379271294Sngie		test_check $ctime1 -eq $ctime2
380271294Sngie		expect 0,0 stat ${n1} uid,gid
381271294Sngie		expect 0 unlink ${n1}
382271294Sngie
383271294Sngie		if [ "${type}" = "dir" ]; then
384271294Sngie			expect 0 rmdir ${n0}
385271294Sngie		else
386271294Sngie			expect 0 unlink ${n0}
387271294Sngie		fi
388271294Sngie	fi
389271294Sngie
390271294Sngie	create_file ${type} ${n0}
391271294Sngie
392271294Sngie	ctime1=`${fstest} lstat ${n0} ctime`
393271294Sngie	sleep 1
394271294Sngie	expect 0 -- lchown ${n0} -1 -1
395271294Sngie	ctime2=`${fstest} lstat ${n0} ctime`
396271294Sngie	todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
397271294Sngie	test_check $ctime1 -eq $ctime2
398271294Sngie	expect 0,0 lstat ${n0} uid,gid
399271294Sngie
400271294Sngie	if [ "${type}" = "dir" ]; then
401271294Sngie		expect 0 rmdir ${n0}
402271294Sngie	else
403271294Sngie		expect 0 unlink ${n0}
404271294Sngie	fi
405271294Sngiedone
406271294Sngie
407271294Sngie# unsuccessful chown(2) does not update ctime.
408271294Sngiefor type in regular dir fifo block char socket symlink; do
409271294Sngie	if [ "${type}" != "symlink" ]; then
410271294Sngie		create_file ${type} ${n0}
411271294Sngie
412271294Sngie		ctime1=`${fstest} stat ${n0} ctime`
413271294Sngie		sleep 1
414271294Sngie		expect EPERM -u 65534 -- chown ${n0} 65534 -1
415271294Sngie		expect EPERM -u 65534 -g 65534 -- chown ${n0} -1 65534
416271294Sngie		expect EPERM -u 65534 -g 65534 chown ${n0} 65534 65534
417271294Sngie		ctime2=`${fstest} stat ${n0} ctime`
418271294Sngie		test_check $ctime1 -eq $ctime2
419271294Sngie		expect 0,0 stat ${n0} uid,gid
420271294Sngie
421271294Sngie		expect 0 symlink ${n0} ${n1}
422271294Sngie		ctime1=`${fstest} stat ${n1} ctime`
423271294Sngie		sleep 1
424271294Sngie		expect EPERM -u 65534 -- chown ${n1} 65534 -1
425271294Sngie		expect EPERM -u 65534 -g 65534 -- chown ${n1} -1 65534
426271294Sngie		expect EPERM -u 65534 -g 65534 chown ${n1} 65534 65534
427271294Sngie		ctime2=`${fstest} stat ${n1} ctime`
428271294Sngie		test_check $ctime1 -eq $ctime2
429271294Sngie		expect 0,0 stat ${n1} uid,gid
430271294Sngie		expect 0 unlink ${n1}
431271294Sngie
432271294Sngie		if [ "${type}" = "dir" ]; then
433271294Sngie			expect 0 rmdir ${n0}
434271294Sngie		else
435271294Sngie			expect 0 unlink ${n0}
436271294Sngie		fi
437271294Sngie	fi
438271294Sngie
439271294Sngie	create_file ${type} ${n0}
440271294Sngie
441271294Sngie	ctime1=`${fstest} lstat ${n0} ctime`
442271294Sngie	sleep 1
443271294Sngie	expect EPERM -u 65534 -- lchown ${n0} 65534 -1
444271294Sngie	expect EPERM -u 65534 -g 65534 -- lchown ${n0} -1 65534
445271294Sngie	expect EPERM -u 65534 -g 65534 lchown ${n0} 65534 65534
446271294Sngie	ctime2=`${fstest} lstat ${n0} ctime`
447271294Sngie	test_check $ctime1 -eq $ctime2
448271294Sngie	expect 0,0 lstat ${n0} uid,gid
449271294Sngie
450271294Sngie	if [ "${type}" = "dir" ]; then
451271294Sngie		expect 0 rmdir ${n0}
452271294Sngie	else
453271294Sngie		expect 0 unlink ${n0}
454271294Sngie	fi
455271294Sngiedone
456271294Sngie
457271294Sngiecd ${cdir}
458271294Sngieexpect 0 rmdir ${n2}
459