1271294Sngie#!/bin/sh
2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/granular/05.t 211352 2010-08-15 21:24:17Z pjd $
3271294Sngie
4271294Sngiedesc="NFSv4 granular permissions checking - DELETE and DELETE_CHILD with directories"
5271294Sngie
6271294Sngiedir=`dirname $0`
7271294Sngie. ${dir}/../misc.sh
8271294Sngie
9271294Sngie[ "${os}:${fs}" = "FreeBSD:ZFS" ] || quick_exit
10271294Sngie
11271294Sngieecho "1..68"
12271294Sngie
13271294Sngien0=`namegen`
14271294Sngien1=`namegen`
15271294Sngien2=`namegen`
16271294Sngien3=`namegen`
17271294Sngie
18271294Sngieexpect 0 mkdir ${n2} 0755
19271294Sngieexpect 0 mkdir ${n3} 0777
20271294Sngiecdir=`pwd`
21271294Sngiecd ${n2}
22271294Sngie
23271294Sngie# Unlink allowed on writable directory.
24271294Sngieexpect 0 mkdir ${n0} 0755
25271294Sngieexpect EACCES -u 65534 -g 65534 rmdir ${n0}
26271294Sngieexpect 0 prependacl . user:65534:write_data::allow
27271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0}
28271294Sngie
29271294Sngie# Moving directory elsewhere allowed on writable directory.
30271294Sngieexpect 0 mkdir ${n0} 0777
31271294Sngieexpect 0 prependacl . user:65534:write_data::deny
32271294Sngieexpect EACCES -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
33271294Sngieexpect 0 prependacl . user:65534:write_data::allow
34271294Sngieexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
35271294Sngie
36271294Sngie# 12
37271294Sngie# Moving directory from elsewhere allowed on writable directory.
38271294Sngieexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
39271294Sngieexpect 0 prependacl . user:65534:append_data::allow
40271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
41271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0}
42271294Sngie
43271294Sngie# Moving directory from elsewhere overwriting local directory allowed
44271294Sngie# on writable directory.
45271294Sngieexpect 0 mkdir ${n0} 0755
46271294Sngieexpect 0 mkdir ../${n3}/${n0} 0777
47271294Sngieexpect 0 prependacl . user:65534:write_data::deny
48271294Sngieexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
49271294Sngieexpect 0 prependacl . user:65534:write_data::allow
50271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
51271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0}
52271294Sngie
53271294Sngie# 23
54271294Sngie# Denied DELETE changes nothing wrt removing.
55271294Sngieexpect 0 mkdir ${n0} 0755
56271294Sngieexpect 0 prependacl ${n0} user:65534:delete::deny
57271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0}
58271294Sngie
59271294Sngie# Denied DELETE changes nothing wrt moving elsewhere or from elsewhere.
60271294Sngieexpect 0 mkdir ${n0} 0777
61271294Sngieexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
62271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
63271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0}
64271294Sngie
65271294Sngie# DELETE_CHILD denies unlink on writable directory.
66271294Sngieexpect 0 mkdir ${n0} 0755
67271294Sngieexpect 0 prependacl . user:65534:delete_child::deny
68271294Sngieexpect EPERM -u 65534 -g 65534 rmdir ${n0}
69271294Sngieexpect 0 rmdir ${n0}
70271294Sngie
71271294Sngie# 35
72271294Sngie# DELETE_CHILD denies moving directory elsewhere.
73271294Sngieexpect 0 mkdir ${n0} 0777
74271294Sngieexpect EPERM -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
75271294Sngieexpect 0 rename ${n0} ../${n3}/${n0}
76271294Sngie
77271294Sngie# DELETE_CHILD does not deny moving directory from elsewhere
78271294Sngie# to a writable directory.
79271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
80271294Sngie
81271294Sngie# DELETE_CHILD denies moving directory from elsewhere
82271294Sngie# to a writable directory overwriting local directory.
83271294Sngieexpect 0 mkdir ../${n3}/${n0} 0755
84271294Sngieexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
85271294Sngie
86271294Sngie# DELETE allowed on directory allows for unlinking, no matter
87271294Sngie# what permissions on containing directory are.
88271294Sngieexpect 0 prependacl ${n0} user:65534:delete::allow
89271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0}
90271294Sngie
91271294Sngie# Same for moving the directory elsewhere.
92271294Sngieexpect 0 mkdir ${n0} 0777
93271294Sngieexpect 0 prependacl ${n0} user:65534:delete::allow
94271294Sngieexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
95271294Sngie
96271294Sngie# 46
97271294Sngie# Same for moving the directory from elsewhere into a writable
98271294Sngie# directory with DELETE_CHILD denied.
99271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
100271294Sngieexpect 0 rmdir ${n0}
101271294Sngie
102271294Sngie# DELETE does not allow for overwriting a directory in a unwritable
103271294Sngie# directory with DELETE_CHILD denied.
104271294Sngieexpect 0 mkdir ${n0} 0755
105271294Sngieexpect 0 mkdir ../${n3}/${n0} 0777
106271294Sngieexpect 0 prependacl . user:65534:write_data::deny
107271294Sngieexpect 0 prependacl . user:65534:delete_child::deny
108271294Sngieexpect EPERM -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
109271294Sngieexpect 0 prependacl ${n0} user:65534:delete::allow
110271294Sngie# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
111271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
112271294Sngie
113271294Sngie# 54
114271294Sngie# But it allows for plain deletion.
115271294Sngie# XXX: expect 0 -u 65534 -g 65534 rmdir ${n0}
116271294Sngieexpect 0 rmdir ${n0}
117271294Sngie
118271294Sngie# DELETE_CHILD allowed on unwritable directory.
119271294Sngieexpect 0 mkdir ${n0} 0755
120271294Sngieexpect 0 prependacl . user:65534:delete_child::allow
121271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0}
122271294Sngie
123271294Sngie# Moving things elsewhere is allowed.
124271294Sngieexpect 0 mkdir ${n0} 0777
125271294Sngieexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
126271294Sngie
127271294Sngie# 60
128271294Sngie# Moving things back is not.
129271294Sngie# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
130271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
131271294Sngie
132271294Sngie# Even if we're overwriting.
133271294Sngie# XXX: expect 0 mkdir ${n0} 0755
134271294Sngieexpect 0 mkdir ../${n3}/${n0} 0777
135271294Sngie# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
136271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
137271294Sngieexpect 0 mkdir ../${n3}/${n0} 0777
138271294Sngie
139271294Sngie# Even if we have DELETE on the existing directory.
140271294Sngieexpect 0 prependacl ${n0} user:65534:delete::allow
141271294Sngie# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
142271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
143271294Sngie
144271294Sngie# Denied DELETE changes nothing wrt removing.
145271294Sngieexpect 0 prependacl ${n0} user:65534:delete::deny
146271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0}
147271294Sngie
148271294Sngiecd ${cdir}
149271294Sngieexpect 0 rmdir ${n2}
150