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