diff options
Diffstat (limited to 'tools/regression/fstest/tests/rename/10.t')
-rw-r--r-- | tools/regression/fstest/tests/rename/10.t | 251 |
1 files changed, 38 insertions, 213 deletions
diff --git a/tools/regression/fstest/tests/rename/10.t b/tools/regression/fstest/tests/rename/10.t index 381e73b..3b48d1f 100644 --- a/tools/regression/fstest/tests/rename/10.t +++ b/tools/regression/fstest/tests/rename/10.t @@ -6,7 +6,7 @@ desc="rename returns EACCES or EPERM if the file pointed at by the 'to' argument dir=`dirname $0` . ${dir}/../misc.sh -echo "1..1903" +echo "1..2099" n0=`namegen` n1=`namegen` @@ -24,144 +24,39 @@ expect 0 chown ${n0} 65534 65534 expect 0 mkdir ${n1} 0755 expect 0 chmod ${n1} 01777 -create_file() { - case "${1}" in - regular) - expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644 - ;; - fifo) - expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644 - ;; - block) - expect 0 mknod ${n0}/${n2} b 0644 1 2 - expect 0 chown ${n0}/${n2} 65534 65534 - ;; - char) - expect 0 mknod ${n0}/${n2} c 0644 1 2 - expect 0 chown ${n0}/${n2} 65534 65534 - ;; - socket) - expect 0 -u 65534 -g 65534 bind ${n0}/${n2} - ;; - symlink) - expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2} - ;; - esac -} - for type in regular fifo block char socket symlink; do # User owns both: the sticky directory and the destination file. expect 0 chown ${n1} 65534 65534 - create_file ${type} + create_file ${type} ${n0}/${n2} 65534 65534 inode=`${fstest} lstat ${n0}/${n2} inode` - expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 mknod ${n1}/${n3} b 0644 1 2 - expect 0 chown ${n1}/${n3} 65534 65534 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 mknod ${n1}/${n3} c 0644 1 2 - expect 0 chown ${n1}/${n3} 65534 65534 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 -u 65534 -g 65534 bind ${n1}/${n3} - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 unlink ${n0}/${n2} - - # User owns the sticky directory, but doesn't own the destination file. - for id in 0 65533; do - expect 0 chown ${n1} 65534 65534 - create_file ${type} - inode=`${fstest} lstat ${n0}/${n2} inode` - - expect 0 -u ${id} -g ${id} create ${n1}/${n3} 0644 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 -u ${id} -g ${id} mkfifo ${n1}/${n3} 0644 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 mknod ${n1}/${n3} b 0644 1 2 - expect 0 chown ${n1}/${n3} ${id} ${id} + for type in regular fifo block char socket symlink; do + create_file ${type} ${n1}/${n3} 65534 65534 expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} expect ENOENT lstat ${n0}/${n2} inode expect ${inode} lstat ${n1}/${n3} inode expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} expect ${inode} lstat ${n0}/${n2} inode expect ENOENT lstat ${n1}/${n3} inode + done - expect 0 mknod ${n1}/${n3} c 0644 1 2 - expect 0 chown ${n1}/${n3} ${id} ${id} - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode + expect 0 unlink ${n0}/${n2} - expect 0 -u ${id} -g ${id} bind ${n1}/${n3} - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode + # User owns the sticky directory, but doesn't own the destination file. + for id in 0 65533; do + expect 0 chown ${n1} 65534 65534 + create_file ${type} ${n0}/${n2} 65534 65534 + inode=`${fstest} lstat ${n0}/${n2} inode` - expect 0 -u ${id} -g ${id} symlink test ${n1}/${n3} - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode + for type in regular fifo block char socket symlink; do + create_file ${type} ${n1}/${n3} ${id} ${id} + expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} + expect ENOENT lstat ${n0}/${n2} inode + expect ${inode} lstat ${n1}/${n3} inode + expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} + expect ${inode} lstat ${n0}/${n2} inode + expect ENOENT lstat ${n1}/${n3} inode + done expect 0 unlink ${n0}/${n2} done @@ -169,58 +64,18 @@ for type in regular fifo block char socket symlink; do # User owns the destination file, but doesn't own the sticky directory. for id in 0 65533; do expect 0 chown ${n1} ${id} ${id} - create_file ${type} + create_file ${type} ${n0}/${n2} 65534 65534 inode=`${fstest} lstat ${n0}/${n2} inode` - expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 -u 65534 -g 65534 mkfifo ${n1}/${n3} 0644 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 mknod ${n1}/${n3} b 0644 1 2 - expect 0 chown ${n1}/${n3} 65534 65534 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 mknod ${n1}/${n3} c 0644 1 2 - expect 0 chown ${n1}/${n3} 65534 65534 - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 -u 65534 -g 65534 bind ${n1}/${n3} - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode - - expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3} - expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ENOENT lstat ${n0}/${n2} inode - expect ${inode} lstat ${n1}/${n3} inode - expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} - expect ${inode} lstat ${n0}/${n2} inode - expect ENOENT lstat ${n1}/${n3} inode + for type in regular fifo block char socket symlink; do + create_file ${type} ${n1}/${n3} 65534 65534 + expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} + expect ENOENT lstat ${n0}/${n2} inode + expect ${inode} lstat ${n1}/${n3} inode + expect 0 -u 65534 -g 65534 rename ${n1}/${n3} ${n0}/${n2} + expect ${inode} lstat ${n0}/${n2} inode + expect ENOENT lstat ${n1}/${n3} inode + done expect 0 unlink ${n0}/${n2} done @@ -228,46 +83,16 @@ for type in regular fifo block char socket symlink; do # User doesn't own the sticky directory nor the destination file. for id in 0 65533; do expect 0 chown ${n1} ${id} ${id} - create_file ${type} + create_file ${type} ${n0}/${n2} 65534 65534 inode=`${fstest} lstat ${n0}/${n2} inode` - expect 0 -u ${id} -g ${id} create ${n1}/${n3} 0644 - expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ${inode} lstat ${n0}/${n2} inode - expect ${id},${id} lstat ${n1}/${n3} uid,gid - expect 0 unlink ${n1}/${n3} - - expect 0 -u ${id} -g ${id} mkfifo ${n1}/${n3} 0644 - expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ${inode} lstat ${n0}/${n2} inode - expect ${id},${id} lstat ${n1}/${n3} uid,gid - expect 0 unlink ${n1}/${n3} - - expect 0 mknod ${n1}/${n3} b 0644 1 2 - expect 0 chown ${n1}/${n3} ${id} ${id} - expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ${inode} lstat ${n0}/${n2} inode - expect ${id},${id} lstat ${n1}/${n3} uid,gid - expect 0 unlink ${n1}/${n3} - - expect 0 mknod ${n1}/${n3} c 0644 1 2 - expect 0 chown ${n1}/${n3} ${id} ${id} - expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ${inode} lstat ${n0}/${n2} inode - expect ${id},${id} lstat ${n1}/${n3} uid,gid - expect 0 unlink ${n1}/${n3} - - expect 0 -u ${id} -g ${id} bind ${n1}/${n3} - expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ${inode} lstat ${n0}/${n2} inode - expect ${id},${id} lstat ${n1}/${n3} uid,gid - expect 0 unlink ${n1}/${n3} - - expect 0 -u ${id} -g ${id} symlink test ${n1}/${n3} - expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} - expect ${inode} lstat ${n0}/${n2} inode - expect ${id},${id} lstat ${n1}/${n3} uid,gid - expect 0 unlink ${n1}/${n3} + for type in regular fifo block char socket symlink; do + create_file ${type} ${n1}/${n3} ${id} ${id} + expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3} + expect ${inode} lstat ${n0}/${n2} inode + expect ${id},${id} lstat ${n1}/${n3} uid,gid + expect 0 unlink ${n1}/${n3} + done expect 0 unlink ${n0}/${n2} done |