1271294Sngie#!/bin/sh
2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/granular/04.t 211352 2010-08-15 21:24:17Z pjd $
3271294Sngie
4271294Sngiedesc="NFSv4 granular permissions checking - ACL_WRITE_OWNER"
5271294Sngie
6271294Sngiedir=`dirname $0`
7271294Sngie. ${dir}/../misc.sh
8271294Sngie
9271294Sngie[ "${os}:${fs}" = "FreeBSD:ZFS" ] || quick_exit
10271294Sngie
11271294Sngieecho "1..52"
12271294Sngie
13271294Sngien0=`namegen`
14271294Sngien1=`namegen`
15271294Sngien2=`namegen`
16271294Sngie
17271294Sngieexpect 0 mkdir ${n2} 0755
18271294Sngiecdir=`pwd`
19271294Sngiecd ${n2}
20271294Sngie
21271294Sngie# ACL_WRITE_OWNER permits to set gid to our own only.
22271294Sngieexpect 0 create ${n0} 0644
23271294Sngieexpect 0,0 lstat ${n0} uid,gid
24271294Sngieexpect EPERM -u 65534 -g 65532,65531 chown ${n0} -1 65532
25271294Sngieexpect 0,0 lstat ${n0} uid,gid
26271294Sngieexpect 0 prependacl ${n0} user:65534:write_owner::allow
27271294Sngieexpect EPERM -u 65534 -g 65532,65531 chown ${n0} -1 65530
28271294Sngieexpect 0,0 lstat ${n0} uid,gid
29271294Sngieexpect 0 -u 65534 -g 65532,65531 chown ${n0} -1 65532
30271294Sngieexpect 0,65532 lstat ${n0} uid,gid
31271294Sngieexpect 0 unlink ${n0}
32271294Sngie
33271294Sngie# ACL_WRITE_OWNER permits to set uid to our own only.
34271294Sngieexpect 0 create ${n0} 0644
35271294Sngieexpect 0,0 lstat ${n0} uid,gid
36271294Sngieexpect EPERM -u 65534 -g 65532,65531 chown ${n0} 65534 65531
37271294Sngieexpect 0,0 lstat ${n0} uid,gid
38271294Sngieexpect 0 prependacl ${n0} user:65534:write_owner::allow
39271294Sngieexpect EPERM -u 65534 -g 65532,65531 chown ${n0} 65530 65531
40271294Sngieexpect 0,0 lstat ${n0} uid,gid
41271294Sngieexpect 0 -u 65534 -g 65532,65531 chown ${n0} 65534 65531
42271294Sngieexpect 65534,65531 lstat ${n0} uid,gid
43271294Sngieexpect 0 unlink ${n0}
44271294Sngie
45271294Sngie# When non-owner calls chown(2) successfully, set-uid and set-gid bits are
46271294Sngie# removed, except when both uid and gid are equal to -1.
47271294Sngieexpect 0 create ${n0} 0644
48271294Sngieexpect 0 prependacl ${n0} user:65534:write_owner::allow
49271294Sngieexpect 0 chmod ${n0} 06555
50271294Sngieexpect 06555 lstat ${n0} mode
51271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532
52271294Sngieexpect 0555,65534,65532 lstat ${n0} mode,uid,gid
53271294Sngieexpect 0 chmod ${n0} 06555
54271294Sngieexpect 06555 lstat ${n0} mode
55271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 65533
56271294Sngieexpect 0555,65534,65533 lstat ${n0} mode,uid,gid
57271294Sngieexpect 0 chmod ${n0} 06555
58271294Sngieexpect 06555 lstat ${n0} mode
59271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 -1
60271294Sngieexpect 06555,65534,65533 lstat ${n0} mode,uid,gid
61271294Sngieexpect 0 unlink ${n0}
62271294Sngie
63271294Sngieexpect 0 mkdir ${n0} 0755
64271294Sngieexpect 0 prependacl ${n0} user:65534:write_owner::allow
65271294Sngieexpect 0 chmod ${n0} 06555
66271294Sngieexpect 06555 lstat ${n0} mode
67271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532
68271294Sngieexpect 0555,65534,65532 lstat ${n0} mode,uid,gid
69271294Sngieexpect 0 chmod ${n0} 06555
70271294Sngieexpect 06555 lstat ${n0} mode
71271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 65533
72271294Sngieexpect 0555,65534,65533 lstat ${n0} mode,uid,gid
73271294Sngieexpect 0 chmod ${n0} 06555
74271294Sngieexpect 06555 lstat ${n0} mode
75271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 -1
76271294Sngieexpect 06555,65534,65533 lstat ${n0} mode,uid,gid
77271294Sngieexpect 0 rmdir ${n0}
78271294Sngie
79271294Sngiecd ${cdir}
80271294Sngieexpect 0 rmdir ${n2}
81