1196948Strasz#!/bin/sh
2196948Strasz# $FreeBSD: releng/10.2/tools/regression/pjdfstest/tests/granular/04.t 210984 2010-08-06 23:58:54Z pjd $
3196948Strasz
4196948Straszdesc="NFSv4 granular permissions checking - ACL_WRITE_OWNER"
5196948Strasz
6196948Straszdir=`dirname $0`
7196948Strasz. ${dir}/../misc.sh
8196948Strasz
9210984Spjd[ "${os}:${fs}" = "FreeBSD:ZFS" ] || quick_exit
10210984Spjd
11196948Straszecho "1..52"
12196948Strasz
13196948Straszn0=`namegen`
14196948Straszn1=`namegen`
15196948Straszn2=`namegen`
16196948Strasz
17196948Straszexpect 0 mkdir ${n2} 0755
18196948Straszcdir=`pwd`
19196948Straszcd ${n2}
20196948Strasz
21196948Strasz# ACL_WRITE_OWNER permits to set gid to our own only.
22196948Straszexpect 0 create ${n0} 0644
23196948Straszexpect 0,0 lstat ${n0} uid,gid
24196948Straszexpect EPERM -u 65534 -g 65532,65531 chown ${n0} -1 65532
25196948Straszexpect 0,0 lstat ${n0} uid,gid
26196948Straszexpect 0 prependacl ${n0} user:65534:write_owner::allow
27196948Straszexpect EPERM -u 65534 -g 65532,65531 chown ${n0} -1 65530
28196948Straszexpect 0,0 lstat ${n0} uid,gid
29196948Straszexpect 0 -u 65534 -g 65532,65531 chown ${n0} -1 65532
30196948Straszexpect 0,65532 lstat ${n0} uid,gid
31196948Straszexpect 0 unlink ${n0}
32196948Strasz
33196948Strasz# ACL_WRITE_OWNER permits to set uid to our own only.
34196948Straszexpect 0 create ${n0} 0644
35196948Straszexpect 0,0 lstat ${n0} uid,gid
36196948Straszexpect EPERM -u 65534 -g 65532,65531 chown ${n0} 65534 65531
37196948Straszexpect 0,0 lstat ${n0} uid,gid
38196948Straszexpect 0 prependacl ${n0} user:65534:write_owner::allow
39196948Straszexpect EPERM -u 65534 -g 65532,65531 chown ${n0} 65530 65531
40196948Straszexpect 0,0 lstat ${n0} uid,gid
41196948Straszexpect 0 -u 65534 -g 65532,65531 chown ${n0} 65534 65531
42196948Straszexpect 65534,65531 lstat ${n0} uid,gid
43196948Straszexpect 0 unlink ${n0}
44196948Strasz
45196948Strasz# When non-owner calls chown(2) successfully, set-uid and set-gid bits are
46196948Strasz# removed, except when both uid and gid are equal to -1.
47196948Straszexpect 0 create ${n0} 0644
48196948Straszexpect 0 prependacl ${n0} user:65534:write_owner::allow
49196948Straszexpect 0 chmod ${n0} 06555
50196948Straszexpect 06555 lstat ${n0} mode
51196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532
52196948Straszexpect 0555,65534,65532 lstat ${n0} mode,uid,gid
53196948Straszexpect 0 chmod ${n0} 06555
54196948Straszexpect 06555 lstat ${n0} mode
55196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 65533
56196948Straszexpect 0555,65534,65533 lstat ${n0} mode,uid,gid
57196948Straszexpect 0 chmod ${n0} 06555
58196948Straszexpect 06555 lstat ${n0} mode
59196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 -1
60196948Straszexpect 06555,65534,65533 lstat ${n0} mode,uid,gid
61196948Straszexpect 0 unlink ${n0}
62196948Strasz
63196948Straszexpect 0 mkdir ${n0} 0755
64196948Straszexpect 0 prependacl ${n0} user:65534:write_owner::allow
65196948Straszexpect 0 chmod ${n0} 06555
66196948Straszexpect 06555 lstat ${n0} mode
67196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532
68196948Straszexpect 0555,65534,65532 lstat ${n0} mode,uid,gid
69196948Straszexpect 0 chmod ${n0} 06555
70196948Straszexpect 06555 lstat ${n0} mode
71196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 65533
72196948Straszexpect 0555,65534,65533 lstat ${n0} mode,uid,gid
73196948Straszexpect 0 chmod ${n0} 06555
74196948Straszexpect 06555 lstat ${n0} mode
75196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 -1
76196948Straszexpect 06555,65534,65533 lstat ${n0} mode,uid,gid
77196948Straszexpect 0 rmdir ${n0}
78196948Strasz
79196948Straszcd ${cdir}
80196948Straszexpect 0 rmdir ${n2}
81