]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - tools/regression/fstest/tests/chown/00.t
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / tools / regression / fstest / tests / chown / 00.t
1 #!/bin/sh
2 # $FreeBSD$
3
4 desc="chown changes ownership"
5
6 dir=`dirname $0`
7 . ${dir}/../misc.sh
8
9 if supported lchmod; then
10         echo "1..186"
11 else
12         echo "1..171"
13 fi
14
15 n0=`namegen`
16 n1=`namegen`
17 n2=`namegen`
18
19 expect 0 mkdir ${n2} 0755
20 cdir=`pwd`
21 cd ${n2}
22
23 # super-user can always modify ownership
24 # 2
25 expect 0 create ${n0} 0644
26 expect 0 chown ${n0} 123 456
27 expect 123,456 lstat ${n0} uid,gid
28 expect 0 chown ${n0} 0 0
29 expect 0,0 lstat ${n0} uid,gid
30 expect 0 unlink ${n0}
31 # 8
32 expect 0 mkfifo ${n0} 0644
33 expect 0 chown ${n0} 123 456
34 expect 123,456 lstat ${n0} uid,gid
35 expect 0 chown ${n0} 0 0
36 expect 0,0 lstat ${n0} uid,gid
37 expect 0 unlink ${n0}
38 # 14
39 expect 0 mkdir ${n0} 0755
40 expect 0 chown ${n0} 123 456
41 expect 123,456 lstat ${n0} uid,gid
42 expect 0 chown ${n0} 0 0
43 expect 0,0 lstat ${n0} uid,gid
44 expect 0 rmdir ${n0}
45 # 20
46 expect 0 create ${n0} 0644
47 expect 0 symlink ${n0} ${n1}
48 expect 0 chown ${n1} 123 456
49 expect 123,456 stat ${n1} uid,gid
50 expect 123,456 stat ${n0} uid,gid
51 expect 0 lchown ${n1} 135 579
52 expect 135,579 lstat ${n1} uid,gid
53 expect 123,456 stat ${n1} uid,gid
54 expect 123,456 stat ${n0} uid,gid
55 expect 0 unlink ${n0}
56 expect 0 unlink ${n1}
57
58 # non-super-user can modify file group if he is owner of a file and
59 # gid he is setting is in his groups list.
60 # 31
61 expect 0 create ${n0} 0644
62 expect 0 chown ${n0} 65534 65533
63 expect 65534,65533 lstat ${n0} uid,gid
64 expect 0 -u 65534 -g 65532,65531 -- chown ${n0} -1 65532
65 expect 65534,65532 lstat ${n0} uid,gid
66 expect 0 -u 65534 -g 65532,65531 chown ${n0} 65534 65531
67 expect 65534,65531 lstat ${n0} uid,gid
68 expect 0 unlink ${n0}
69
70 # chown(2) return 0 if user is not owner of a file, but chown(2) is called
71 # with both uid and gid equal to -1.
72 # 39
73 expect 0 create ${n0} 0644
74 expect 0 chown ${n0} 65534 65533
75 expect 0 -u 65532 -g 65531 -- chown ${n0} -1 -1
76 expect 0 unlink ${n0}
77
78 # when super-user calls chown(2), set-uid and set-gid bits may be removed.
79 # 43
80 expect 0 create ${n0} 0644
81 expect 0 chown ${n0} 65534 65533
82 expect 0 chmod ${n0} 06555
83 expect 06555 lstat ${n0} mode
84 expect 0 chown ${n0} 65532 65531
85 expect "06555|0555" lstat ${n0} mode
86 expect 0 unlink ${n0}
87 # 50
88 expect 0 create ${n0} 0644
89 expect 0 chown ${n0} 0 0
90 expect 0 chmod ${n0} 06555
91 expect 06555 lstat ${n0} mode
92 expect 0 chown ${n0} 65534 65533
93 expect "06555|0555" lstat ${n0} mode
94 expect 0 unlink ${n0}
95 # 57
96 expect 0 create ${n0} 0644
97 expect 0 chown ${n0} 65534 65533
98 expect 0 chmod ${n0} 06555
99 expect 06555 lstat ${n0} mode
100 expect 0 chown ${n0} 0 0
101 expect "06555|0555" lstat ${n0} mode
102 expect 0 unlink ${n0}
103
104 # when non-super-user calls chown(2) successfully, set-uid and set-gid bits may
105 # be removed, except when both uid and gid are equal to -1.
106 # 64
107 expect 0 create ${n0} 0644
108 expect 0 chown ${n0} 65534 65533
109 expect 0 chmod ${n0} 06555
110 expect 06555 lstat ${n0} mode
111 expect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532
112 expect 0555,65534,65532 lstat ${n0} mode,uid,gid
113 expect 0 chmod ${n0} 06555
114 expect 06555 lstat ${n0} mode
115 expect 0 -u 65534 -g 65533,65532 -- chown ${n0} -1 65533
116 expect 0555,65534,65533 lstat ${n0} mode,uid,gid
117 expect 0 chmod ${n0} 06555
118 expect 06555 lstat ${n0} mode
119 expect 0 -u 65534 -g 65533,65532 -- chown ${n0} -1 -1
120 expect "06555,65534,65533|0555,65534,65533" lstat ${n0} mode,uid,gid
121 expect 0 unlink ${n0}
122 # 79
123 expect 0 mkdir ${n0} 0755
124 expect 0 chown ${n0} 65534 65533
125 expect 0 chmod ${n0} 06555
126 expect 06555 lstat ${n0} mode
127 expect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532
128 expect "0555,65534,65532|06555,65534,65532" lstat ${n0} mode,uid,gid
129 expect 0 chmod ${n0} 06555
130 expect 06555 lstat ${n0} mode
131 expect 0 -u 65534 -g 65533,65532 -- chown ${n0} -1 65533
132 expect "0555,65534,65533|06555,65534,65533" lstat ${n0} mode,uid,gid
133 expect 0 chmod ${n0} 06555
134 expect 06555 lstat ${n0} mode
135 expect 0 -u 65534 -g 65533,65532 -- chown ${n0} -1 -1
136 expect 06555,65534,65533 lstat ${n0} mode,uid,gid
137 expect 0 rmdir ${n0}
138 # 94
139 if supported lchmod; then
140         expect 0 symlink ${n1} ${n0}
141         expect 0 lchown ${n0} 65534 65533
142         expect 0 lchmod ${n0} 06555
143         expect 06555 lstat ${n0} mode
144         expect 0 -u 65534 -g 65533,65532 lchown ${n0} 65534 65532
145         expect 0555,65534,65532 lstat ${n0} mode,uid,gid
146         expect 0 lchmod ${n0} 06555
147         expect 06555 lstat ${n0} mode
148         expect 0 -u 65534 -g 65533,65532 -- lchown ${n0} -1 65533
149         expect 0555,65534,65533 lstat ${n0} mode,uid,gid
150         expect 0 lchmod ${n0} 06555
151         expect 06555 lstat ${n0} mode
152         expect 0 -u 65534 -g 65533,65532 -- lchown ${n0} -1 -1
153         expect 06555,65534,65533 lstat ${n0} mode,uid,gid
154         expect 0 unlink ${n0}
155 fi
156
157 # successfull chown(2) call (except uid and gid equal to -1) updates ctime.
158 # 109
159 expect 0 create ${n0} 0644
160 ctime1=`${fstest} stat ${n0} ctime`
161 sleep 1
162 expect 0 chown ${n0} 65534 65533
163 expect 65534,65533 lstat ${n0} uid,gid
164 ctime2=`${fstest} stat ${n0} ctime`
165 test_check $ctime1 -lt $ctime2
166 expect 0 unlink ${n0}
167 # 114
168 expect 0 mkdir ${n0} 0755
169 ctime1=`${fstest} stat ${n0} ctime`
170 sleep 1
171 expect 0 chown ${n0} 65534 65533
172 expect 65534,65533 lstat ${n0} uid,gid
173 ctime2=`${fstest} stat ${n0} ctime`
174 test_check $ctime1 -lt $ctime2
175 expect 0 rmdir ${n0}
176 # 119
177 expect 0 mkfifo ${n0} 0644
178 ctime1=`${fstest} stat ${n0} ctime`
179 sleep 1
180 expect 0 chown ${n0} 65534 65533
181 expect 65534,65533 lstat ${n0} uid,gid
182 ctime2=`${fstest} stat ${n0} ctime`
183 test_check $ctime1 -lt $ctime2
184 expect 0 unlink ${n0}
185 # 124
186 expect 0 symlink ${n1} ${n0}
187 ctime1=`${fstest} lstat ${n0} ctime`
188 sleep 1
189 expect 0 lchown ${n0} 65534 65533
190 expect 65534,65533 lstat ${n0} uid,gid
191 ctime2=`${fstest} lstat ${n0} ctime`
192 test_check $ctime1 -lt $ctime2
193 expect 0 unlink ${n0}
194 # 129
195 expect 0 create ${n0} 0644
196 expect 0 chown ${n0} 65534 65533
197 ctime1=`${fstest} stat ${n0} ctime`
198 sleep 1
199 expect 0 -u 65534 -g 65532 chown ${n0} 65534 65532
200 expect 65534,65532 lstat ${n0} uid,gid
201 ctime2=`${fstest} stat ${n0} ctime`
202 test_check $ctime1 -lt $ctime2
203 expect 0 unlink ${n0}
204 # 135
205 expect 0 mkdir ${n0} 0755
206 expect 0 chown ${n0} 65534 65533
207 ctime1=`${fstest} stat ${n0} ctime`
208 sleep 1
209 expect 0 -u 65534 -g 65532 chown ${n0} 65534 65532
210 expect 65534,65532 lstat ${n0} uid,gid
211 ctime2=`${fstest} stat ${n0} ctime`
212 test_check $ctime1 -lt $ctime2
213 expect 0 rmdir ${n0}
214 # 141
215 expect 0 mkfifo ${n0} 0644
216 expect 0 chown ${n0} 65534 65533
217 ctime1=`${fstest} stat ${n0} ctime`
218 sleep 1
219 expect 0 chown ${n0} 65534 65533
220 expect 0 -u 65534 -g 65532 chown ${n0} 65534 65532
221 expect 65534,65532 lstat ${n0} uid,gid
222 ctime2=`${fstest} stat ${n0} ctime`
223 test_check $ctime1 -lt $ctime2
224 expect 0 unlink ${n0}
225 # 148
226 expect 0 symlink ${n1} ${n0}
227 expect 0 lchown ${n0} 65534 65533
228 ctime1=`${fstest} lstat ${n0} ctime`
229 sleep 1
230 expect 0 -u 65534 -g 65532 lchown ${n0} 65534 65532
231 expect 65534,65532 lstat ${n0} uid,gid
232 ctime2=`${fstest} lstat ${n0} ctime`
233 test_check $ctime1 -lt $ctime2
234 expect 0 unlink ${n0}
235 # 154
236 expect 0 create ${n0} 0644
237 ctime1=`${fstest} stat ${n0} ctime`
238 sleep 1
239 expect 0 -- chown ${n0} -1 -1
240 ctime2=`${fstest} stat ${n0} ctime`
241 todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
242 test_check $ctime1 -eq $ctime2
243 expect 0 unlink ${n0}
244 # 158
245 expect 0 mkdir ${n0} 0644
246 ctime1=`${fstest} stat ${n0} ctime`
247 sleep 1
248 expect 0 -- chown ${n0} -1 -1
249 ctime2=`${fstest} stat ${n0} ctime`
250 todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
251 test_check $ctime1 -eq $ctime2
252 expect 0 rmdir ${n0}
253 # 162
254 expect 0 mkfifo ${n0} 0644
255 ctime1=`${fstest} stat ${n0} ctime`
256 sleep 1
257 expect 0 -- chown ${n0} -1 -1
258 ctime2=`${fstest} stat ${n0} ctime`
259 todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
260 test_check $ctime1 -eq $ctime2
261 expect 0 unlink ${n0}
262 # 166
263 expect 0 symlink ${n1} ${n0}
264 ctime1=`${fstest} lstat ${n0} ctime`
265 sleep 1
266 expect 0 -- lchown ${n0} -1 -1
267 ctime2=`${fstest} lstat ${n0} ctime`
268 todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
269 test_check $ctime1 -eq $ctime2
270 expect 0 unlink ${n0}
271
272 # unsuccessful chown(2) does not update ctime.
273 # 170
274 expect 0 create ${n0} 0644
275 ctime1=`${fstest} stat ${n0} ctime`
276 sleep 1
277 expect EPERM -u 65534 -- chown ${n0} 65534 -1
278 ctime2=`${fstest} stat ${n0} ctime`
279 test_check $ctime1 -eq $ctime2
280 expect 0 unlink ${n0}
281 # 174
282 expect 0 mkdir ${n0} 0755
283 ctime1=`${fstest} stat ${n0} ctime`
284 sleep 1
285 expect EPERM -u 65534 -g 65534 -- chown ${n0} -1 65534
286 ctime2=`${fstest} stat ${n0} ctime`
287 test_check $ctime1 -eq $ctime2
288 expect 0 rmdir ${n0}
289 # 178
290 expect 0 mkfifo ${n0} 0644
291 ctime1=`${fstest} stat ${n0} ctime`
292 sleep 1
293 expect EPERM -u 65534 -g 65534 chown ${n0} 65534 65534
294 ctime2=`${fstest} stat ${n0} ctime`
295 test_check $ctime1 -eq $ctime2
296 expect 0 unlink ${n0}
297 # 182
298 expect 0 symlink ${n1} ${n0}
299 ctime1=`${fstest} lstat ${n0} ctime`
300 sleep 1
301 expect EPERM -u 65534 -g 65534 lchown ${n0} 65534 65534
302 ctime2=`${fstest} lstat ${n0} ctime`
303 test_check $ctime1 -eq $ctime2
304 expect 0 unlink ${n0}
305
306 # 186
307 cd ${cdir}
308 expect 0 rmdir ${n2}