]> CyberLeo.Net >> Repos - FreeBSD/releng/7.2.git/blob - tools/regression/fstest/tests/chown/00.t
Create releng/7.2 from stable/7 in preparation for 7.2-RELEASE.
[FreeBSD/releng/7.2.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 are not 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 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 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 lstat ${n0} mode
102 expect 0 unlink ${n0}
103
104 # when non-super-user calls chown(2) successfully, set-uid and set-gid bits are
105 # 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 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 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 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 test_check $ctime1 -eq $ctime2
242 expect 0 unlink ${n0}
243 # 158
244 expect 0 mkdir ${n0} 0644
245 ctime1=`${fstest} stat ${n0} ctime`
246 sleep 1
247 expect 0 chown ${n0} -1 -1
248 ctime2=`${fstest} stat ${n0} ctime`
249 test_check $ctime1 -eq $ctime2
250 expect 0 rmdir ${n0}
251 # 162
252 expect 0 mkfifo ${n0} 0644
253 ctime1=`${fstest} stat ${n0} ctime`
254 sleep 1
255 expect 0 chown ${n0} -1 -1
256 ctime2=`${fstest} stat ${n0} ctime`
257 test_check $ctime1 -eq $ctime2
258 expect 0 unlink ${n0}
259 # 166
260 expect 0 symlink ${n1} ${n0}
261 ctime1=`${fstest} lstat ${n0} ctime`
262 sleep 1
263 expect 0 lchown ${n0} -1 -1
264 ctime2=`${fstest} lstat ${n0} ctime`
265 test_check $ctime1 -eq $ctime2
266 expect 0 unlink ${n0}
267
268 # unsuccessful chown(2) does not update ctime.
269 # 170
270 expect 0 create ${n0} 0644
271 ctime1=`${fstest} stat ${n0} ctime`
272 sleep 1
273 expect EPERM -u 65534 chown ${n0} 65534 -1
274 ctime2=`${fstest} stat ${n0} ctime`
275 test_check $ctime1 -eq $ctime2
276 expect 0 unlink ${n0}
277 # 174
278 expect 0 mkdir ${n0} 0755
279 ctime1=`${fstest} stat ${n0} ctime`
280 sleep 1
281 expect EPERM -u 65534 -g 65534 chown ${n0} -1 65534
282 ctime2=`${fstest} stat ${n0} ctime`
283 test_check $ctime1 -eq $ctime2
284 expect 0 rmdir ${n0}
285 # 178
286 expect 0 mkfifo ${n0} 0644
287 ctime1=`${fstest} stat ${n0} ctime`
288 sleep 1
289 expect EPERM -u 65534 -g 65534 chown ${n0} 65534 65534
290 ctime2=`${fstest} stat ${n0} ctime`
291 test_check $ctime1 -eq $ctime2
292 expect 0 unlink ${n0}
293 # 182
294 expect 0 symlink ${n1} ${n0}
295 ctime1=`${fstest} lstat ${n0} ctime`
296 sleep 1
297 expect EPERM -u 65534 -g 65534 lchown ${n0} 65534 65534
298 ctime2=`${fstest} lstat ${n0} ctime`
299 test_check $ctime1 -eq $ctime2
300 expect 0 unlink ${n0}
301
302 # 186
303 cd ${cdir}
304 expect 0 rmdir ${n2}