4 desc
="chown changes ownership"
9 if supported lchmod
; then
19 expect
0 mkdir
${n2} 0755
23 # super-user can always modify ownership
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
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
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
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
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.
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
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.
73 expect
0 create
${n0} 0644
74 expect
0 chown
${n0} 65534 65533
75 expect
0 -u 65532 -g 65531 chown
${n0} -1 -1
78 # when super-user calls chown(2), set-uid and set-gid bits are not removed.
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
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
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}
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.
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}
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
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}
157 # successfull chown(2) call (except uid and gid equal to -1) updates ctime.
159 expect
0 create
${n0} 0644
160 ctime1
=`${fstest} stat ${n0} ctime`
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}
168 expect
0 mkdir
${n0} 0755
169 ctime1
=`${fstest} stat ${n0} ctime`
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
177 expect
0 mkfifo ${n0} 0644
178 ctime1
=`${fstest} stat ${n0} ctime`
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}
186 expect
0 symlink
${n1} ${n0}
187 ctime1
=`${fstest} lstat ${n0} ctime`
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}
195 expect
0 create
${n0} 0644
196 expect
0 chown
${n0} 65534 65533
197 ctime1
=`${fstest} stat ${n0} ctime`
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}
205 expect
0 mkdir
${n0} 0755
206 expect
0 chown
${n0} 65534 65533
207 ctime1
=`${fstest} stat ${n0} ctime`
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
215 expect
0 mkfifo ${n0} 0644
216 expect
0 chown
${n0} 65534 65533
217 ctime1
=`${fstest} stat ${n0} ctime`
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}
226 expect
0 symlink
${n1} ${n0}
227 expect
0 lchown
${n0} 65534 65533
228 ctime1
=`${fstest} lstat ${n0} ctime`
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}
236 expect
0 create
${n0} 0644
237 ctime1
=`${fstest} stat ${n0} ctime`
239 expect
0 chown
${n0} -1 -1
240 ctime2
=`${fstest} stat ${n0} ctime`
241 test_check
$ctime1 -eq $ctime2
242 expect
0 unlink
${n0}
244 expect
0 mkdir
${n0} 0644
245 ctime1
=`${fstest} stat ${n0} ctime`
247 expect
0 chown
${n0} -1 -1
248 ctime2
=`${fstest} stat ${n0} ctime`
249 test_check
$ctime1 -eq $ctime2
252 expect
0 mkfifo ${n0} 0644
253 ctime1
=`${fstest} stat ${n0} ctime`
255 expect
0 chown
${n0} -1 -1
256 ctime2
=`${fstest} stat ${n0} ctime`
257 test_check
$ctime1 -eq $ctime2
258 expect
0 unlink
${n0}
260 expect
0 symlink
${n1} ${n0}
261 ctime1
=`${fstest} lstat ${n0} ctime`
263 expect
0 lchown
${n0} -1 -1
264 ctime2
=`${fstest} lstat ${n0} ctime`
265 test_check
$ctime1 -eq $ctime2
266 expect
0 unlink
${n0}
268 # unsuccessful chown(2) does not update ctime.
270 expect
0 create
${n0} 0644
271 ctime1
=`${fstest} stat ${n0} ctime`
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}
278 expect
0 mkdir
${n0} 0755
279 ctime1
=`${fstest} stat ${n0} ctime`
281 expect EPERM
-u 65534 -g 65534 chown
${n0} -1 65534
282 ctime2
=`${fstest} stat ${n0} ctime`
283 test_check
$ctime1 -eq $ctime2
286 expect
0 mkfifo ${n0} 0644
287 ctime1
=`${fstest} stat ${n0} ctime`
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}
294 expect
0 symlink
${n1} ${n0}
295 ctime1
=`${fstest} lstat ${n0} ctime`
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}