summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/regression/fstest/tests/chflags/00.t208
-rw-r--r--tools/regression/fstest/tests/chflags/10.t70
-rw-r--r--tools/regression/fstest/tests/chflags/11.t84
-rw-r--r--tools/regression/fstest/tests/chown/00.t193
-rw-r--r--tools/regression/fstest/tests/link/00.t180
-rw-r--r--tools/regression/fstest/tests/rename/09.t221
-rw-r--r--tools/regression/fstest/tests/rename/10.t251
-rw-r--r--tools/regression/fstest/tests/rename/21.t2
8 files changed, 583 insertions, 626 deletions
diff --git a/tools/regression/fstest/tests/chflags/00.t b/tools/regression/fstest/tests/chflags/00.t
index 5ca5c73..33d3195 100644
--- a/tools/regression/fstest/tests/chflags/00.t
+++ b/tools/regression/fstest/tests/chflags/00.t
@@ -14,14 +14,14 @@ FreeBSD:UFS)
userflags="UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_NOUNLINK,UF_OPAQUE"
systemflags="SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
- echo "1..247"
+ echo "1..780"
;;
FreeBSD:ZFS)
allflags="UF_NODUMP,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
userflags="UF_NODUMP"
systemflags="SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
- echo "1..167"
+ echo "1..520"
;;
*)
quick_exit
@@ -36,41 +36,39 @@ expect 0 mkdir ${n2} 0755
cdir=`pwd`
cd ${n2}
-expect 0 create ${n0} 0644
-expect none stat ${n0} flags
-expect 0 chflags ${n0} ${allflags}
-expect ${allflags} stat ${n0} flags
-expect 0 chflags ${n0} ${userflags}
-expect ${userflags} stat ${n0} flags
-expect 0 chflags ${n0} ${systemflags}
-expect ${systemflags} stat ${n0} flags
-expect 0 chflags ${n0} none
-expect none stat ${n0} flags
-expect 0 unlink ${n0}
-
-expect 0 mkdir ${n0} 0644
-expect none stat ${n0} flags
-expect 0 chflags ${n0} ${allflags}
-expect ${allflags} stat ${n0} flags
-expect 0 chflags ${n0} ${userflags}
-expect ${userflags} stat ${n0} flags
-expect 0 chflags ${n0} ${systemflags}
-expect ${systemflags} stat ${n0} flags
-expect 0 chflags ${n0} none
-expect none stat ${n0} flags
-expect 0 rmdir ${n0}
-
-expect 0 mkfifo ${n0} 0644
-expect none stat ${n0} flags
-expect 0 chflags ${n0} ${allflags}
-expect ${allflags} stat ${n0} flags
-expect 0 chflags ${n0} ${userflags}
-expect ${userflags} stat ${n0} flags
-expect 0 chflags ${n0} ${systemflags}
-expect ${systemflags} stat ${n0} flags
-expect 0 chflags ${n0} none
-expect none stat ${n0} flags
-expect 0 unlink ${n0}
+for type in regular dir fifo block char socket; do
+ create_file ${type} ${n0} 0 0
+ expect none stat ${n0} flags
+ expect 0 chflags ${n0} ${allflags}
+ expect ${allflags} stat ${n0} flags
+ expect 0 chflags ${n0} ${userflags}
+ expect ${userflags} stat ${n0} flags
+ expect 0 chflags ${n0} ${systemflags}
+ expect ${systemflags} stat ${n0} flags
+ expect 0 chflags ${n0} none
+ expect none stat ${n0} flags
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n0}
+ else
+ expect 0 unlink ${n0}
+ fi
+
+ create_file ${type} ${n0} 0 0
+ expect none stat ${n0} flags
+ expect 0 lchflags ${n0} ${allflags}
+ expect ${allflags} stat ${n0} flags
+ expect 0 lchflags ${n0} ${userflags}
+ expect ${userflags} stat ${n0} flags
+ expect 0 lchflags ${n0} ${systemflags}
+ expect ${systemflags} stat ${n0} flags
+ expect 0 lchflags ${n0} none
+ expect none stat ${n0} flags
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n0}
+ else
+ expect 0 unlink ${n0}
+ fi
+done
expect 0 create ${n0} 0644
expect 0 symlink ${n0} ${n1}
@@ -111,86 +109,70 @@ expect 0 unlink ${n1}
expect 0 unlink ${n0}
# successful chflags(2) updates ctime.
-expect 0 create ${n0} 0644
-for flag in `echo ${allflags},none | tr ',' ' '`; do
- ctime1=`${fstest} stat ${n0} ctime`
- sleep 1
- expect 0 chflags ${n0} ${flag}
- ctime2=`${fstest} stat ${n0} ctime`
- test_check $ctime1 -lt $ctime2
+for type in regular dir fifo block char socket symlink; do
+ if [ "${type}" != "symlink" ]; then
+ create_file ${type} ${n0} 0 0
+ for flag in `echo ${allflags},none | tr ',' ' '`; do
+ ctime1=`${fstest} stat ${n0} ctime`
+ sleep 1
+ expect 0 chflags ${n0} ${flag}
+ ctime2=`${fstest} stat ${n0} ctime`
+ test_check $ctime1 -lt $ctime2
+ done
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n0}
+ else
+ expect 0 unlink ${n0}
+ fi
+ fi
+
+ create_file ${type} ${n0} 0 0
+ for flag in `echo ${allflags},none | tr ',' ' '`; do
+ ctime1=`${fstest} lstat ${n0} ctime`
+ sleep 1
+ expect 0 lchflags ${n0} ${flag}
+ ctime2=`${fstest} lstat ${n0} ctime`
+ test_check $ctime1 -lt $ctime2
+ done
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n0}
+ else
+ expect 0 unlink ${n0}
+ fi
done
-expect 0 unlink ${n0}
-
-expect 0 mkdir ${n0} 0755
-for flag in `echo ${allflags},none | tr ',' ' '`; do
- ctime1=`${fstest} stat ${n0} ctime`
- sleep 1
- expect 0 chflags ${n0} ${flag}
- ctime2=`${fstest} stat ${n0} ctime`
- test_check $ctime1 -lt $ctime2
-done
-expect 0 rmdir ${n0}
-
-expect 0 mkfifo ${n0} 0644
-for flag in `echo ${allflags},none | tr ',' ' '`; do
- ctime1=`${fstest} stat ${n0} ctime`
- sleep 1
- expect 0 chflags ${n0} ${flag}
- ctime2=`${fstest} stat ${n0} ctime`
- test_check $ctime1 -lt $ctime2
-done
-expect 0 unlink ${n0}
-
-expect 0 symlink ${n1} ${n0}
-for flag in `echo ${allflags},none | tr ',' ' '`; do
- ctime1=`${fstest} lstat ${n0} ctime`
- sleep 1
- expect 0 lchflags ${n0} ${flag}
- ctime2=`${fstest} lstat ${n0} ctime`
- test_check $ctime1 -lt $ctime2
-done
-expect 0 unlink ${n0}
# unsuccessful chflags(2) does not update ctime.
-expect 0 create ${n0} 0644
-for flag in `echo ${allflags},none | tr ',' ' '`; do
- ctime1=`${fstest} stat ${n0} ctime`
- sleep 1
- expect EPERM -u 65534 chflags ${n0} ${flag}
- ctime2=`${fstest} stat ${n0} ctime`
- test_check $ctime1 -eq $ctime2
-done
-expect 0 unlink ${n0}
-
-expect 0 mkdir ${n0} 0755
-for flag in `echo ${allflags},none | tr ',' ' '`; do
- ctime1=`${fstest} stat ${n0} ctime`
- sleep 1
- expect EPERM -u 65534 chflags ${n0} ${flag}
- ctime2=`${fstest} stat ${n0} ctime`
- test_check $ctime1 -eq $ctime2
+for type in regular dir fifo block char socket symlink; do
+ if [ "${type}" != "symlink" ]; then
+ create_file ${type} ${n0} 0 0
+ for flag in `echo ${allflags},none | tr ',' ' '`; do
+ ctime1=`${fstest} stat ${n0} ctime`
+ sleep 1
+ expect EPERM -u 65534 chflags ${n0} ${flag}
+ ctime2=`${fstest} stat ${n0} ctime`
+ test_check $ctime1 -eq $ctime2
+ done
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n0}
+ else
+ expect 0 unlink ${n0}
+ fi
+ fi
+
+ create_file ${type} ${n0} 0 0
+ for flag in `echo ${allflags},none | tr ',' ' '`; do
+ ctime1=`${fstest} lstat ${n0} ctime`
+ sleep 1
+ expect EPERM -u 65534 lchflags ${n0} ${flag}
+ ctime2=`${fstest} lstat ${n0} ctime`
+ test_check $ctime1 -eq $ctime2
+ done
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n0}
+ else
+ expect 0 unlink ${n0}
+ fi
done
-expect 0 rmdir ${n0}
-
-expect 0 mkfifo ${n0} 0644
-for flag in `echo ${allflags},none | tr ',' ' '`; do
- ctime1=`${fstest} stat ${n0} ctime`
- sleep 1
- expect EPERM -u 65534 chflags ${n0} ${flag}
- ctime2=`${fstest} stat ${n0} ctime`
- test_check $ctime1 -eq $ctime2
-done
-expect 0 unlink ${n0}
-
-expect 0 symlink ${n1} ${n0}
-for flag in `echo ${allflags},none | tr ',' ' '`; do
- ctime1=`${fstest} lstat ${n0} ctime`
- sleep 1
- expect EPERM -u 65534 lchflags ${n0} ${flag}
- ctime2=`${fstest} lstat ${n0} ctime`
- test_check $ctime1 -eq $ctime2
-done
-expect 0 unlink ${n0}
cd ${cdir}
expect 0 rmdir ${n2}
diff --git a/tools/regression/fstest/tests/chflags/10.t b/tools/regression/fstest/tests/chflags/10.t
index 57b33f4..9be6bee 100644
--- a/tools/regression/fstest/tests/chflags/10.t
+++ b/tools/regression/fstest/tests/chflags/10.t
@@ -8,7 +8,7 @@ dir=`dirname $0`
require chflags
-echo "1..62"
+echo "1..210"
n0=`namegen`
n1=`namegen`
@@ -18,45 +18,37 @@ expect 0 mkdir ${n0} 0755
cdir=`pwd`
cd ${n0}
-expect 0 create ${n1} 0644
-expect 0 chown ${n1} 65534 65534
-for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
- expect EPERM -u 65533 -g 65533 chflags ${n1} ${flag}
- expect none stat ${n1} flags
- expect EPERM -u 65534 -g 65534 chflags ${n1} ${flag}
- expect none stat ${n1} flags
+for type in regular dir fifo block char socket symlink; do
+ if [ "${type}" != "symlink" ]; then
+ create_file ${type} ${n1} 0 0
+ expect 0 chown ${n1} 65534 65534
+ for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
+ expect EPERM -u 65533 -g 65533 chflags ${n1} ${flag}
+ expect none stat ${n1} flags
+ expect EPERM -u 65534 -g 65534 chflags ${n1} ${flag}
+ expect none stat ${n1} flags
+ done
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n1}
+ else
+ expect 0 unlink ${n1}
+ fi
+ fi
+
+ create_file ${type} ${n1} 0 0
+ expect 0 lchown ${n1} 65534 65534
+ for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
+ expect EPERM -u 65533 -g 65533 lchflags ${n1} ${flag}
+ expect none lstat ${n1} flags
+ expect EPERM -u 65534 -g 65534 lchflags ${n1} ${flag}
+ expect none lstat ${n1} flags
+ done
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n1}
+ else
+ expect 0 unlink ${n1}
+ fi
done
-expect 0 unlink ${n1}
-
-expect 0 mkdir ${n1} 0755
-expect 0 chown ${n1} 65534 65534
-for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
- expect EPERM -u 65533 -g 65533 chflags ${n1} ${flag}
- expect none stat ${n1} flags
- expect EPERM -u 65534 -g 65534 chflags ${n1} ${flag}
- expect none stat ${n1} flags
-done
-expect 0 rmdir ${n1}
-
-expect 0 mkfifo ${n1} 0644
-expect 0 chown ${n1} 65534 65534
-for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
- expect EPERM -u 65533 -g 65533 chflags ${n1} ${flag}
- expect none stat ${n1} flags
- expect EPERM -u 65534 -g 65534 chflags ${n1} ${flag}
- expect none stat ${n1} flags
-done
-expect 0 unlink ${n1}
-
-expect 0 symlink ${n2} ${n1}
-expect 0 lchown ${n1} 65534 65534
-for flag in SF_IMMUTABLE SF_APPEND SF_NOUNLINK; do
- expect EPERM -u 65533 -g 65533 lchflags ${n1} ${flag}
- expect none lstat ${n1} flags
- expect EPERM -u 65534 -g 65534 lchflags ${n1} ${flag}
- expect none lstat ${n1} flags
-done
-expect 0 unlink ${n1}
cd ${cdir}
expect 0 rmdir ${n0}
diff --git a/tools/regression/fstest/tests/chflags/11.t b/tools/regression/fstest/tests/chflags/11.t
index a7b3dfb..7a1a5d7 100644
--- a/tools/regression/fstest/tests/chflags/11.t
+++ b/tools/regression/fstest/tests/chflags/11.t
@@ -8,7 +8,7 @@ dir=`dirname $0`
require chflags_SF_SNAPSHOT
-echo "1..46"
+echo "1..158"
n0=`namegen`
n1=`namegen`
@@ -18,53 +18,41 @@ expect 0 mkdir ${n0} 0755
cdir=`pwd`
cd ${n0}
-expect 0 create ${n1} 0644
-expect EPERM -u 65534 -g 65534 chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect EPERM chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect 0 chown ${n1} 65534 65534
-expect EPERM -u 65534 -g 65534 chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect EPERM chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect 0 unlink ${n1}
-
-expect 0 mkdir ${n1} 0644
-expect EPERM -u 65534 -g 65534 chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect EPERM chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect 0 chown ${n1} 65534 65534
-expect EPERM -u 65534 -g 65534 chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect EPERM chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect 0 rmdir ${n1}
-
-expect 0 mkfifo ${n1} 0644
-expect EPERM -u 65534 -g 65534 chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect EPERM chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect 0 chown ${n1} 65534 65534
-expect EPERM -u 65534 -g 65534 chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect EPERM chflags ${n1} SF_SNAPSHOT
-expect none stat ${n1} flags
-expect 0 unlink ${n1}
-
-expect 0 symlink ${n2} ${n1}
-expect EPERM -u 65534 -g 65534 lchflags ${n1} SF_SNAPSHOT
-expect none lstat ${n1} flags
-expect EPERM lchflags ${n1} SF_SNAPSHOT
-expect none lstat ${n1} flags
-expect 0 lchown ${n1} 65534 65534
-expect EPERM -u 65534 -g 65534 lchflags ${n1} SF_SNAPSHOT
-expect none lstat ${n1} flags
-expect EPERM lchflags ${n1} SF_SNAPSHOT
-expect none lstat ${n1} flags
-expect 0 unlink ${n1}
+for type in regular dir fifo block char socket symlink; do
+ if [ "${type}" != "symlink" ]; then
+ create_file ${type} ${n1} 0 0
+ expect EPERM -u 65534 -g 65534 chflags ${n1} SF_SNAPSHOT
+ expect none stat ${n1} flags
+ expect EPERM chflags ${n1} SF_SNAPSHOT
+ expect none stat ${n1} flags
+ expect 0 chown ${n1} 65534 65534
+ expect EPERM -u 65534 -g 65534 chflags ${n1} SF_SNAPSHOT
+ expect none stat ${n1} flags
+ expect EPERM chflags ${n1} SF_SNAPSHOT
+ expect none stat ${n1} flags
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n1}
+ else
+ expect 0 unlink ${n1}
+ fi
+ fi
+
+ create_file ${type} ${n1} 0 0
+ expect EPERM -u 65534 -g 65534 lchflags ${n1} SF_SNAPSHOT
+ expect none lstat ${n1} flags
+ expect EPERM lchflags ${n1} SF_SNAPSHOT
+ expect none lstat ${n1} flags
+ expect 0 lchown ${n1} 65534 65534
+ expect EPERM -u 65534 -g 65534 lchflags ${n1} SF_SNAPSHOT
+ expect none lstat ${n1} flags
+ expect EPERM lchflags ${n1} SF_SNAPSHOT
+ expect none lstat ${n1} flags
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n1}
+ else
+ expect 0 unlink ${n1}
+ fi
+done
cd ${cdir}
expect 0 rmdir ${n0}
diff --git a/tools/regression/fstest/tests/chown/00.t b/tools/regression/fstest/tests/chown/00.t
index eb13010..9db3709 100644
--- a/tools/regression/fstest/tests/chown/00.t
+++ b/tools/regression/fstest/tests/chown/00.t
@@ -7,9 +7,9 @@ dir=`dirname $0`
. ${dir}/../misc.sh
if supported lchmod; then
- echo "1..186"
+ echo "1..264"
else
- echo "1..171"
+ echo "1..249"
fi
n0=`namegen`
@@ -21,28 +21,49 @@ cdir=`pwd`
cd ${n2}
# super-user can always modify ownership
-# 2
+
expect 0 create ${n0} 0644
expect 0 chown ${n0} 123 456
expect 123,456 lstat ${n0} uid,gid
expect 0 chown ${n0} 0 0
expect 0,0 lstat ${n0} uid,gid
expect 0 unlink ${n0}
-# 8
+
expect 0 mkfifo ${n0} 0644
expect 0 chown ${n0} 123 456
expect 123,456 lstat ${n0} uid,gid
expect 0 chown ${n0} 0 0
expect 0,0 lstat ${n0} uid,gid
expect 0 unlink ${n0}
-# 14
+
+expect 0 mknod ${n0} b 0644 1 2
+expect 0 chown ${n0} 123 456
+expect 123,456 lstat ${n0} uid,gid
+expect 0 chown ${n0} 0 0
+expect 0,0 lstat ${n0} uid,gid
+expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} c 0644 1 2
+expect 0 chown ${n0} 123 456
+expect 123,456 lstat ${n0} uid,gid
+expect 0 chown ${n0} 0 0
+expect 0,0 lstat ${n0} uid,gid
+expect 0 unlink ${n0}
+
+expect 0 bind ${n0}
+expect 0 chown ${n0} 123 456
+expect 123,456 lstat ${n0} uid,gid
+expect 0 chown ${n0} 0 0
+expect 0,0 lstat ${n0} uid,gid
+expect 0 unlink ${n0}
+
expect 0 mkdir ${n0} 0755
expect 0 chown ${n0} 123 456
expect 123,456 lstat ${n0} uid,gid
expect 0 chown ${n0} 0 0
expect 0,0 lstat ${n0} uid,gid
expect 0 rmdir ${n0}
-# 20
+
expect 0 create ${n0} 0644
expect 0 symlink ${n0} ${n1}
expect 0 chown ${n1} 123 456
@@ -57,7 +78,7 @@ expect 0 unlink ${n1}
# non-super-user can modify file group if he is owner of a file and
# gid he is setting is in his groups list.
-# 31
+
expect 0 create ${n0} 0644
expect 0 chown ${n0} 65534 65533
expect 65534,65533 lstat ${n0} uid,gid
@@ -69,14 +90,14 @@ expect 0 unlink ${n0}
# chown(2) return 0 if user is not owner of a file, but chown(2) is called
# with both uid and gid equal to -1.
-# 39
+
expect 0 create ${n0} 0644
expect 0 chown ${n0} 65534 65533
expect 0 -u 65532 -g 65531 -- chown ${n0} -1 -1
expect 0 unlink ${n0}
# when super-user calls chown(2), set-uid and set-gid bits may be removed.
-# 43
+
expect 0 create ${n0} 0644
expect 0 chown ${n0} 65534 65533
expect 0 chmod ${n0} 06555
@@ -84,7 +105,7 @@ expect 06555 lstat ${n0} mode
expect 0 chown ${n0} 65532 65531
expect "06555|0555" lstat ${n0} mode
expect 0 unlink ${n0}
-# 50
+
expect 0 create ${n0} 0644
expect 0 chown ${n0} 0 0
expect 0 chmod ${n0} 06555
@@ -92,7 +113,7 @@ expect 06555 lstat ${n0} mode
expect 0 chown ${n0} 65534 65533
expect "06555|0555" lstat ${n0} mode
expect 0 unlink ${n0}
-# 57
+
expect 0 create ${n0} 0644
expect 0 chown ${n0} 65534 65533
expect 0 chmod ${n0} 06555
@@ -103,7 +124,7 @@ expect 0 unlink ${n0}
# when non-super-user calls chown(2) successfully, set-uid and set-gid bits may
# be removed, except when both uid and gid are equal to -1.
-# 64
+
expect 0 create ${n0} 0644
expect 0 chown ${n0} 65534 65533
expect 0 chmod ${n0} 06555
@@ -119,7 +140,7 @@ expect 06555 lstat ${n0} mode
expect 0 -u 65534 -g 65533,65532 -- chown ${n0} -1 -1
expect "06555,65534,65533|0555,65534,65533" lstat ${n0} mode,uid,gid
expect 0 unlink ${n0}
-# 79
+
expect 0 mkdir ${n0} 0755
expect 0 chown ${n0} 65534 65533
expect 0 chmod ${n0} 06555
@@ -135,7 +156,7 @@ expect 06555 lstat ${n0} mode
expect 0 -u 65534 -g 65533,65532 -- chown ${n0} -1 -1
expect 06555,65534,65533 lstat ${n0} mode,uid,gid
expect 0 rmdir ${n0}
-# 94
+
if supported lchmod; then
expect 0 symlink ${n1} ${n0}
expect 0 lchown ${n0} 65534 65533
@@ -155,7 +176,7 @@ if supported lchmod; then
fi
# successfull chown(2) call (except uid and gid equal to -1) updates ctime.
-# 109
+
expect 0 create ${n0} 0644
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -164,7 +185,7 @@ expect 65534,65533 lstat ${n0} uid,gid
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -lt $ctime2
expect 0 unlink ${n0}
-# 114
+
expect 0 mkdir ${n0} 0755
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -173,7 +194,7 @@ expect 65534,65533 lstat ${n0} uid,gid
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -lt $ctime2
expect 0 rmdir ${n0}
-# 119
+
expect 0 mkfifo ${n0} 0644
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -182,7 +203,34 @@ expect 65534,65533 lstat ${n0} uid,gid
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -lt $ctime2
expect 0 unlink ${n0}
-# 124
+
+expect 0 mknod ${n0} b 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 chown ${n0} 65534 65533
+expect 65534,65533 lstat ${n0} uid,gid
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} c 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 chown ${n0} 65534 65533
+expect 65534,65533 lstat ${n0} uid,gid
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
+expect 0 bind ${n0}
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 chown ${n0} 65534 65533
+expect 65534,65533 lstat ${n0} uid,gid
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
expect 0 symlink ${n1} ${n0}
ctime1=`${fstest} lstat ${n0} ctime`
sleep 1
@@ -191,7 +239,7 @@ expect 65534,65533 lstat ${n0} uid,gid
ctime2=`${fstest} lstat ${n0} ctime`
test_check $ctime1 -lt $ctime2
expect 0 unlink ${n0}
-# 129
+
expect 0 create ${n0} 0644
expect 0 chown ${n0} 65534 65533
ctime1=`${fstest} stat ${n0} ctime`
@@ -201,7 +249,7 @@ expect 65534,65532 lstat ${n0} uid,gid
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -lt $ctime2
expect 0 unlink ${n0}
-# 135
+
expect 0 mkdir ${n0} 0755
expect 0 chown ${n0} 65534 65533
ctime1=`${fstest} stat ${n0} ctime`
@@ -211,7 +259,7 @@ expect 65534,65532 lstat ${n0} uid,gid
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -lt $ctime2
expect 0 rmdir ${n0}
-# 141
+
expect 0 mkfifo ${n0} 0644
expect 0 chown ${n0} 65534 65533
ctime1=`${fstest} stat ${n0} ctime`
@@ -222,7 +270,40 @@ expect 65534,65532 lstat ${n0} uid,gid
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -lt $ctime2
expect 0 unlink ${n0}
-# 148
+
+expect 0 mknod ${n0} b 0644 1 2
+expect 0 chown ${n0} 65534 65533
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 chown ${n0} 65534 65533
+expect 0 -u 65534 -g 65532 chown ${n0} 65534 65532
+expect 65534,65532 lstat ${n0} uid,gid
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} c 0644 1 2
+expect 0 chown ${n0} 65534 65533
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 chown ${n0} 65534 65533
+expect 0 -u 65534 -g 65532 chown ${n0} 65534 65532
+expect 65534,65532 lstat ${n0} uid,gid
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
+expect 0 bind ${n0}
+expect 0 chown ${n0} 65534 65533
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 chown ${n0} 65534 65533
+expect 0 -u 65534 -g 65532 chown ${n0} 65534 65532
+expect 65534,65532 lstat ${n0} uid,gid
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
expect 0 symlink ${n1} ${n0}
expect 0 lchown ${n0} 65534 65533
ctime1=`${fstest} lstat ${n0} ctime`
@@ -232,7 +313,7 @@ expect 65534,65532 lstat ${n0} uid,gid
ctime2=`${fstest} lstat ${n0} ctime`
test_check $ctime1 -lt $ctime2
expect 0 unlink ${n0}
-# 154
+
expect 0 create ${n0} 0644
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -241,7 +322,7 @@ ctime2=`${fstest} stat ${n0} ctime`
todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
test_check $ctime1 -eq $ctime2
expect 0 unlink ${n0}
-# 158
+
expect 0 mkdir ${n0} 0644
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -250,7 +331,7 @@ ctime2=`${fstest} stat ${n0} ctime`
todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
test_check $ctime1 -eq $ctime2
expect 0 rmdir ${n0}
-# 162
+
expect 0 mkfifo ${n0} 0644
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -259,7 +340,34 @@ ctime2=`${fstest} stat ${n0} ctime`
todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
test_check $ctime1 -eq $ctime2
expect 0 unlink ${n0}
-# 166
+
+expect 0 mknod ${n0} b 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 -- chown ${n0} -1 -1
+ctime2=`${fstest} stat ${n0} ctime`
+todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
+test_check $ctime1 -eq $ctime2
+expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} c 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 -- chown ${n0} -1 -1
+ctime2=`${fstest} stat ${n0} ctime`
+todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
+test_check $ctime1 -eq $ctime2
+expect 0 unlink ${n0}
+
+expect 0 bind ${n0}
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 -- chown ${n0} -1 -1
+ctime2=`${fstest} stat ${n0} ctime`
+todo Linux "According to POSIX: If both owner and group are -1, the times need not be updated."
+test_check $ctime1 -eq $ctime2
+expect 0 unlink ${n0}
+
expect 0 symlink ${n1} ${n0}
ctime1=`${fstest} lstat ${n0} ctime`
sleep 1
@@ -270,7 +378,7 @@ test_check $ctime1 -eq $ctime2
expect 0 unlink ${n0}
# unsuccessful chown(2) does not update ctime.
-# 170
+
expect 0 create ${n0} 0644
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -278,7 +386,7 @@ expect EPERM -u 65534 -- chown ${n0} 65534 -1
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -eq $ctime2
expect 0 unlink ${n0}
-# 174
+
expect 0 mkdir ${n0} 0755
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -286,7 +394,7 @@ expect EPERM -u 65534 -g 65534 -- chown ${n0} -1 65534
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -eq $ctime2
expect 0 rmdir ${n0}
-# 178
+
expect 0 mkfifo ${n0} 0644
ctime1=`${fstest} stat ${n0} ctime`
sleep 1
@@ -294,7 +402,31 @@ expect EPERM -u 65534 -g 65534 chown ${n0} 65534 65534
ctime2=`${fstest} stat ${n0} ctime`
test_check $ctime1 -eq $ctime2
expect 0 unlink ${n0}
-# 182
+
+expect 0 mknod ${n0} b 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect EPERM -u 65534 -g 65534 chown ${n0} 65534 65534
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -eq $ctime2
+expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} c 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect EPERM -u 65534 -g 65534 chown ${n0} 65534 65534
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -eq $ctime2
+expect 0 unlink ${n0}
+
+expect 0 bind ${n0}
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect EPERM -u 65534 -g 65534 chown ${n0} 65534 65534
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -eq $ctime2
+expect 0 unlink ${n0}
+
expect 0 symlink ${n1} ${n0}
ctime1=`${fstest} lstat ${n0} ctime`
sleep 1
@@ -303,6 +435,5 @@ ctime2=`${fstest} lstat ${n0} ctime`
test_check $ctime1 -eq $ctime2
expect 0 unlink ${n0}
-# 186
cd ${cdir}
expect 0 rmdir ${n2}
diff --git a/tools/regression/fstest/tests/link/00.t b/tools/regression/fstest/tests/link/00.t
index 3c124aa..5ff36d0 100644
--- a/tools/regression/fstest/tests/link/00.t
+++ b/tools/regression/fstest/tests/link/00.t
@@ -6,7 +6,7 @@ desc="link creates hardlinks"
dir=`dirname $0`
. ${dir}/../misc.sh
-echo "1..82"
+echo "1..217"
n0=`namegen`
n1=`namegen`
@@ -17,135 +17,77 @@ expect 0 mkdir ${n3} 0755
cdir=`pwd`
cd ${n3}
-expect 0 create ${n0} 0644
-expect regular,0644,1 lstat ${n0} type,mode,nlink
+for type in regular fifo block char socket; do
+ create_file ${type} ${n0} 0 0
+ expect ${type},1 lstat ${n0} type,nlink
-expect 0 link ${n0} ${n1}
-expect regular,0644,2 lstat ${n0} type,mode,nlink
-expect regular,0644,2 lstat ${n1} type,mode,nlink
+ expect 0 link ${n0} ${n1}
+ expect ${type},2 lstat ${n0} type,nlink
+ expect ${type},2 lstat ${n1} type,nlink
-expect 0 link ${n1} ${n2}
-expect regular,0644,3 lstat ${n0} type,mode,nlink
-expect regular,0644,3 lstat ${n1} type,mode,nlink
-expect regular,0644,3 lstat ${n2} type,mode,nlink
+ expect 0 link ${n1} ${n2}
+ expect ${type},3 lstat ${n0} type,nlink
+ expect ${type},3 lstat ${n1} type,nlink
+ expect ${type},3 lstat ${n2} type,nlink
-expect 0 chmod ${n1} 0201
-expect 0 chown ${n1} 65534 65533
+ expect 0 chmod ${n1} 0201
+ expect 0 chown ${n1} 65534 65533
-expect regular,0201,3,65534,65533 lstat ${n0} type,mode,nlink,uid,gid
-expect regular,0201,3,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
-expect regular,0201,3,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
+ expect ${type},0201,3,65534,65533 lstat ${n0} type,mode,nlink,uid,gid
+ expect ${type},0201,3,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
+ expect ${type},0201,3,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
-expect 0 unlink ${n0}
-expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
-expect regular,0201,2,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
-expect regular,0201,2,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
+ expect 0 unlink ${n0}
+ expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
+ expect ${type},0201,2,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
+ expect ${type},0201,2,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
-expect 0 unlink ${n2}
-expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
-expect regular,0201,1,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
-expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
+ expect 0 unlink ${n2}
+ expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
+ expect ${type},0201,1,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
+ expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
-expect 0 unlink ${n1}
-expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
-expect ENOENT lstat ${n1} type,mode,nlink,uid,gid
-expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
-
-expect 0 mkfifo ${n0} 0644
-expect fifo,0644,1 lstat ${n0} type,mode,nlink
-
-expect 0 link ${n0} ${n1}
-expect fifo,0644,2 lstat ${n0} type,mode,nlink
-expect fifo,0644,2 lstat ${n1} type,mode,nlink
-
-expect 0 link ${n1} ${n2}
-expect fifo,0644,3 lstat ${n0} type,mode,nlink
-expect fifo,0644,3 lstat ${n1} type,mode,nlink
-expect fifo,0644,3 lstat ${n2} type,mode,nlink
-
-expect 0 chmod ${n1} 0201
-expect 0 chown ${n1} 65534 65533
-
-expect fifo,0201,3,65534,65533 lstat ${n0} type,mode,nlink,uid,gid
-expect fifo,0201,3,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
-expect fifo,0201,3,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
-
-expect 0 unlink ${n0}
-expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
-expect fifo,0201,2,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
-expect fifo,0201,2,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
-
-expect 0 unlink ${n2}
-expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
-expect fifo,0201,1,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
-expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
-
-expect 0 unlink ${n1}
-expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
-expect ENOENT lstat ${n1} type,mode,nlink,uid,gid
-expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
+ expect 0 unlink ${n1}
+ expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
+ expect ENOENT lstat ${n1} type,mode,nlink,uid,gid
+ expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
+done
# successful link(2) updates ctime.
-expect 0 create ${n0} 0644
-ctime1=`${fstest} stat ${n0} ctime`
-dctime1=`${fstest} stat . ctime`
-dmtime1=`${fstest} stat . mtime`
-sleep 1
-expect 0 link ${n0} ${n1}
-ctime2=`${fstest} stat ${n0} ctime`
-test_check $ctime1 -lt $ctime2
-dctime2=`${fstest} stat . ctime`
-test_check $dctime1 -lt $dctime2
-dmtime2=`${fstest} stat . mtime`
-test_check $dctime1 -lt $dmtime2
-expect 0 unlink ${n0}
-expect 0 unlink ${n1}
-
-expect 0 mkfifo ${n0} 0644
-ctime1=`${fstest} stat ${n0} ctime`
-dctime1=`${fstest} stat . ctime`
-dmtime1=`${fstest} stat . mtime`
-sleep 1
-expect 0 link ${n0} ${n1}
-ctime2=`${fstest} stat ${n0} ctime`
-test_check $ctime1 -lt $ctime2
-dctime2=`${fstest} stat . ctime`
-test_check $dctime1 -lt $dctime2
-dmtime2=`${fstest} stat . mtime`
-test_check $dctime1 -lt $dmtime2
-expect 0 unlink ${n0}
-expect 0 unlink ${n1}
+for type in regular fifo block char socket; do
+ create_file ${type} ${n0} 0 0
+ ctime1=`${fstest} stat ${n0} ctime`
+ dctime1=`${fstest} stat . ctime`
+ dmtime1=`${fstest} stat . mtime`
+ sleep 1
+ expect 0 link ${n0} ${n1}
+ ctime2=`${fstest} stat ${n0} ctime`
+ test_check $ctime1 -lt $ctime2
+ dctime2=`${fstest} stat . ctime`
+ test_check $dctime1 -lt $dctime2
+ dmtime2=`${fstest} stat . mtime`
+ test_check $dctime1 -lt $dmtime2
+ expect 0 unlink ${n0}
+ expect 0 unlink ${n1}
+done
# unsuccessful link(2) does not update ctime.
-expect 0 create ${n0} 0644
-expect 0 -- chown ${n0} 65534 -1
-ctime1=`${fstest} stat ${n0} ctime`
-dctime1=`${fstest} stat . ctime`
-dmtime1=`${fstest} stat . mtime`
-sleep 1
-expect EACCES -u 65534 link ${n0} ${n1}
-ctime2=`${fstest} stat ${n0} ctime`
-test_check $ctime1 -eq $ctime2
-dctime2=`${fstest} stat . ctime`
-test_check $dctime1 -eq $dctime2
-dmtime2=`${fstest} stat . mtime`
-test_check $dctime1 -eq $dmtime2
-expect 0 unlink ${n0}
-
-expect 0 mkfifo ${n0} 0644
-expect 0 -- chown ${n0} 65534 -1
-ctime1=`${fstest} stat ${n0} ctime`
-dctime1=`${fstest} stat . ctime`
-dmtime1=`${fstest} stat . mtime`
-sleep 1
-expect EACCES -u 65534 link ${n0} ${n1}
-ctime2=`${fstest} stat ${n0} ctime`
-test_check $ctime1 -eq $ctime2
-dctime2=`${fstest} stat . ctime`
-test_check $dctime1 -eq $dctime2
-dmtime2=`${fstest} stat . mtime`
-test_check $dctime1 -eq $dmtime2
-expect 0 unlink ${n0}
+for type in regular fifo block char socket; do
+ create_file ${type} ${n0} 0 0
+ expect 0 -- chown ${n0} 65534 -1
+ ctime1=`${fstest} stat ${n0} ctime`
+ dctime1=`${fstest} stat . ctime`
+ dmtime1=`${fstest} stat . mtime`
+ sleep 1
+ expect EACCES -u 65534 link ${n0} ${n1}
+ ctime2=`${fstest} stat ${n0} ctime`
+ test_check $ctime1 -eq $ctime2
+ dctime2=`${fstest} stat . ctime`
+ test_check $dctime1 -eq $dctime2
+ dmtime2=`${fstest} stat . mtime`
+ test_check $dctime1 -eq $dmtime2
+ expect 0 unlink ${n0}
+done
cd ${cdir}
expect 0 rmdir ${n3}
diff --git a/tools/regression/fstest/tests/rename/09.t b/tools/regression/fstest/tests/rename/09.t
index 41270f1..91d16a6 100644
--- a/tools/regression/fstest/tests/rename/09.t
+++ b/tools/regression/fstest/tests/rename/09.t
@@ -6,7 +6,7 @@ desc="rename returns EACCES or EPERM if the directory containing 'from' is marke
dir=`dirname $0`
. ${dir}/../misc.sh
-echo "1..56"
+echo "1..2353"
n0=`namegen`
n1=`namegen`
@@ -19,73 +19,170 @@ cdir=`pwd`
cd ${n4}
expect 0 mkdir ${n0} 0755
-expect 0 chown ${n0} 65534 65534
expect 0 chmod ${n0} 01777
+expect 0 chown ${n0} 65534 65534
expect 0 mkdir ${n1} 0755
-
-# User owns both: the sticky directory and the file to be renamed.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User owns the file to be renamed, but doesn't own the sticky directory.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65533 -g 65533 create ${n0}/${n2} 0644
-expect 0 -u 65533 -g 65533 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User owns the sticky directory, but doesn't own the file to be renamed.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65533 -g 65533 create ${n0}/${n2} 0644
-expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User doesn't own the sticky directory nor the file to be renamed.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-expect "EACCES|EPERM" -u 65533 -g 65533 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n0}/${n2}
-
-# User owns both: the sticky directory and the fifo to be renamed.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
-expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User owns the fifo to be renamed, but doesn't own the sticky directory.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65533 -g 65533 mkfifo ${n0}/${n2} 0644
-expect 0 -u 65533 -g 65533 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User owns the sticky directory, but doesn't own the fifo to be renamed.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65533 -g 65533 mkfifo ${n0}/${n2} 0644
-expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User doesn't own the sticky directory nor the fifo to be renamed.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
-expect "EACCES|EPERM" -u 65533 -g 65533 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n0}/${n2}
-
-# User owns both: the sticky directory and the symlink to be renamed.
expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
+
+for type in regular fifo block char socket symlink; do
+ # User owns both: the source sticky directory and the source file.
+ expect 0 chown ${n0} 65534 65534
+ create_file ${type} ${n0}/${n2} 65534 65534
+ inode=`${fstest} lstat ${n0}/${n2} inode`
+
+ for type in none 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},65534,65534 lstat ${n1}/${n3} inode,uid,gid
+ 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}
+
+ # User owns the source sticky directory, but doesn't own the source file.
+ for id in 0 65533; do
+ expect 0 chown ${n0} 65534 65534
+ create_file ${type} ${n0}/${n2} ${id} ${id}
+ inode=`${fstest} lstat ${n0}/${n2} inode`
+
+ for type in none 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},${id},${id} lstat ${n1}/${n3} inode,uid,gid
+ 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
+
+ # User owns the source file, but doesn't own the source sticky directory.
+ for id in 0 65533; do
+ expect 0 chown ${n0} ${id} ${id}
+ create_file ${type} ${n0}/${n2} 65534 65534
+ inode=`${fstest} lstat ${n0}/${n2} inode`
+
+ for type in none 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},65534,65534 lstat ${n1}/${n3} inode,uid,gid
+ 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
+
+ # User doesn't own the source sticky directory nor the source file.
+ for id in 0 65533; do
+ expect 0 chown ${n0} ${id} ${id}
+ create_file ${type} ${n0}/${n2} ${id} ${id}
+ inode=`${fstest} lstat ${n0}/${n2} inode`
+
+ for type in none regular fifo block char socket symlink; do
+ create_file ${type} ${n1}/${n3} 65534 65534
+ expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
+ expect ${inode},${id},${id} lstat ${n0}/${n2} inode,uid,gid
+ if [ "${type}" != "none" ]; then
+ expect 65534,65534 lstat ${n1}/${n3} uid,gid
+ expect 0 unlink ${n1}/${n3}
+ fi
+ done
+
+ expect 0 unlink ${n0}/${n2}
+ done
+done
+
+# User owns both: the source sticky directory and the source directory.
+expect 0 chown ${n0} 65534 65534
+create_file dir ${n0}/${n2} 65534 65534
+inode=`${fstest} lstat ${n0}/${n2} inode`
+
expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User owns the symlink to be renamed, but doesn't own the sticky directory.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65533 -g 65533 symlink test ${n0}/${n2}
-expect 0 -u 65533 -g 65533 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User owns the sticky directory, but doesn't own the symlink to be renamed.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65533 -g 65533 symlink test ${n0}/${n2}
+expect ENOENT lstat ${n0}/${n2} type
+expect ${inode},65534,65534 lstat ${n1}/${n3} inode,uid,gid
+expect 0 rename ${n1}/${n3} ${n0}/${n2}
+
+expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755
expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n1}/${n3}
-# User doesn't own the sticky directory nor the symlink to be renamed.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
-expect "EACCES|EPERM" -u 65533 -g 65533 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 unlink ${n0}/${n2}
+expect ENOENT lstat ${n0}/${n2} type
+expect ${inode},65534,65534 lstat ${n1}/${n3} inode,uid,gid
+expect 0 rmdir ${n1}/${n3}
+
+# User owns the source sticky directory, but doesn't own the source directory.
+# This fails when changing parent directory, because this will modify
+# source directory inode (the .. link in it), but we can still rename it
+# without changing its parent directory.
+for id in 0 65533; do
+ expect 0 chown ${n0} 65534 65534
+ create_file dir ${n0}/${n2} ${id} ${id}
+ inode=`${fstest} lstat ${n0}/${n2} inode`
+
+ expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
+ expect ${inode},${id},${id} lstat ${n0}/${n2} inode,uid,gid
+ expect ENOENT lstat ${n1}/${n3} type
+
+ expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n0}/${n3}
+ expect ENOENT lstat ${n0}/${n2} type
+ expect ${inode},${id},${id} lstat ${n0}/${n3} inode,uid,gid
+ expect 0 rename ${n0}/${n3} ${n0}/${n2}
+
+ expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755
+ expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
+ expect ${inode},${id},${id} lstat ${n0}/${n2} inode,uid,gid
+ expect dir,${id},${id} lstat ${n0}/${n2} type,uid,gid
+ expect 0 rmdir ${n1}/${n3}
+
+ expect 0 -u 65534 -g 65534 mkdir ${n0}/${n3} 0755
+ expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n0}/${n3}
+ expect ENOENT lstat ${n0}/${n2} type
+ expect ${inode},${id},${id} lstat ${n0}/${n3} inode,uid,gid
+ expect 0 rmdir ${n0}/${n3}
+done
+
+# User owns the source directory, but doesn't own the source sticky directory.
+for id in 0 65533; do
+ expect 0 chown ${n0} ${id} ${id}
+ create_file dir ${n0}/${n2} 65534 65534
+ inode=`${fstest} lstat ${n0}/${n2} inode`
+
+ expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
+ expect ENOENT lstat ${n0}/${n2} type
+ expect ${inode},65534,65534 lstat ${n1}/${n3} inode,uid,gid
+ expect 0 rename ${n1}/${n3} ${n0}/${n2}
+
+ expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755
+ expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
+ expect ENOENT lstat ${n0}/${n2} type
+ expect ${inode},65534,65534 lstat ${n1}/${n3} inode,uid,gid
+ expect 0 rmdir ${n1}/${n3}
+done
+
+# User doesn't own the source sticky directory nor the source directory.
+for id in 0 65533; do
+ expect 0 chown ${n0} ${id} ${id}
+ create_file dir ${n0}/${n2} ${id} ${id}
+ inode=`${fstest} lstat ${n0}/${n2} inode`
+
+ expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
+ expect ${inode},${id},${id} lstat ${n0}/${n2} inode,uid,gid
+ expect ENOENT lstat ${n1}/${n3} type
+
+ expect 0 -u 65534 -g 65534 mkdir ${n1}/${n3} 0755
+ expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
+ expect ${inode},${id},${id} lstat ${n0}/${n2} inode,uid,gid
+ expect dir,65534,65534 lstat ${n1}/${n3} type,uid,gid
+ expect 0 rmdir ${n0}/${n2}
+ expect 0 rmdir ${n1}/${n3}
+done
expect 0 rmdir ${n1}
expect 0 rmdir ${n0}
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
diff --git a/tools/regression/fstest/tests/rename/21.t b/tools/regression/fstest/tests/rename/21.t
index 2630f62..12d98e3 100644
--- a/tools/regression/fstest/tests/rename/21.t
+++ b/tools/regression/fstest/tests/rename/21.t
@@ -37,7 +37,7 @@ expect ENOENT rmdir ${n3}/${n1}
# Check that write permission on containing directory (${n2}) is enough
# to move file (${n0}) from that directory.
-expect 0 create ${n2}/${n0} 0755
+expect 0 create ${n2}/${n0} 0644
expect 0 -u 65534 -g 65534 rename ${n2}/${n0} ${n3}/${n1}
expect 0 unlink ${n3}/${n1}
OpenPOWER on IntegriCloud