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