1#!/bin/sh
| 1#!/bin/sh
|
2# $FreeBSD: head/tools/regression/fstest/tests/rename/10.t 211156 2010-08-10 22:57:43Z pjd $
| 2# $FreeBSD: head/tools/regression/fstest/tests/rename/10.t 211180 2010-08-11 16:34:44Z pjd $
|
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 6dir=`dirname $0` 7. ${dir}/../misc.sh 8
| 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 6dir=`dirname $0` 7. ${dir}/../misc.sh 8
|
9echo "1..1903"
| 9echo "1..2099"
|
10 11n0=`namegen` 12n1=`namegen` 13n2=`namegen` 14n3=`namegen` 15n4=`namegen` 16 17expect 0 mkdir ${n4} 0755 18cdir=`pwd` 19cd ${n4} 20 21expect 0 mkdir ${n0} 0755 22expect 0 chown ${n0} 65534 65534 23 24expect 0 mkdir ${n1} 0755 25expect 0 chmod ${n1} 01777 26
| 10 11n0=`namegen` 12n1=`namegen` 13n2=`namegen` 14n3=`namegen` 15n4=`namegen` 16 17expect 0 mkdir ${n4} 0755 18cdir=`pwd` 19cd ${n4} 20 21expect 0 mkdir ${n0} 0755 22expect 0 chown ${n0} 65534 65534 23 24expect 0 mkdir ${n1} 0755 25expect 0 chmod ${n1} 01777 26
|
27create_file() { 28 case "${1}" in 29 regular) 30 expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 31 ;; 32 fifo) 33 expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 34 ;; 35 block) 36 expect 0 mknod ${n0}/${n2} b 0644 1 2 37 expect 0 chown ${n0}/${n2} 65534 65534 38 ;; 39 char) 40 expect 0 mknod ${n0}/${n2} c 0644 1 2 41 expect 0 chown ${n0}/${n2} 65534 65534 42 ;; 43 socket) 44 expect 0 -u 65534 -g 65534 bind ${n0}/${n2} 45 ;; 46 symlink) 47 expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2} 48 ;; 49 esac 50} 51
| |
52for type in regular fifo block char socket symlink; do 53 # User owns both: the sticky directory and the destination file. 54 expect 0 chown ${n1} 65534 65534
| 27for type in regular fifo block char socket symlink; do 28 # User owns both: the sticky directory and the destination file. 29 expect 0 chown ${n1} 65534 65534
|
55 create_file ${type}
| 30 create_file ${type} ${n0}/${n2} 65534 65534
|
56 inode=`${fstest} lstat ${n0}/${n2} inode` 57
| 31 inode=`${fstest} lstat ${n0}/${n2} inode` 32
|
58 expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 59 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 60 expect ENOENT lstat ${n0}/${n2} inode 61 expect ${inode} lstat ${n1}/${n3} inode 62 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 63 expect ${inode} lstat ${n0}/${n2} inode 64 expect ENOENT lstat ${n1}/${n3} inode 65 66 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 67 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 68 expect ENOENT lstat ${n0}/${n2} inode 69 expect ${inode} lstat ${n1}/${n3} inode 70 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 71 expect ${inode} lstat ${n0}/${n2} inode 72 expect ENOENT lstat ${n1}/${n3} inode 73 74 expect 0 mknod ${n1}/${n3} b 0644 1 2 75 expect 0 chown ${n1}/${n3} 65534 65534 76 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 77 expect ENOENT lstat ${n0}/${n2} inode 78 expect ${inode} lstat ${n1}/${n3} inode 79 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 80 expect ${inode} lstat ${n0}/${n2} inode 81 expect ENOENT lstat ${n1}/${n3} inode 82 83 expect 0 mknod ${n1}/${n3} c 0644 1 2 84 expect 0 chown ${n1}/${n3} 65534 65534 85 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 86 expect ENOENT lstat ${n0}/${n2} inode 87 expect ${inode} lstat ${n1}/${n3} inode 88 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 89 expect ${inode} lstat ${n0}/${n2} inode 90 expect ENOENT lstat ${n1}/${n3} inode 91 92 expect 0 -u 65534 -g 65534 bind ${n1}/${n3} 93 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 94 expect ENOENT lstat ${n0}/${n2} inode 95 expect ${inode} lstat ${n1}/${n3} inode 96 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 97 expect ${inode} lstat ${n0}/${n2} inode 98 expect ENOENT lstat ${n1}/${n3} inode 99 100 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 101 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 102 expect ENOENT lstat ${n0}/${n2} inode 103 expect ${inode} lstat ${n1}/${n3} inode 104 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 105 expect ${inode} lstat ${n0}/${n2} inode 106 expect ENOENT lstat ${n1}/${n3} inode 107 108 expect 0 unlink ${n0}/${n2} 109 110 # User owns the sticky directory, but doesn't own the destination file. 111 for id in 0 65533; do 112 expect 0 chown ${n1} 65534 65534 113 create_file ${type} 114 inode=`${fstest} lstat ${n0}/${n2} inode` 115 116 expect 0 -u ${id} -g ${id} create ${n1}/${n3} 0644
| 33 for type in regular fifo block char socket symlink; do 34 create_file ${type} ${n1}/${n3} 65534 65534
|
117 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 118 expect ENOENT lstat ${n0}/${n2} inode 119 expect ${inode} lstat ${n1}/${n3} inode 120 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 121 expect ${inode} lstat ${n0}/${n2} inode 122 expect ENOENT lstat ${n1}/${n3} inode
| 35 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 36 expect ENOENT lstat ${n0}/${n2} inode 37 expect ${inode} lstat ${n1}/${n3} inode 38 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 39 expect ${inode} lstat ${n0}/${n2} inode 40 expect ENOENT lstat ${n1}/${n3} inode
|
| 41 done
|
123
| 42
|
124 expect 0 -u ${id} -g ${id} mkfifo ${n1}/${n3} 0644 125 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 126 expect ENOENT lstat ${n0}/${n2} inode 127 expect ${inode} lstat ${n1}/${n3} inode 128 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 129 expect ${inode} lstat ${n0}/${n2} inode 130 expect ENOENT lstat ${n1}/${n3} inode
| 43 expect 0 unlink ${n0}/${n2}
|
131
| 44
|
132 expect 0 mknod ${n1}/${n3} b 0644 1 2 133 expect 0 chown ${n1}/${n3} ${id} ${id} 134 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 135 expect ENOENT lstat ${n0}/${n2} inode 136 expect ${inode} lstat ${n1}/${n3} inode 137 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 138 expect ${inode} lstat ${n0}/${n2} inode 139 expect ENOENT lstat ${n1}/${n3} inode
| 45 # User owns the sticky directory, but doesn't own the destination file. 46 for id in 0 65533; do 47 expect 0 chown ${n1} 65534 65534 48 create_file ${type} ${n0}/${n2} 65534 65534 49 inode=`${fstest} lstat ${n0}/${n2} inode`
|
140
| 50
|
141 expect 0 mknod ${n1}/${n3} c 0644 1 2 142 expect 0 chown ${n1}/${n3} ${id} ${id} 143 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 144 expect ENOENT lstat ${n0}/${n2} inode 145 expect ${inode} lstat ${n1}/${n3} inode 146 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 147 expect ${inode} lstat ${n0}/${n2} inode 148 expect ENOENT lstat ${n1}/${n3} inode
| 51 for type in regular fifo block char socket symlink; do 52 create_file ${type} ${n1}/${n3} ${id} ${id} 53 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 54 expect ENOENT lstat ${n0}/${n2} inode 55 expect ${inode} lstat ${n1}/${n3} inode 56 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 57 expect ${inode} lstat ${n0}/${n2} inode 58 expect ENOENT lstat ${n1}/${n3} inode 59 done
|
149
| 60
|
150 expect 0 -u ${id} -g ${id} bind ${n1}/${n3} 151 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 152 expect ENOENT lstat ${n0}/${n2} inode 153 expect ${inode} lstat ${n1}/${n3} inode 154 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 155 expect ${inode} lstat ${n0}/${n2} inode 156 expect ENOENT lstat ${n1}/${n3} inode 157 158 expect 0 -u ${id} -g ${id} symlink test ${n1}/${n3} 159 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 160 expect ENOENT lstat ${n0}/${n2} inode 161 expect ${inode} lstat ${n1}/${n3} inode 162 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 163 expect ${inode} lstat ${n0}/${n2} inode 164 expect ENOENT lstat ${n1}/${n3} inode 165
| |
166 expect 0 unlink ${n0}/${n2} 167 done 168 169 # User owns the destination file, but doesn't own the sticky directory. 170 for id in 0 65533; do 171 expect 0 chown ${n1} ${id} ${id}
| 61 expect 0 unlink ${n0}/${n2} 62 done 63 64 # User owns the destination file, but doesn't own the sticky directory. 65 for id in 0 65533; do 66 expect 0 chown ${n1} ${id} ${id}
|
172 create_file ${type}
| 67 create_file ${type} ${n0}/${n2} 65534 65534
|
173 inode=`${fstest} lstat ${n0}/${n2} inode` 174
| 68 inode=`${fstest} lstat ${n0}/${n2} inode` 69
|
175 expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 176 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 177 expect ENOENT lstat ${n0}/${n2} inode 178 expect ${inode} lstat ${n1}/${n3} inode 179 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 180 expect ${inode} lstat ${n0}/${n2} inode 181 expect ENOENT lstat ${n1}/${n3} inode
| 70 for type in regular fifo block char socket symlink; do 71 create_file ${type} ${n1}/${n3} 65534 65534 72 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 73 expect ENOENT lstat ${n0}/${n2} inode 74 expect ${inode} lstat ${n1}/${n3} inode 75 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 76 expect ${inode} lstat ${n0}/${n2} inode 77 expect ENOENT lstat ${n1}/${n3} inode 78 done
|
182
| 79
|
183 expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 184 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 185 expect ENOENT lstat ${n0}/${n2} inode 186 expect ${inode} lstat ${n1}/${n3} inode 187 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 188 expect ${inode} lstat ${n0}/${n2} inode 189 expect ENOENT lstat ${n1}/${n3} inode 190 191 expect 0 mknod ${n1}/${n3} b 0644 1 2 192 expect 0 chown ${n1}/${n3} 65534 65534 193 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 194 expect ENOENT lstat ${n0}/${n2} inode 195 expect ${inode} lstat ${n1}/${n3} inode 196 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 197 expect ${inode} lstat ${n0}/${n2} inode 198 expect ENOENT lstat ${n1}/${n3} inode 199 200 expect 0 mknod ${n1}/${n3} c 0644 1 2 201 expect 0 chown ${n1}/${n3} 65534 65534 202 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 203 expect ENOENT lstat ${n0}/${n2} inode 204 expect ${inode} lstat ${n1}/${n3} inode 205 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 206 expect ${inode} lstat ${n0}/${n2} inode 207 expect ENOENT lstat ${n1}/${n3} inode 208 209 expect 0 -u 65534 -g 65534 bind ${n1}/${n3} 210 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 211 expect ENOENT lstat ${n0}/${n2} inode 212 expect ${inode} lstat ${n1}/${n3} inode 213 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 214 expect ${inode} lstat ${n0}/${n2} inode 215 expect ENOENT lstat ${n1}/${n3} inode 216 217 expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} 218 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 219 expect ENOENT lstat ${n0}/${n2} inode 220 expect ${inode} lstat ${n1}/${n3} inode 221 expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} 222 expect ${inode} lstat ${n0}/${n2} inode 223 expect ENOENT lstat ${n1}/${n3} inode 224
| |
225 expect 0 unlink ${n0}/${n2} 226 done 227 228 # User doesn't own the sticky directory nor the destination file. 229 for id in 0 65533; do 230 expect 0 chown ${n1} ${id} ${id}
| 80 expect 0 unlink ${n0}/${n2} 81 done 82 83 # User doesn't own the sticky directory nor the destination file. 84 for id in 0 65533; do 85 expect 0 chown ${n1} ${id} ${id}
|
231 create_file ${type}
| 86 create_file ${type} ${n0}/${n2} 65534 65534
|
232 inode=`${fstest} lstat ${n0}/${n2} inode` 233
| 87 inode=`${fstest} lstat ${n0}/${n2} inode` 88
|
234 expect 0 -u ${id} -g ${id} create ${n1}/${n3} 0644 235 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 236 expect ${inode} lstat ${n0}/${n2} inode 237 expect ${id},${id} lstat ${n1}/${n3} uid,gid 238 expect 0 unlink ${n1}/${n3}
| 89 for type in regular fifo block char socket symlink; do 90 create_file ${type} ${n1}/${n3} ${id} ${id} 91 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 92 expect ${inode} lstat ${n0}/${n2} inode 93 expect ${id},${id} lstat ${n1}/${n3} uid,gid 94 expect 0 unlink ${n1}/${n3} 95 done
|
239
| 96
|
240 expect 0 -u ${id} -g ${id} mkfifo ${n1}/${n3} 0644 241 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 242 expect ${inode} lstat ${n0}/${n2} inode 243 expect ${id},${id} lstat ${n1}/${n3} uid,gid 244 expect 0 unlink ${n1}/${n3} 245 246 expect 0 mknod ${n1}/${n3} b 0644 1 2 247 expect 0 chown ${n1}/${n3} ${id} ${id} 248 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 249 expect ${inode} lstat ${n0}/${n2} inode 250 expect ${id},${id} lstat ${n1}/${n3} uid,gid 251 expect 0 unlink ${n1}/${n3} 252 253 expect 0 mknod ${n1}/${n3} c 0644 1 2 254 expect 0 chown ${n1}/${n3} ${id} ${id} 255 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 256 expect ${inode} lstat ${n0}/${n2} inode 257 expect ${id},${id} lstat ${n1}/${n3} uid,gid 258 expect 0 unlink ${n1}/${n3} 259 260 expect 0 -u ${id} -g ${id} bind ${n1}/${n3} 261 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 262 expect ${inode} lstat ${n0}/${n2} inode 263 expect ${id},${id} lstat ${n1}/${n3} uid,gid 264 expect 0 unlink ${n1}/${n3} 265 266 expect 0 -u ${id} -g ${id} symlink test ${n1}/${n3} 267 expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} 268 expect ${inode} lstat ${n0}/${n2} inode 269 expect ${id},${id} lstat ${n1}/${n3} uid,gid 270 expect 0 unlink ${n1}/${n3} 271
| |
272 expect 0 unlink ${n0}/${n2} 273 done 274done 275 276# User owns both: the sticky directory and the destination directory. 277expect 0 chown ${n1} 65534 65534 278expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755 279inode=`${fstest} lstat ${n0}/${n2} inode`
--- 52 unchanged lines hidden --- | 97 expect 0 unlink ${n0}/${n2} 98 done 99done 100 101# User owns both: the sticky directory and the destination directory. 102expect 0 chown ${n1} 65534 65534 103expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755 104inode=`${fstest} lstat ${n0}/${n2} inode`
--- 52 unchanged lines hidden --- |