1271294Sngie#!/bin/sh
2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/chmod/07.t 211352 2010-08-15 21:24:17Z pjd $
3271294Sngie
4271294Sngiedesc="chmod returns EPERM if the operation would change the ownership, but the effective user ID is not the super-user"
5271294Sngie
6271294Sngiedir=`dirname $0`
7271294Sngie. ${dir}/../misc.sh
8271294Sngie
9271294Sngieif supported lchmod; then
10271294Sngie	echo "1..34"
11271294Sngieelse
12271294Sngie	echo "1..25"
13271294Sngiefi
14271294Sngie
15271294Sngien0=`namegen`
16271294Sngien1=`namegen`
17271294Sngien2=`namegen`
18271294Sngien3=`namegen`
19271294Sngie
20271294Sngieexpect 0 mkdir ${n0} 0755
21271294Sngiecdir=`pwd`
22271294Sngiecd ${n0}
23271294Sngieexpect 0 mkdir ${n1} 0755
24271294Sngieexpect 0 chown ${n1} 65534 65534
25271294Sngie
26271294Sngieexpect 0 -u 65534 -g 65534 create ${n1}/${n2} 0644
27271294Sngieexpect 0 -u 65534 -g 65534 chmod ${n1}/${n2} 0642
28271294Sngieexpect 0642 stat ${n1}/${n2} mode
29271294Sngieexpect EPERM -u 65533 -g 65533 chmod ${n1}/${n2} 0641
30271294Sngieexpect 0642 stat ${n1}/${n2} mode
31271294Sngieexpect 0 chown ${n1}/${n2} 0 0
32271294Sngieexpect EPERM -u 65534 -g 65534 chmod ${n1}/${n2} 0641
33271294Sngieexpect 0642 stat ${n1}/${n2} mode
34271294Sngieexpect 0 unlink ${n1}/${n2}
35271294Sngie
36271294Sngieexpect 0 -u 65534 -g 65534 create ${n1}/${n2} 0644
37271294Sngieexpect 0 -u 65534 -g 65534 symlink ${n2} ${n1}/${n3}
38271294Sngieexpect 0 -u 65534 -g 65534 chmod ${n1}/${n3} 0642
39271294Sngieexpect 0642,65534,65534 stat ${n1}/${n2} mode,uid,gid
40271294Sngieexpect EPERM -u 65533 -g 65533 chmod ${n1}/${n3} 0641
41271294Sngieexpect 0642,65534,65534 stat ${n1}/${n2} mode,uid,gid
42271294Sngieexpect 0 chown ${n1}/${n3} 0 0
43271294Sngieexpect EPERM -u 65534 -g 65534 chmod ${n1}/${n3} 0641
44271294Sngieexpect 0642,0,0 stat ${n1}/${n2} mode,uid,gid
45271294Sngieexpect 0 unlink ${n1}/${n2}
46271294Sngieexpect 0 unlink ${n1}/${n3}
47271294Sngie
48271294Sngieif supported lchmod; then
49271294Sngie	expect 0 -u 65534 -g 65534 create ${n1}/${n2} 0644
50271294Sngie	expect 0 -u 65534 -g 65534 lchmod ${n1}/${n2} 0642
51271294Sngie	expect 0642 stat ${n1}/${n2} mode
52271294Sngie	expect EPERM -u 65533 -g 65533 lchmod ${n1}/${n2} 0641
53271294Sngie	expect 0642 stat ${n1}/${n2} mode
54271294Sngie	expect 0 chown ${n1}/${n2} 0 0
55271294Sngie	expect EPERM -u 65534 -g 65534 lchmod ${n1}/${n2} 0641
56271294Sngie	expect 0642 stat ${n1}/${n2} mode
57271294Sngie	expect 0 unlink ${n1}/${n2}
58271294Sngiefi
59271294Sngie
60271294Sngieexpect 0 rmdir ${n1}
61271294Sngiecd ${cdir}
62271294Sngieexpect 0 rmdir ${n0}
63