]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - tools/regression/fstest/tests/rename/10.t
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / tools / regression / fstest / tests / rename / 10.t
1 #!/bin/sh
2 # $FreeBSD$
3
4 desc="rename returns EACCES or EPERM if the file pointed at by the 'to' argument exists, the directory containing 'to' is marked sticky, and neither the containing directory nor 'to' are owned by the effective user ID"
5
6 dir=`dirname $0`
7 . ${dir}/../misc.sh
8
9 echo "1..188"
10
11 n0=`namegen`
12 n1=`namegen`
13 n2=`namegen`
14 n3=`namegen`
15 n4=`namegen`
16
17 expect 0 mkdir ${n4} 0755
18 cdir=`pwd`
19 cd ${n4}
20
21 expect 0 mkdir ${n0} 0755
22 expect 0 chown ${n0} 65534 65534
23
24 expect 0 mkdir ${n1} 0755
25 expect 0 chmod ${n1} 01777
26
27 # User owns both: the sticky directory and the destination file.
28 expect 0 chown ${n1} 65534 65534
29 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
30 inode=`${fstest} lstat ${n0}/${n2} inode`
31 expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644
32 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
33 expect ENOENT lstat ${n0}/${n2} inode
34 expect ${inode} lstat ${n1}/${n3} inode
35 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
36 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
37 expect ${inode} lstat ${n0}/${n2} inode
38 expect ENOENT lstat ${n1}/${n3} inode
39 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
40 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
41 expect ENOENT lstat ${n0}/${n2} inode
42 expect ${inode} lstat ${n1}/${n3} inode
43 expect 0 unlink ${n1}/${n3}
44 # User owns the sticky directory, but doesn't own the destination file.
45 expect 0 chown ${n1} 65534 65534
46 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
47 inode=`${fstest} lstat ${n0}/${n2} inode`
48 expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644
49 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
50 expect ENOENT lstat ${n0}/${n2} type
51 expect ${inode} lstat ${n1}/${n3} inode
52 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
53 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
54 expect ${inode} lstat ${n0}/${n2} inode
55 expect ENOENT lstat ${n1}/${n3} inode
56 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
57 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
58 expect ENOENT lstat ${n0}/${n2} inode
59 expect ${inode} lstat ${n1}/${n3} inode
60 expect 0 unlink ${n1}/${n3}
61 # User owns the destination file, but doesn't own the sticky directory.
62 expect 0 chown ${n1} 65533 65533
63 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
64 inode=`${fstest} lstat ${n0}/${n2} inode`
65 expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644
66 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
67 expect ENOENT lstat ${n0}/${n2} type
68 expect ${inode} lstat ${n1}/${n3} inode
69 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
70 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
71 expect ${inode} lstat ${n0}/${n2} inode
72 expect ENOENT lstat ${n1}/${n3} inode
73 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
74 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
75 expect ENOENT lstat ${n0}/${n2} inode
76 expect ${inode} lstat ${n1}/${n3} inode
77 expect 0 unlink ${n1}/${n3}
78 # User doesn't own the sticky directory nor the destination file.
79 expect 0 chown ${n1} 65533 65533
80 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
81 expect 0 -u 65533 -g 65533 create ${n1}/${n3} 0644
82 inode=`${fstest} lstat ${n1}/${n3} inode`
83 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
84 expect ${inode} lstat ${n1}/${n3} inode
85 expect 0 unlink ${n0}/${n2}
86 expect 0 unlink ${n1}/${n3}
87
88 # User owns both: the sticky directory and the destination file.
89 expect 0 chown ${n1} 65534 65534
90 expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
91 expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755
92 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
93 expect ENOENT lstat ${n0}/${n2} type
94 expect 0 rmdir ${n1}/${n3}
95 # User owns the sticky directory, but doesn't own the destination file.
96 expect 0 chown ${n1} 65534 65534
97 expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
98 expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755
99 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
100 expect ENOENT lstat ${n0}/${n2} type
101 expect 0 rmdir ${n1}/${n3}
102 # User owns the destination file, but doesn't own the sticky directory.
103 expect 0 chown ${n1} 65533 65533
104 expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
105 expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755
106 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
107 expect ENOENT lstat ${n0}/${n2} type
108 expect 0 rmdir ${n1}/${n3}
109 # User doesn't own the sticky directory nor the destination file.
110 expect 0 chown ${n1} 65533 65533
111 expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
112 expect 0 -u 65533 -g 65533 mkdir ${n1}/${n3} 0755
113 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
114 expect 0 rmdir ${n0}/${n2}
115 expect 0 rmdir ${n1}/${n3}
116
117 # User owns both: the sticky directory and the destination file.
118 expect 0 chown ${n1} 65534 65534
119 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
120 inode=`${fstest} lstat ${n0}/${n2} inode`
121 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644
122 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
123 expect ENOENT lstat ${n0}/${n2} inode
124 expect ${inode} lstat ${n1}/${n3} inode
125 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
126 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
127 expect ${inode} lstat ${n0}/${n2} inode
128 expect ENOENT lstat ${n1}/${n3} inode
129 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
130 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
131 expect ENOENT lstat ${n0}/${n2} inode
132 expect ${inode} lstat ${n1}/${n3} inode
133 expect 0 unlink ${n1}/${n3}
134 # User owns the sticky directory, but doesn't own the destination file.
135 expect 0 chown ${n1} 65534 65534
136 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
137 inode=`${fstest} lstat ${n0}/${n2} inode`
138 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644
139 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
140 expect ENOENT lstat ${n0}/${n2} type
141 expect ${inode} lstat ${n1}/${n3} inode
142 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
143 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
144 expect ${inode} lstat ${n0}/${n2} inode
145 expect ENOENT lstat ${n1}/${n3} inode
146 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
147 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
148 expect ENOENT lstat ${n0}/${n2} inode
149 expect ${inode} lstat ${n1}/${n3} inode
150 expect 0 unlink ${n1}/${n3}
151 # User owns the destination file, but doesn't own the sticky directory.
152 expect 0 chown ${n1} 65533 65533
153 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
154 inode=`${fstest} lstat ${n0}/${n2} inode`
155 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644
156 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
157 expect ENOENT lstat ${n0}/${n2} type
158 expect ${inode} lstat ${n1}/${n3} inode
159 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
160 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
161 expect ${inode} lstat ${n0}/${n2} inode
162 expect ENOENT lstat ${n1}/${n3} inode
163 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
164 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
165 expect ENOENT lstat ${n0}/${n2} inode
166 expect ${inode} lstat ${n1}/${n3} inode
167 expect 0 unlink ${n1}/${n3}
168 # User doesn't own the sticky directory nor the destination file.
169 expect 0 chown ${n1} 65533 65533
170 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
171 expect 0 -u 65533 -g 65533 mkfifo ${n1}/${n3} 0644
172 inode=`${fstest} lstat ${n1}/${n3} inode`
173 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
174 expect ${inode} lstat ${n1}/${n3} inode
175 expect 0 unlink ${n0}/${n2}
176 expect 0 unlink ${n1}/${n3}
177
178 # User owns both: the sticky directory and the destination file.
179 expect 0 chown ${n1} 65534 65534
180 expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
181 inode=`${fstest} lstat ${n0}/${n2} inode`
182 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
183 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
184 expect ENOENT lstat ${n0}/${n2} inode
185 expect ${inode} lstat ${n1}/${n3} inode
186 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
187 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
188 expect ${inode} lstat ${n0}/${n2} inode
189 expect ENOENT lstat ${n1}/${n3} inode
190 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644
191 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
192 expect ENOENT lstat ${n0}/${n2} inode
193 expect ${inode} lstat ${n1}/${n3} inode
194 expect 0 unlink ${n1}/${n3}
195 # User owns the sticky directory, but doesn't own the destination file.
196 expect 0 chown ${n1} 65534 65534
197 expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
198 inode=`${fstest} lstat ${n0}/${n2} inode`
199 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
200 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
201 expect ENOENT lstat ${n0}/${n2} type
202 expect ${inode} lstat ${n1}/${n3} inode
203 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
204 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
205 expect ${inode} lstat ${n0}/${n2} inode
206 expect ENOENT lstat ${n1}/${n3} inode
207 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644
208 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
209 expect ENOENT lstat ${n0}/${n2} inode
210 expect ${inode} lstat ${n1}/${n3} inode
211 expect 0 unlink ${n1}/${n3}
212 # User owns the destination file, but doesn't own the sticky directory.
213 expect 0 chown ${n1} 65533 65533
214 expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
215 inode=`${fstest} lstat ${n0}/${n2} inode`
216 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
217 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
218 expect ENOENT lstat ${n0}/${n2} type
219 expect ${inode} lstat ${n1}/${n3} inode
220 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
221 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
222 expect ${inode} lstat ${n0}/${n2} inode
223 expect ENOENT lstat ${n1}/${n3} inode
224 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644
225 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
226 expect ENOENT lstat ${n0}/${n2} inode
227 expect ${inode} lstat ${n1}/${n3} inode
228 expect 0 unlink ${n1}/${n3}
229 # User doesn't own the sticky directory nor the destination file.
230 expect 0 chown ${n1} 65533 65533
231 expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
232 expect 0 -u 65533 -g 65533 symlink test ${n1}/${n3}
233 inode=`${fstest} lstat ${n1}/${n3} inode`
234 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
235 expect ${inode} lstat ${n1}/${n3} inode
236 expect 0 unlink ${n0}/${n2}
237 expect 0 unlink ${n1}/${n3}
238
239 expect 0 rmdir ${n1}
240 expect 0 rmdir ${n0}
241
242 cd ${cdir}
243 expect 0 rmdir ${n4}