05.t revision 196948
1#!/bin/sh
2# $FreeBSD: head/tools/regression/fstest/tests/granular/05.t 196948 2009-09-07 19:40:22Z trasz $
3
4desc="NFSv4 granular permissions checking - DELETE and DELETE_CHILD with directories"
5
6dir=`dirname $0`
7. ${dir}/../misc.sh
8
9echo "1..68"
10
11n0=`namegen`
12n1=`namegen`
13n2=`namegen`
14n3=`namegen`
15
16expect 0 mkdir ${n2} 0755
17expect 0 mkdir ${n3} 0777
18cdir=`pwd`
19cd ${n2}
20
21# Unlink allowed on writable directory.
22expect 0 mkdir ${n0} 0755
23expect EACCES -u 65534 -g 65534 rmdir ${n0}
24expect 0 prependacl . user:65534:write_data::allow
25expect 0 -u 65534 -g 65534 rmdir ${n0}
26
27# Moving directory elsewhere allowed on writable directory.
28expect 0 mkdir ${n0} 0777
29expect 0 prependacl . user:65534:write_data::deny
30expect EACCES -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
31expect 0 prependacl . user:65534:write_data::allow
32expect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
33
34# 12
35# Moving directory from elsewhere allowed on writable directory.
36expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
37expect 0 prependacl . user:65534:append_data::allow
38expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
39expect 0 -u 65534 -g 65534 rmdir ${n0}
40
41# Moving directory from elsewhere overwriting local directory allowed
42# on writable directory.
43expect 0 mkdir ${n0} 0755
44expect 0 mkdir ../${n3}/${n0} 0777
45expect 0 prependacl . user:65534:write_data::deny
46expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
47expect 0 prependacl . user:65534:write_data::allow
48expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
49expect 0 -u 65534 -g 65534 rmdir ${n0}
50
51# 23
52# Denied DELETE changes nothing wrt removing.
53expect 0 mkdir ${n0} 0755
54expect 0 prependacl ${n0} user:65534:delete::deny
55expect 0 -u 65534 -g 65534 rmdir ${n0}
56
57# Denied DELETE changes nothing wrt moving elsewhere or from elsewhere.
58expect 0 mkdir ${n0} 0777
59expect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
60expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
61expect 0 -u 65534 -g 65534 rmdir ${n0}
62
63# DELETE_CHILD denies unlink on writable directory.
64expect 0 mkdir ${n0} 0755
65expect 0 prependacl . user:65534:delete_child::deny
66expect EPERM -u 65534 -g 65534 rmdir ${n0}
67expect 0 rmdir ${n0}
68
69# 35
70# DELETE_CHILD denies moving directory elsewhere.
71expect 0 mkdir ${n0} 0777
72expect EPERM -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
73expect 0 rename ${n0} ../${n3}/${n0}
74
75# DELETE_CHILD does not deny moving directory from elsewhere
76# to a writable directory.
77expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
78
79# DELETE_CHILD denies moving directory from elsewhere
80# to a writable directory overwriting local directory.
81expect 0 mkdir ../${n3}/${n0} 0755
82expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
83
84# DELETE allowed on directory allows for unlinking, no matter
85# what permissions on containing directory are.
86expect 0 prependacl ${n0} user:65534:delete::allow
87expect 0 -u 65534 -g 65534 rmdir ${n0}
88
89# Same for moving the directory elsewhere.
90expect 0 mkdir ${n0} 0777
91expect 0 prependacl ${n0} user:65534:delete::allow
92expect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
93
94# 46
95# Same for moving the directory from elsewhere into a writable
96# directory with DELETE_CHILD denied.
97expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
98expect 0 rmdir ${n0}
99
100# DELETE does not allow for overwriting a directory in a unwritable
101# directory with DELETE_CHILD denied.
102expect 0 mkdir ${n0} 0755
103expect 0 mkdir ../${n3}/${n0} 0777
104expect 0 prependacl . user:65534:write_data::deny
105expect 0 prependacl . user:65534:delete_child::deny
106expect EPERM -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
107expect 0 prependacl ${n0} user:65534:delete::allow
108# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
109expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
110
111# 54
112# But it allows for plain deletion.
113# XXX: expect 0 -u 65534 -g 65534 rmdir ${n0}
114expect 0 rmdir ${n0}
115
116# DELETE_CHILD allowed on unwritable directory.
117expect 0 mkdir ${n0} 0755
118expect 0 prependacl . user:65534:delete_child::allow
119expect 0 -u 65534 -g 65534 rmdir ${n0}
120
121# Moving things elsewhere is allowed.
122expect 0 mkdir ${n0} 0777
123expect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0}
124
125# 60
126# Moving things back is not.
127# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
128expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
129
130# Even if we're overwriting.
131# XXX: expect 0 mkdir ${n0} 0755
132expect 0 mkdir ../${n3}/${n0} 0777
133# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
134expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
135expect 0 mkdir ../${n3}/${n0} 0777
136
137# Even if we have DELETE on the existing directory.
138expect 0 prependacl ${n0} user:65534:delete::allow
139# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
140expect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0}
141
142# Denied DELETE changes nothing wrt removing.
143expect 0 prependacl ${n0} user:65534:delete::deny
144expect 0 -u 65534 -g 65534 rmdir ${n0}
145
146cd ${cdir}
147expect 0 rmdir ${n2}
148