Deleted Added
full compact
10.t (211156) 10.t (211180)
1#!/bin/sh
1#!/bin/sh
2# $FreeBSD: head/tools/regression/fstest/tests/rename/10.t 211156 2010-08-10 22:57:43Z pjd $
2# $FreeBSD: head/tools/regression/fstest/tests/rename/10.t 211180 2010-08-11 16:34:44Z pjd $
3
4desc="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
6dir=`dirname $0`
7. ${dir}/../misc.sh
8
3
4desc="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
6dir=`dirname $0`
7. ${dir}/../misc.sh
8
9echo "1..1903"
9echo "1..2099"
10
11n0=`namegen`
12n1=`namegen`
13n2=`namegen`
14n3=`namegen`
15n4=`namegen`
16
17expect 0 mkdir ${n4} 0755
18cdir=`pwd`
19cd ${n4}
20
21expect 0 mkdir ${n0} 0755
22expect 0 chown ${n0} 65534 65534
23
24expect 0 mkdir ${n1} 0755
25expect 0 chmod ${n1} 01777
26
10
11n0=`namegen`
12n1=`namegen`
13n2=`namegen`
14n3=`namegen`
15n4=`namegen`
16
17expect 0 mkdir ${n4} 0755
18cdir=`pwd`
19cd ${n4}
20
21expect 0 mkdir ${n0} 0755
22expect 0 chown ${n0} 65534 65534
23
24expect 0 mkdir ${n1} 0755
25expect 0 chmod ${n1} 01777
26
27create_file() {
28 case "${1}" in
29 regular)
30 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
31 ;;
32 fifo)
33 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
34 ;;
35 block)
36 expect 0 mknod ${n0}/${n2} b 0644 1 2
37 expect 0 chown ${n0}/${n2} 65534 65534
38 ;;
39 char)
40 expect 0 mknod ${n0}/${n2} c 0644 1 2
41 expect 0 chown ${n0}/${n2} 65534 65534
42 ;;
43 socket)
44 expect 0 -u 65534 -g 65534 bind ${n0}/${n2}
45 ;;
46 symlink)
47 expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
48 ;;
49 esac
50}
51
52for type in regular fifo block char socket symlink; do
53 # User owns both: the sticky directory and the destination file.
54 expect 0 chown ${n1} 65534 65534
27for type in regular fifo block char socket symlink; do
28 # User owns both: the sticky directory and the destination file.
29 expect 0 chown ${n1} 65534 65534
55 create_file ${type}
30 create_file ${type} ${n0}/${n2} 65534 65534
56 inode=`${fstest} lstat ${n0}/${n2} inode`
57
31 inode=`${fstest} lstat ${n0}/${n2} inode`
32
58 expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644
59 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
60 expect ENOENT lstat ${n0}/${n2} inode
61 expect ${inode} lstat ${n1}/${n3} inode
62 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
63 expect ${inode} lstat ${n0}/${n2} inode
64 expect ENOENT lstat ${n1}/${n3} inode
65
66 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644
67 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
68 expect ENOENT lstat ${n0}/${n2} inode
69 expect ${inode} lstat ${n1}/${n3} inode
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
74 expect 0 mknod ${n1}/${n3} b 0644 1 2
75 expect 0 chown ${n1}/${n3} 65534 65534
76 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
77 expect ENOENT lstat ${n0}/${n2} inode
78 expect ${inode} lstat ${n1}/${n3} inode
79 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
80 expect ${inode} lstat ${n0}/${n2} inode
81 expect ENOENT lstat ${n1}/${n3} inode
82
83 expect 0 mknod ${n1}/${n3} c 0644 1 2
84 expect 0 chown ${n1}/${n3} 65534 65534
85 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
86 expect ENOENT lstat ${n0}/${n2} inode
87 expect ${inode} lstat ${n1}/${n3} inode
88 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
89 expect ${inode} lstat ${n0}/${n2} inode
90 expect ENOENT lstat ${n1}/${n3} inode
91
92 expect 0 -u 65534 -g 65534 bind ${n1}/${n3}
93 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
94 expect ENOENT lstat ${n0}/${n2} inode
95 expect ${inode} lstat ${n1}/${n3} inode
96 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
97 expect ${inode} lstat ${n0}/${n2} inode
98 expect ENOENT lstat ${n1}/${n3} inode
99
100 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
101 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
102 expect ENOENT lstat ${n0}/${n2} inode
103 expect ${inode} lstat ${n1}/${n3} inode
104 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
105 expect ${inode} lstat ${n0}/${n2} inode
106 expect ENOENT lstat ${n1}/${n3} inode
107
108 expect 0 unlink ${n0}/${n2}
109
110 # User owns the sticky directory, but doesn't own the destination file.
111 for id in 0 65533; do
112 expect 0 chown ${n1} 65534 65534
113 create_file ${type}
114 inode=`${fstest} lstat ${n0}/${n2} inode`
115
116 expect 0 -u ${id} -g ${id} create ${n1}/${n3} 0644
33 for type in regular fifo block char socket symlink; do
34 create_file ${type} ${n1}/${n3} 65534 65534
117 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
118 expect ENOENT lstat ${n0}/${n2} inode
119 expect ${inode} lstat ${n1}/${n3} inode
120 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
121 expect ${inode} lstat ${n0}/${n2} inode
122 expect ENOENT lstat ${n1}/${n3} inode
35 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
36 expect ENOENT lstat ${n0}/${n2} inode
37 expect ${inode} lstat ${n1}/${n3} inode
38 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
39 expect ${inode} lstat ${n0}/${n2} inode
40 expect ENOENT lstat ${n1}/${n3} inode
41 done
123
42
124 expect 0 -u ${id} -g ${id} mkfifo ${n1}/${n3} 0644
125 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
126 expect ENOENT lstat ${n0}/${n2} inode
127 expect ${inode} lstat ${n1}/${n3} inode
128 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
129 expect ${inode} lstat ${n0}/${n2} inode
130 expect ENOENT lstat ${n1}/${n3} inode
43 expect 0 unlink ${n0}/${n2}
131
44
132 expect 0 mknod ${n1}/${n3} b 0644 1 2
133 expect 0 chown ${n1}/${n3} ${id} ${id}
134 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
135 expect ENOENT lstat ${n0}/${n2} inode
136 expect ${inode} lstat ${n1}/${n3} inode
137 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
138 expect ${inode} lstat ${n0}/${n2} inode
139 expect ENOENT lstat ${n1}/${n3} inode
45 # User owns the sticky directory, but doesn't own the destination file.
46 for id in 0 65533; do
47 expect 0 chown ${n1} 65534 65534
48 create_file ${type} ${n0}/${n2} 65534 65534
49 inode=`${fstest} lstat ${n0}/${n2} inode`
140
50
141 expect 0 mknod ${n1}/${n3} c 0644 1 2
142 expect 0 chown ${n1}/${n3} ${id} ${id}
143 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
144 expect ENOENT lstat ${n0}/${n2} inode
145 expect ${inode} lstat ${n1}/${n3} inode
146 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
147 expect ${inode} lstat ${n0}/${n2} inode
148 expect ENOENT lstat ${n1}/${n3} inode
51 for type in regular fifo block char socket symlink; do
52 create_file ${type} ${n1}/${n3} ${id} ${id}
53 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
54 expect ENOENT lstat ${n0}/${n2} inode
55 expect ${inode} lstat ${n1}/${n3} inode
56 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
57 expect ${inode} lstat ${n0}/${n2} inode
58 expect ENOENT lstat ${n1}/${n3} inode
59 done
149
60
150 expect 0 -u ${id} -g ${id} bind ${n1}/${n3}
151 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
152 expect ENOENT lstat ${n0}/${n2} inode
153 expect ${inode} lstat ${n1}/${n3} inode
154 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
155 expect ${inode} lstat ${n0}/${n2} inode
156 expect ENOENT lstat ${n1}/${n3} inode
157
158 expect 0 -u ${id} -g ${id} symlink test ${n1}/${n3}
159 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
160 expect ENOENT lstat ${n0}/${n2} inode
161 expect ${inode} lstat ${n1}/${n3} inode
162 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
163 expect ${inode} lstat ${n0}/${n2} inode
164 expect ENOENT lstat ${n1}/${n3} inode
165
166 expect 0 unlink ${n0}/${n2}
167 done
168
169 # User owns the destination file, but doesn't own the sticky directory.
170 for id in 0 65533; do
171 expect 0 chown ${n1} ${id} ${id}
61 expect 0 unlink ${n0}/${n2}
62 done
63
64 # User owns the destination file, but doesn't own the sticky directory.
65 for id in 0 65533; do
66 expect 0 chown ${n1} ${id} ${id}
172 create_file ${type}
67 create_file ${type} ${n0}/${n2} 65534 65534
173 inode=`${fstest} lstat ${n0}/${n2} inode`
174
68 inode=`${fstest} lstat ${n0}/${n2} inode`
69
175 expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644
176 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
177 expect ENOENT lstat ${n0}/${n2} inode
178 expect ${inode} lstat ${n1}/${n3} inode
179 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
180 expect ${inode} lstat ${n0}/${n2} inode
181 expect ENOENT lstat ${n1}/${n3} inode
70 for type in regular fifo block char socket symlink; do
71 create_file ${type} ${n1}/${n3} 65534 65534
72 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
73 expect ENOENT lstat ${n0}/${n2} inode
74 expect ${inode} lstat ${n1}/${n3} inode
75 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
76 expect ${inode} lstat ${n0}/${n2} inode
77 expect ENOENT lstat ${n1}/${n3} inode
78 done
182
79
183 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644
184 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
185 expect ENOENT lstat ${n0}/${n2} inode
186 expect ${inode} lstat ${n1}/${n3} inode
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
191 expect 0 mknod ${n1}/${n3} b 0644 1 2
192 expect 0 chown ${n1}/${n3} 65534 65534
193 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
194 expect ENOENT lstat ${n0}/${n2} inode
195 expect ${inode} lstat ${n1}/${n3} inode
196 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
197 expect ${inode} lstat ${n0}/${n2} inode
198 expect ENOENT lstat ${n1}/${n3} inode
199
200 expect 0 mknod ${n1}/${n3} c 0644 1 2
201 expect 0 chown ${n1}/${n3} 65534 65534
202 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
203 expect ENOENT lstat ${n0}/${n2} inode
204 expect ${inode} lstat ${n1}/${n3} inode
205 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
206 expect ${inode} lstat ${n0}/${n2} inode
207 expect ENOENT lstat ${n1}/${n3} inode
208
209 expect 0 -u 65534 -g 65534 bind ${n1}/${n3}
210 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
211 expect ENOENT lstat ${n0}/${n2} inode
212 expect ${inode} lstat ${n1}/${n3} inode
213 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2}
214 expect ${inode} lstat ${n0}/${n2} inode
215 expect ENOENT lstat ${n1}/${n3} inode
216
217 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
218 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
219 expect ENOENT lstat ${n0}/${n2} inode
220 expect ${inode} lstat ${n1}/${n3} inode
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
225 expect 0 unlink ${n0}/${n2}
226 done
227
228 # User doesn't own the sticky directory nor the destination file.
229 for id in 0 65533; do
230 expect 0 chown ${n1} ${id} ${id}
80 expect 0 unlink ${n0}/${n2}
81 done
82
83 # User doesn't own the sticky directory nor the destination file.
84 for id in 0 65533; do
85 expect 0 chown ${n1} ${id} ${id}
231 create_file ${type}
86 create_file ${type} ${n0}/${n2} 65534 65534
232 inode=`${fstest} lstat ${n0}/${n2} inode`
233
87 inode=`${fstest} lstat ${n0}/${n2} inode`
88
234 expect 0 -u ${id} -g ${id} create ${n1}/${n3} 0644
235 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
236 expect ${inode} lstat ${n0}/${n2} inode
237 expect ${id},${id} lstat ${n1}/${n3} uid,gid
238 expect 0 unlink ${n1}/${n3}
89 for type in regular fifo block char socket symlink; do
90 create_file ${type} ${n1}/${n3} ${id} ${id}
91 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
92 expect ${inode} lstat ${n0}/${n2} inode
93 expect ${id},${id} lstat ${n1}/${n3} uid,gid
94 expect 0 unlink ${n1}/${n3}
95 done
239
96
240 expect 0 -u ${id} -g ${id} mkfifo ${n1}/${n3} 0644
241 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
242 expect ${inode} lstat ${n0}/${n2} inode
243 expect ${id},${id} lstat ${n1}/${n3} uid,gid
244 expect 0 unlink ${n1}/${n3}
245
246 expect 0 mknod ${n1}/${n3} b 0644 1 2
247 expect 0 chown ${n1}/${n3} ${id} ${id}
248 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
249 expect ${inode} lstat ${n0}/${n2} inode
250 expect ${id},${id} lstat ${n1}/${n3} uid,gid
251 expect 0 unlink ${n1}/${n3}
252
253 expect 0 mknod ${n1}/${n3} c 0644 1 2
254 expect 0 chown ${n1}/${n3} ${id} ${id}
255 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
256 expect ${inode} lstat ${n0}/${n2} inode
257 expect ${id},${id} lstat ${n1}/${n3} uid,gid
258 expect 0 unlink ${n1}/${n3}
259
260 expect 0 -u ${id} -g ${id} bind ${n1}/${n3}
261 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
262 expect ${inode} lstat ${n0}/${n2} inode
263 expect ${id},${id} lstat ${n1}/${n3} uid,gid
264 expect 0 unlink ${n1}/${n3}
265
266 expect 0 -u ${id} -g ${id} symlink test ${n1}/${n3}
267 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
268 expect ${inode} lstat ${n0}/${n2} inode
269 expect ${id},${id} lstat ${n1}/${n3} uid,gid
270 expect 0 unlink ${n1}/${n3}
271
272 expect 0 unlink ${n0}/${n2}
273 done
274done
275
276# User owns both: the sticky directory and the destination directory.
277expect 0 chown ${n1} 65534 65534
278expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
279inode=`${fstest} lstat ${n0}/${n2} inode`

--- 52 unchanged lines hidden ---
97 expect 0 unlink ${n0}/${n2}
98 done
99done
100
101# User owns both: the sticky directory and the destination directory.
102expect 0 chown ${n1} 65534 65534
103expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
104inode=`${fstest} lstat ${n0}/${n2} inode`

--- 52 unchanged lines hidden ---