05.t revision 196948
1196948Strasz#!/bin/sh
2196948Strasz# $FreeBSD: head/tools/regression/fstest/tests/granular/05.t 196948 2009-09-07 19:40:22Z trasz $
3196948Strasz
4196948Straszdesc="NFSv4 granular permissions checking - DELETE and DELETE_CHILD with directories"
5196948Strasz
6196948Straszdir=`dirname $0`
7196948Strasz. ${dir}/../misc.sh
8196948Strasz
9196948Straszecho "1..68"
10196948Strasz
11196948Straszn0=`namegen`
12196948Straszn1=`namegen`
13196948Straszn2=`namegen`
14196948Straszn3=`namegen`
15196948Strasz
16196948Straszexpect 0 mkdir ${n2} 0755
17196948Straszexpect 0 mkdir ${n3} 0777
18196948Straszcdir=`pwd`
19196948Straszcd ${n2}
20196948Strasz
21196948Strasz# Unlink allowed on writable directory.
22196948Straszexpect 0 mkdir ${n0} 0755
23196948Straszexpect EACCES -u 65534 -g 65534 rmdir ${n0}
24196948Straszexpect 0 prependacl . user:65534:write_data::allow
25196948Straszexpect 0 -u 65534 -g 65534 rmdir ${n0}
26196948Strasz
27196948Strasz# Moving directory elsewhere allowed on writable directory.
28196948Straszexpect 0 mkdir ${n0} 0777
29196948Straszexpect 0 prependacl . user:65534:write_data::deny
30196948Straszexpect EACCES -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
31196948Straszexpect 0 prependacl . user:65534:write_data::allow
32196948Straszexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
33196948Strasz
34196948Strasz# 12
35196948Strasz# Moving directory from elsewhere allowed on writable directory.
36196948Straszexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
37196948Straszexpect 0 prependacl . user:65534:append_data::allow
38196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
39196948Straszexpect 0 -u 65534 -g 65534 rmdir ${n0}
40196948Strasz
41196948Strasz# Moving directory from elsewhere overwriting local directory allowed
42196948Strasz# on writable directory.
43196948Straszexpect 0 mkdir ${n0} 0755
44196948Straszexpect 0 mkdir ../${n3}/${n0} 0777
45196948Straszexpect 0 prependacl . user:65534:write_data::deny
46196948Straszexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
47196948Straszexpect 0 prependacl . user:65534:write_data::allow
48196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
49196948Straszexpect 0 -u 65534 -g 65534 rmdir ${n0}
50196948Strasz
51196948Strasz# 23
52196948Strasz# Denied DELETE changes nothing wrt removing.
53196948Straszexpect 0 mkdir ${n0} 0755
54196948Straszexpect 0 prependacl ${n0} user:65534:delete::deny
55196948Straszexpect 0 -u 65534 -g 65534 rmdir ${n0}
56196948Strasz
57196948Strasz# Denied DELETE changes nothing wrt moving elsewhere or from elsewhere.
58196948Straszexpect 0 mkdir ${n0} 0777
59196948Straszexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
60196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
61196948Straszexpect 0 -u 65534 -g 65534 rmdir ${n0}
62196948Strasz
63196948Strasz# DELETE_CHILD denies unlink on writable directory.
64196948Straszexpect 0 mkdir ${n0} 0755
65196948Straszexpect 0 prependacl . user:65534:delete_child::deny
66196948Straszexpect EPERM -u 65534 -g 65534 rmdir ${n0}
67196948Straszexpect 0 rmdir ${n0}
68196948Strasz
69196948Strasz# 35
70196948Strasz# DELETE_CHILD denies moving directory elsewhere.
71196948Straszexpect 0 mkdir ${n0} 0777
72196948Straszexpect EPERM -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
73196948Straszexpect 0 rename ${n0} ../${n3}/${n0}
74196948Strasz
75196948Strasz# DELETE_CHILD does not deny moving directory from elsewhere
76196948Strasz# to a writable directory.
77196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
78196948Strasz
79196948Strasz# DELETE_CHILD denies moving directory from elsewhere
80196948Strasz# to a writable directory overwriting local directory.
81196948Straszexpect 0 mkdir ../${n3}/${n0} 0755
82196948Straszexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
83196948Strasz
84196948Strasz# DELETE allowed on directory allows for unlinking, no matter
85196948Strasz# what permissions on containing directory are.
86196948Straszexpect 0 prependacl ${n0} user:65534:delete::allow
87196948Straszexpect 0 -u 65534 -g 65534 rmdir ${n0}
88196948Strasz
89196948Strasz# Same for moving the directory elsewhere.
90196948Straszexpect 0 mkdir ${n0} 0777
91196948Straszexpect 0 prependacl ${n0} user:65534:delete::allow
92196948Straszexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
93196948Strasz
94196948Strasz# 46
95196948Strasz# Same for moving the directory from elsewhere into a writable
96196948Strasz# directory with DELETE_CHILD denied.
97196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
98196948Straszexpect 0 rmdir ${n0}
99196948Strasz
100196948Strasz# DELETE does not allow for overwriting a directory in a unwritable
101196948Strasz# directory with DELETE_CHILD denied.
102196948Straszexpect 0 mkdir ${n0} 0755
103196948Straszexpect 0 mkdir ../${n3}/${n0} 0777
104196948Straszexpect 0 prependacl . user:65534:write_data::deny
105196948Straszexpect 0 prependacl . user:65534:delete_child::deny
106196948Straszexpect EPERM -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
107196948Straszexpect 0 prependacl ${n0} user:65534:delete::allow
108196948Strasz# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
109196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
110196948Strasz
111196948Strasz# 54
112196948Strasz# But it allows for plain deletion.
113196948Strasz# XXX: expect 0 -u 65534 -g 65534 rmdir ${n0}
114196948Straszexpect 0 rmdir ${n0}
115196948Strasz
116196948Strasz# DELETE_CHILD allowed on unwritable directory.
117196948Straszexpect 0 mkdir ${n0} 0755
118196948Straszexpect 0 prependacl . user:65534:delete_child::allow
119196948Straszexpect 0 -u 65534 -g 65534 rmdir ${n0}
120196948Strasz
121196948Strasz# Moving things elsewhere is allowed.
122196948Straszexpect 0 mkdir ${n0} 0777
123196948Straszexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
124196948Strasz
125196948Strasz# 60
126196948Strasz# Moving things back is not.
127196948Strasz# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
128196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
129196948Strasz
130196948Strasz# Even if we're overwriting.
131196948Strasz# XXX: expect 0 mkdir ${n0} 0755
132196948Straszexpect 0 mkdir ../${n3}/${n0} 0777
133196948Strasz# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
134196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
135196948Straszexpect 0 mkdir ../${n3}/${n0} 0777
136196948Strasz
137196948Strasz# Even if we have DELETE on the existing directory.
138196948Straszexpect 0 prependacl ${n0} user:65534:delete::allow
139196948Strasz# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
140196948Straszexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
141196948Strasz
142196948Strasz# Denied DELETE changes nothing wrt removing.
143196948Straszexpect 0 prependacl ${n0} user:65534:delete::deny
144196948Straszexpect 0 -u 65534 -g 65534 rmdir ${n0}
145196948Strasz
146196948Straszcd ${cdir}
147196948Straszexpect 0 rmdir ${n2}
148