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