1#!/bin/sh 2# $FreeBSD: src/tools/regression/fstest/tests/rename/10.t,v 1.1 2007/01/17 01:42:10 pjd Exp $ 3 4desc="rename returns EACCES or EPERM if the file pointed at by the 'to' argument exists, the directory containing 'to' is marked sticky, and neither the containing directory nor 'to' are owned by the effective user ID" 5 6n0=`namegen` 7n1=`namegen` 8n2=`namegen` 9n3=`namegen` 10n4=`namegen` 11 12expect 0 mkdir ${n4} 0755 13cdir=`pwd` 14cd ${n4} 15 16expect 0 mkdir ${n0} 0755 17expect 0 chown ${n0} 65534 65534 18 19expect 0 mkdir ${n1} 0755 20expect 0 chmod ${n1} 01777 21 22# User owns both: the sticky directory and the destination file. 23expect 0 chown ${n1} 65534 65534 24expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 25inode=`${FSTEST} lstat ${n0}/${n2} inode` 26expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 27expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 28expect ENOENT lstat ${n0}/${n2} inode 29expect ${inode} lstat ${n1}/${n3} inode 30expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 31expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 32expect ${inode} lstat ${n0}/${n2} inode 33expect ENOENT lstat ${n1}/${n3} inode 34expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 35expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 36expect ENOENT lstat ${n0}/${n2} inode 37expect ${inode} lstat ${n1}/${n3} inode 38expect 0 unlink ${n1}/${n3} 39# User owns the sticky directory, but doesn't own the destination file. 40expect 0 chown ${n1} 65534 65534 41expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 42inode=`${FSTEST} lstat ${n0}/${n2} inode` 43expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 44expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 45expect ENOENT lstat ${n0}/${n2} type 46expect ${inode} lstat ${n1}/${n3} inode 47expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 48expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 49expect ${inode} lstat ${n0}/${n2} inode 50expect ENOENT lstat ${n1}/${n3} inode 51expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 52expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 53expect ENOENT lstat ${n0}/${n2} inode 54expect ${inode} lstat ${n1}/${n3} inode 55expect 0 unlink ${n1}/${n3} 56# User owns the destination file, but doesn't own the sticky directory. 57expect 0 chown ${n1} 65533 65533 58expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 59inode=`${FSTEST} lstat ${n0}/${n2} inode` 60expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 61expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 62expect ENOENT lstat ${n0}/${n2} type 63expect ${inode} lstat ${n1}/${n3} inode 64expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 65expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 66expect ${inode} lstat ${n0}/${n2} inode 67expect ENOENT lstat ${n1}/${n3} inode 68expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 69expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 70expect ENOENT lstat ${n0}/${n2} inode 71expect ${inode} lstat ${n1}/${n3} inode 72expect 0 unlink ${n1}/${n3} 73# User doesn't own the sticky directory nor the destination file. 74expect 0 chown ${n1} 65533 65533 75expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 76expect 0 -u 65533 -g 65533 create ${n1}/${n3} 0644 77inode=`${FSTEST} lstat ${n1}/${n3} inode` 78expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 79expect ${inode} lstat ${n1}/${n3} inode 80expect 0 unlink ${n0}/${n2} 81expect 0 unlink ${n1}/${n3} 82 83# User owns both: the sticky directory and the destination file. 84expect 0 chown ${n1} 65534 65534 85expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755 86expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755 87expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 88expect ENOENT lstat ${n0}/${n2} type 89expect 0 rmdir ${n1}/${n3} 90# User owns the sticky directory, but doesn't own the destination file. 91expect 0 chown ${n1} 65534 65534 92expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755 93expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755 94expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 95expect ENOENT lstat ${n0}/${n2} type 96expect 0 rmdir ${n1}/${n3} 97# User owns the destination file, but doesn't own the sticky directory. 98expect 0 chown ${n1} 65533 65533 99expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755 100expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755 101expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 102expect ENOENT lstat ${n0}/${n2} type 103expect 0 rmdir ${n1}/${n3} 104# User doesn't own the sticky directory nor the destination file. 105expect 0 chown ${n1} 65533 65533 106expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755 107expect 0 -u 65533 -g 65533 mkdir ${n1}/${n3} 0755 108expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 109expect 0 rmdir ${n0}/${n2} 110expect 0 rmdir ${n1}/${n3} 111 112# User owns both: the sticky directory and the destination file. 113expect 0 chown ${n1} 65534 65534 114expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 115inode=`${FSTEST} lstat ${n0}/${n2} inode` 116expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 117expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 118expect ENOENT lstat ${n0}/${n2} inode 119expect ${inode} lstat ${n1}/${n3} inode 120expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 121expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 122expect ${inode} lstat ${n0}/${n2} inode 123expect ENOENT lstat ${n1}/${n3} inode 124expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 125expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 126expect ENOENT lstat ${n0}/${n2} inode 127expect ${inode} lstat ${n1}/${n3} inode 128expect 0 unlink ${n1}/${n3} 129# User owns the sticky directory, but doesn't own the destination file. 130expect 0 chown ${n1} 65534 65534 131expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 132inode=`${FSTEST} lstat ${n0}/${n2} inode` 133expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 134expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 135expect ENOENT lstat ${n0}/${n2} type 136expect ${inode} lstat ${n1}/${n3} inode 137expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 138expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 139expect ${inode} lstat ${n0}/${n2} inode 140expect ENOENT lstat ${n1}/${n3} inode 141expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 142expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 143expect ENOENT lstat ${n0}/${n2} inode 144expect ${inode} lstat ${n1}/${n3} inode 145expect 0 unlink ${n1}/${n3} 146# User owns the destination file, but doesn't own the sticky directory. 147expect 0 chown ${n1} 65533 65533 148expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 149inode=`${FSTEST} lstat ${n0}/${n2} inode` 150expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 151expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 152expect ENOENT lstat ${n0}/${n2} type 153expect ${inode} lstat ${n1}/${n3} inode 154expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 155expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 156expect ${inode} lstat ${n0}/${n2} inode 157expect ENOENT lstat ${n1}/${n3} inode 158expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 159expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 160expect ENOENT lstat ${n0}/${n2} inode 161expect ${inode} lstat ${n1}/${n3} inode 162expect 0 unlink ${n1}/${n3} 163# User doesn't own the sticky directory nor the destination file. 164expect 0 chown ${n1} 65533 65533 165expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 166expect 0 -u 65533 -g 65533 mkfifo ${n1}/${n3} 0644 167inode=`${FSTEST} lstat ${n1}/${n3} inode` 168expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 169expect ${inode} lstat ${n1}/${n3} inode 170expect 0 unlink ${n0}/${n2} 171expect 0 unlink ${n1}/${n3} 172 173# User owns both: the sticky directory and the destination file. 174expect 0 chown ${n1} 65534 65534 175expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2} 176inode=`${FSTEST} lstat ${n0}/${n2} inode` 177expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 178expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 179expect ENOENT lstat ${n0}/${n2} inode 180expect ${inode} lstat ${n1}/${n3} inode 181expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 182expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 183expect ${inode} lstat ${n0}/${n2} inode 184expect ENOENT lstat ${n1}/${n3} inode 185expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 186expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 187expect ENOENT lstat ${n0}/${n2} inode 188expect ${inode} lstat ${n1}/${n3} inode 189expect 0 unlink ${n1}/${n3} 190# User owns the sticky directory, but doesn't own the destination file. 191expect 0 chown ${n1} 65534 65534 192expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2} 193inode=`${FSTEST} lstat ${n0}/${n2} inode` 194expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 195expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 196expect ENOENT lstat ${n0}/${n2} type 197expect ${inode} lstat ${n1}/${n3} inode 198expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 199expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 200expect ${inode} lstat ${n0}/${n2} inode 201expect ENOENT lstat ${n1}/${n3} inode 202expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 203expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 204expect ENOENT lstat ${n0}/${n2} inode 205expect ${inode} lstat ${n1}/${n3} inode 206expect 0 unlink ${n1}/${n3} 207# User owns the destination file, but doesn't own the sticky directory. 208expect 0 chown ${n1} 65533 65533 209expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2} 210inode=`${FSTEST} lstat ${n0}/${n2} inode` 211expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 212expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 213expect ENOENT lstat ${n0}/${n2} type 214expect ${inode} lstat ${n1}/${n3} inode 215expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 216expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 217expect ${inode} lstat ${n0}/${n2} inode 218expect ENOENT lstat ${n1}/${n3} inode 219expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 220expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 221expect ENOENT lstat ${n0}/${n2} inode 222expect ${inode} lstat ${n1}/${n3} inode 223expect 0 unlink ${n1}/${n3} 224# User doesn't own the sticky directory nor the destination file. 225expect 0 chown ${n1} 65533 65533 226expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2} 227expect 0 -u 65533 -g 65533 symlink test ${n1}/${n3} 228inode=`${FSTEST} lstat ${n1}/${n3} inode` 229expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 230expect ${inode} lstat ${n1}/${n3} inode 231expect 0 unlink ${n0}/${n2} 232expect 0 unlink ${n1}/${n3} 233 234expect 0 rmdir ${n1} 235expect 0 rmdir ${n0} 236 237cd ${cdir} 238expect 0 rmdir ${n4} 239