Author: pjd
Date: Tue Aug 10 22:57:43 2010
New Revision: 211156
URL: http://svn.freebsd.org/changeset/base/211156

Log:
  More tests, mostly related to devices and sockets.

Modified:
  head/tools/regression/fstest/tests/mkdir/10.t
  head/tools/regression/fstest/tests/open/22.t
  head/tools/regression/fstest/tests/rename/00.t
  head/tools/regression/fstest/tests/rename/06.t
  head/tools/regression/fstest/tests/rename/07.t
  head/tools/regression/fstest/tests/rename/10.t
  head/tools/regression/fstest/tests/rename/13.t
  head/tools/regression/fstest/tests/rename/14.t
  head/tools/regression/fstest/tests/rename/15.t
  head/tools/regression/fstest/tests/rename/20.t
  head/tools/regression/fstest/tests/unlink/00.t
  head/tools/regression/fstest/tests/unlink/11.t

Modified: head/tools/regression/fstest/tests/mkdir/10.t
==============================================================================
--- head/tools/regression/fstest/tests/mkdir/10.t       Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/mkdir/10.t       Tue Aug 10 22:57:43 
2010        (r211156)
@@ -6,7 +6,7 @@ desc="mkdir returns EEXIST if the named 
 dir=`dirname $0`
 . ${dir}/../misc.sh
 
-echo "1..12"
+echo "1..21"
 
 n0=`namegen`
 
@@ -25,3 +25,15 @@ expect 0 unlink ${n0}
 expect 0 mkfifo ${n0} 0644
 expect EEXIST mkdir ${n0} 0755
 expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} b 0644 1 2
+expect EEXIST mkdir ${n0} 0755
+expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} c 0644 1 2
+expect EEXIST mkdir ${n0} 0755
+expect 0 unlink ${n0}
+
+expect 0 bind ${n0}
+expect EEXIST mkdir ${n0} 0755
+expect 0 unlink ${n0}

Modified: head/tools/regression/fstest/tests/open/22.t
==============================================================================
--- head/tools/regression/fstest/tests/open/22.t        Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/open/22.t        Tue Aug 10 22:57:43 
2010        (r211156)
@@ -6,7 +6,7 @@ desc="open returns EEXIST when O_CREAT a
 dir=`dirname $0`
 . ${dir}/../misc.sh
 
-echo "1..12"
+echo "1..21"
 
 n0=`namegen`
 
@@ -25,3 +25,15 @@ expect 0 unlink ${n0}
 expect 0 symlink test ${n0}
 expect EEXIST open ${n0} O_CREAT,O_EXCL 0644
 expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} b 0644 1 2
+expect EEXIST open ${n0} O_CREAT,O_EXCL 0644
+expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} c 0644 1 2
+expect EEXIST open ${n0} O_CREAT,O_EXCL 0644
+expect 0 unlink ${n0}
+
+expect 0 bind ${n0}
+expect EEXIST open ${n0} O_CREAT,O_EXCL 0644
+expect 0 unlink ${n0}

Modified: head/tools/regression/fstest/tests/rename/00.t
==============================================================================
--- head/tools/regression/fstest/tests/rename/00.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/rename/00.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -6,7 +6,7 @@ desc="rename changes file name"
 dir=`dirname $0`
 . ${dir}/../misc.sh
 
-echo "1..79"
+echo "1..145"
 
 n0=`namegen`
 n1=`namegen`
@@ -57,6 +57,54 @@ expect fifo,${inode},0644,2 lstat ${n2} 
 expect 0 unlink ${n0}
 expect 0 unlink ${n2}
 
+expect 0 mknod ${n0} b 0644 1 2
+expect block,0644,1 lstat ${n0} type,mode,nlink
+inode=`${fstest} lstat ${n0} inode`
+expect 0 rename ${n0} ${n1}
+expect ENOENT lstat ${n0} type,mode,nlink
+expect block,${inode},0644,1 lstat ${n1} type,inode,mode,nlink
+expect 0 link ${n1} ${n0}
+expect block,${inode},0644,2 lstat ${n0} type,inode,mode,nlink
+expect block,${inode},0644,2 lstat ${n1} type,inode,mode,nlink
+expect 0 rename ${n1} ${n2}
+expect block,${inode},0644,2 lstat ${n0} type,inode,mode,nlink
+expect ENOENT lstat ${n1} type,mode,nlink
+expect block,${inode},0644,2 lstat ${n2} type,inode,mode,nlink
+expect 0 unlink ${n0}
+expect 0 unlink ${n2}
+
+expect 0 mknod ${n0} c 0644 1 2
+expect char,0644,1 lstat ${n0} type,mode,nlink
+inode=`${fstest} lstat ${n0} inode`
+expect 0 rename ${n0} ${n1}
+expect ENOENT lstat ${n0} type,mode,nlink
+expect char,${inode},0644,1 lstat ${n1} type,inode,mode,nlink
+expect 0 link ${n1} ${n0}
+expect char,${inode},0644,2 lstat ${n0} type,inode,mode,nlink
+expect char,${inode},0644,2 lstat ${n1} type,inode,mode,nlink
+expect 0 rename ${n1} ${n2}
+expect char,${inode},0644,2 lstat ${n0} type,inode,mode,nlink
+expect ENOENT lstat ${n1} type,mode,nlink
+expect char,${inode},0644,2 lstat ${n2} type,inode,mode,nlink
+expect 0 unlink ${n0}
+expect 0 unlink ${n2}
+
+expect 0 -U 0133 bind ${n0}
+expect socket,0644,1 lstat ${n0} type,mode,nlink
+inode=`${fstest} lstat ${n0} inode`
+expect 0 rename ${n0} ${n1}
+expect ENOENT lstat ${n0} type,mode,nlink
+expect socket,${inode},0644,1 lstat ${n1} type,inode,mode,nlink
+expect 0 link ${n1} ${n0}
+expect socket,${inode},0644,2 lstat ${n0} type,inode,mode,nlink
+expect socket,${inode},0644,2 lstat ${n1} type,inode,mode,nlink
+expect 0 rename ${n1} ${n2}
+expect socket,${inode},0644,2 lstat ${n0} type,inode,mode,nlink
+expect ENOENT lstat ${n1} type,mode,nlink
+expect socket,${inode},0644,2 lstat ${n2} type,inode,mode,nlink
+expect 0 unlink ${n0}
+expect 0 unlink ${n2}
+
 expect 0 create ${n0} 0644
 rinode=`${fstest} lstat ${n0} inode`
 expect regular,0644 lstat ${n0} type,mode
@@ -96,6 +144,30 @@ ctime2=`${fstest} stat ${n1} ctime`
 test_check $ctime1 -lt $ctime2
 expect 0 unlink ${n1}
 
+expect 0 mknod ${n0} b 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 rename ${n0} ${n1}
+ctime2=`${fstest} stat ${n1} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n1}
+
+expect 0 mknod ${n0} c 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 rename ${n0} ${n1}
+ctime2=`${fstest} stat ${n1} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n1}
+
+expect 0 bind ${n0}
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 rename ${n0} ${n1}
+ctime2=`${fstest} stat ${n1} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n1}
+
 expect 0 symlink ${n2} ${n0}
 ctime1=`${fstest} lstat ${n0} ctime`
 sleep 1
@@ -129,6 +201,30 @@ ctime2=`${fstest} stat ${n0} ctime`
 test_check $ctime1 -eq $ctime2
 expect 0 unlink ${n0}
 
+expect 0 mknod ${n0} b 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect EACCES -u 65534 rename ${n0} ${n1}
+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 EACCES -u 65534 rename ${n0} ${n1}
+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 EACCES -u 65534 rename ${n0} ${n1}
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -eq $ctime2
+expect 0 unlink ${n0}
+
 expect 0 symlink ${n2} ${n0}
 ctime1=`${fstest} lstat ${n0} ctime`
 sleep 1

Modified: head/tools/regression/fstest/tests/rename/06.t
==============================================================================
--- head/tools/regression/fstest/tests/rename/06.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/rename/06.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -11,11 +11,11 @@ require chflags
 case "${os}:${fs}" in
 FreeBSD:ZFS)
        flags="SF_IMMUTABLE SF_NOUNLINK SF_APPEND"
-       echo "1..90"
+       echo "1..105"
        ;;
 FreeBSD:UFS)
        flags="SF_IMMUTABLE SF_NOUNLINK SF_APPEND UF_IMMUTABLE UF_NOUNLINK 
UF_APPEND"
-       echo "1..162"
+       echo "1..189"
        ;;
 *)
        quick_exit
@@ -60,6 +60,18 @@ done
 expect 0 chflags ${n0} none
 expect 0 unlink ${n0}
 
+expect 0 mknod ${n0} b 0644 1 2
+for flag in ${flags}; do
+       expect 0 chflags ${n0} ${flag}
+       expect ${flag} stat ${n0} flags
+       [ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a device 
protected by SF_APPEND should return EPERM."
+       expect EPERM rename ${n0} ${n1}
+       [ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a device 
protected by SF_APPEND should return EPERM."
+       expect ENOENT rename ${n1} ${n0}
+done
+expect 0 chflags ${n0} none
+expect 0 unlink ${n0}
+
 expect 0 mknod ${n0} c 0644 1 2
 for flag in ${flags}; do
        expect 0 chflags ${n0} ${flag}

Modified: head/tools/regression/fstest/tests/rename/07.t
==============================================================================
--- head/tools/regression/fstest/tests/rename/07.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/rename/07.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -12,12 +12,12 @@ case "${os}:${fs}" in
 FreeBSD:ZFS)
        flags1="SF_IMMUTABLE SF_APPEND"
        flags2="SF_NOUNLINK"
-       echo "1..110"
+       echo "1..128"
        ;;
 FreeBSD:UFS)
        flags1="SF_IMMUTABLE SF_APPEND UF_IMMUTABLE UF_APPEND"
        flags2="SF_NOUNLINK UF_NOUNLINK"
-       echo "1..182"
+       echo "1..212"
        ;;
 *)
        quick_exit
@@ -65,6 +65,18 @@ done
 expect 0 chflags ${n0} none
 expect 0 unlink ${n0}/${n1}
 
+expect 0 mknod ${n0}/${n1} b 0644 1 2
+for flag in ${flags1}; do
+       expect 0 chflags ${n0} ${flag}
+       expect ${flag} stat ${n0} flags
+       [ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file 
protected by SF_APPEND should return EPERM."
+       expect EPERM rename ${n0}/${n1} ${n2}
+       [ "${flag}" = "SF_APPEND" ] && todo FreeBSD:ZFS "Renaming a file 
protected by SF_APPEND should return EPERM."
+       expect ENOENT rename ${n2} ${n0}/${n1}
+done
+expect 0 chflags ${n0} none
+expect 0 unlink ${n0}/${n1}
+
 expect 0 mknod ${n0}/${n1} c 0644 1 2
 for flag in ${flags1}; do
        expect 0 chflags ${n0} ${flag}
@@ -131,6 +143,16 @@ done
 expect 0 chflags ${n0} none
 expect 0 unlink ${n0}/${n1}
 
+expect 0 mknod ${n0}/${n1} b 0644 1 2
+for flag in ${flags2}; do
+       expect 0 chflags ${n0} ${flag}
+       expect ${flag} stat ${n0} flags
+       expect 0 rename ${n0}/${n1} ${n2}
+       expect 0 rename ${n2} ${n0}/${n1}
+done
+expect 0 chflags ${n0} none
+expect 0 unlink ${n0}/${n1}
+
 expect 0 mknod ${n0}/${n1} c 0644 1 2
 for flag in ${flags2}; do
        expect 0 chflags ${n0} ${flag}

Modified: head/tools/regression/fstest/tests/rename/10.t
==============================================================================
--- head/tools/regression/fstest/tests/rename/10.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/rename/10.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -6,7 +6,7 @@ desc="rename returns EACCES or EPERM if 
 dir=`dirname $0`
 . ${dir}/../misc.sh
 
-echo "1..188"
+echo "1..1903"
 
 n0=`namegen`
 n1=`namegen`
@@ -24,217 +24,305 @@ expect 0 chown ${n0} 65534 65534
 expect 0 mkdir ${n1} 0755
 expect 0 chmod ${n1} 01777
 
-# User owns both: the sticky directory and the destination file.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-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 mkfifo ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User owns the sticky directory, but doesn't own the destination file.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-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} type
-expect ${inode} lstat ${n1}/${n3} inode
-expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User owns the destination file, but doesn't own the sticky directory.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-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} type
-expect ${inode} lstat ${n1}/${n3} inode
-expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User doesn't own the sticky directory nor the destination file.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-expect 0 -u 65533 -g 65533 create ${n1}/${n3} 0644
-inode=`${fstest} lstat ${n1}/${n3} inode`
-expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect ${inode} lstat ${n1}/${n3} inode
-expect 0 unlink ${n0}/${n2}
-expect 0 unlink ${n1}/${n3}
+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}
+       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}
+               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} ${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 -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
+
+               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
+
+               expect 0 unlink ${n0}/${n2}
+       done
+
+       # 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}
+               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}
+       done
+
+       # 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}
+               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}
+
+               expect 0 unlink ${n0}/${n2}
+       done
+done
 
-# User owns both: the sticky directory and the destination file.
+# User owns both: the sticky directory and the destination directory.
 expect 0 chown ${n1} 65534 65534
 expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
-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 0 rmdir ${n1}/${n3}
-# User owns the sticky directory, but doesn't own the destination file.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
-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 0 rmdir ${n1}/${n3}
-# User owns the destination file, but doesn't own the sticky directory.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
-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 0 rmdir ${n1}/${n3}
-# User doesn't own the sticky directory nor the destination file.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
-expect 0 -u 65533 -g 65533 mkdir ${n1}/${n3} 0755
-expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect 0 rmdir ${n0}/${n2}
-expect 0 rmdir ${n1}/${n3}
-
-# User owns both: the sticky directory and the destination file.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
 inode=`${fstest} lstat ${n0}/${n2} 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 create ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User owns the sticky directory, but doesn't own the destination file.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
-inode=`${fstest} lstat ${n0}/${n2} 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} type
-expect ${inode} lstat ${n1}/${n3} inode
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User owns the destination file, but doesn't own the sticky directory.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
-inode=`${fstest} lstat ${n0}/${n2} 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} type
-expect ${inode} lstat ${n1}/${n3} inode
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User doesn't own the sticky directory nor the destination file.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 mkfifo ${n0}/${n2} 0644
-expect 0 -u 65533 -g 65533 mkfifo ${n1}/${n3} 0644
-inode=`${fstest} lstat ${n1}/${n3} inode`
-expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect ${inode} lstat ${n1}/${n3} inode
-expect 0 unlink ${n0}/${n2}
-expect 0 unlink ${n1}/${n3}
 
-# User owns both: the sticky directory and the destination file.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
-inode=`${fstest} lstat ${n0}/${n2} 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 create ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User owns the sticky directory, but doesn't own the destination file.
-expect 0 chown ${n1} 65534 65534
-expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
-inode=`${fstest} lstat ${n0}/${n2} 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} type
-expect ${inode} lstat ${n1}/${n3} inode
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User owns the destination file, but doesn't own the sticky directory.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
-inode=`${fstest} lstat ${n0}/${n2} inode`
-expect 0 -u 65534 -g 65534 symlink test ${n1}/${n3}
+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} lstat ${n1}/${n3} inode
-expect 0 -u 65534 -g 65534 create ${n0}/${n2} 0644
-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 unlink ${n1}/${n3}
-# User doesn't own the sticky directory nor the destination file.
-expect 0 chown ${n1} 65533 65533
-expect 0 -u 65534 -g 65534 symlink test ${n0}/${n2}
-expect 0 -u 65533 -g 65533 symlink test ${n1}/${n3}
-inode=`${fstest} lstat ${n1}/${n3} inode`
-expect "EACCES|EPERM" -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
-expect ${inode} lstat ${n1}/${n3} inode
-expect 0 unlink ${n0}/${n2}
-expect 0 unlink ${n1}/${n3}
+expect 0 rmdir ${n1}/${n3}
+
+# User owns the sticky directory, but doesn't own the destination directory.
+for id in 0 65533; do
+       expect 0 chown ${n1} 65534 65534
+       expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
+       inode=`${fstest} lstat ${n0}/${n2} inode`
+
+       expect 0 -u ${id} -g ${id} mkdir ${n1}/${n3} 0755
+       expect 0 -u 65534 -g 65534 rename ${n0}/${n2} ${n1}/${n3}
+       expect ENOENT lstat ${n0}/${n2} type
+       expect ${inode} lstat ${n1}/${n3} inode
+       expect 0 rmdir ${n1}/${n3}
+done
+
+# User owns the destination directory, but doesn't own the sticky directory.
+for id in 0 65533; do
+       expect 0 chown ${n1} ${id} ${id}
+       expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
+       inode=`${fstest} lstat ${n0}/${n2} inode`
+
+       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} lstat ${n1}/${n3} inode
+       expect 0 rmdir ${n1}/${n3}
+done
+
+# User doesn't own the sticky directory nor the destination directory.
+for id in 0 65533; do
+       expect 0 chown ${n1} ${id} ${id}
+       expect 0 -u 65534 -g 65534 mkdir ${n0}/${n2} 0755
+       inode=`${fstest} lstat ${n0}/${n2} inode`
+
+       expect 0 -u ${id} -g ${id} mkdir ${n1}/${n3} 0755
+       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 rmdir ${n0}/${n2}
+       expect 0 rmdir ${n1}/${n3}
+done
 
 expect 0 rmdir ${n1}
 expect 0 rmdir ${n0}

Modified: head/tools/regression/fstest/tests/rename/13.t
==============================================================================
--- head/tools/regression/fstest/tests/rename/13.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/rename/13.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -6,7 +6,7 @@ desc="rename returns ENOTDIR when the 'f
 dir=`dirname $0`
 . ${dir}/../misc.sh
 
-echo "1..17"
+echo "1..32"
 
 n0=`namegen`
 n1=`namegen`
@@ -25,6 +25,24 @@ expect dir lstat ${n0} type
 expect fifo lstat ${n1} type
 expect 0 unlink ${n1}
 
+expect 0 mknod ${n1} b 0644 1 2
+expect ENOTDIR rename ${n0} ${n1}
+expect dir lstat ${n0} type
+expect block lstat ${n1} type
+expect 0 unlink ${n1}
+
+expect 0 mknod ${n1} c 0644 1 2
+expect ENOTDIR rename ${n0} ${n1}
+expect dir lstat ${n0} type
+expect char lstat ${n1} type
+expect 0 unlink ${n1}
+
+expect 0 bind ${n1}
+expect ENOTDIR rename ${n0} ${n1}
+expect dir lstat ${n0} type
+expect socket lstat ${n1} type
+expect 0 unlink ${n1}
+
 expect 0 symlink test ${n1}
 expect ENOTDIR rename ${n0} ${n1}
 expect dir lstat ${n0} type

Modified: head/tools/regression/fstest/tests/rename/14.t
==============================================================================
--- head/tools/regression/fstest/tests/rename/14.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/rename/14.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -6,7 +6,7 @@ desc="rename returns EISDIR when the 'to
 dir=`dirname $0`
 . ${dir}/../misc.sh
 
-echo "1..17"
+echo "1..32"
 
 n0=`namegen`
 n1=`namegen`
@@ -25,6 +25,24 @@ expect dir lstat ${n0} type
 expect fifo lstat ${n1} type
 expect 0 unlink ${n1}
 
+expect 0 mknod ${n1} b 0644 1 2
+expect EISDIR rename ${n1} ${n0}
+expect dir lstat ${n0} type
+expect block lstat ${n1} type
+expect 0 unlink ${n1}
+
+expect 0 mknod ${n1} c 0644 1 2
+expect EISDIR rename ${n1} ${n0}
+expect dir lstat ${n0} type
+expect char lstat ${n1} type
+expect 0 unlink ${n1}
+
+expect 0 bind ${n1}
+expect EISDIR rename ${n1} ${n0}
+expect dir lstat ${n0} type
+expect socket lstat ${n1} type
+expect 0 unlink ${n1}
+
 expect 0 symlink test ${n1}
 expect EISDIR rename ${n1} ${n0}
 expect dir lstat ${n0} type

Modified: head/tools/regression/fstest/tests/rename/15.t
==============================================================================
--- head/tools/regression/fstest/tests/rename/15.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/rename/15.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -8,7 +8,7 @@ dir=`dirname $0`
 
 [ "${os}" = "FreeBSD" ] || quick_exit
 
-echo "1..14"
+echo "1..23"
 
 n0=`namegen`
 n1=`namegen`
@@ -31,6 +31,18 @@ expect 0 mkfifo ${n0}/${n1} 0644
 expect EXDEV rename ${n0}/${n1} ${n2}
 expect 0 unlink ${n0}/${n1}
 
+expect 0 mknod ${n0}/${n1} b 0644 1 2
+expect EXDEV rename ${n0}/${n1} ${n2}
+expect 0 unlink ${n0}/${n1}
+
+expect 0 mknod ${n0}/${n1} c 0644 1 2
+expect EXDEV rename ${n0}/${n1} ${n2}
+expect 0 unlink ${n0}/${n1}
+
+expect 0 bind ${n0}/${n1}
+expect EXDEV rename ${n0}/${n1} ${n2}
+expect 0 unlink ${n0}/${n1}
+
 expect 0 symlink test ${n0}/${n1}
 expect EXDEV rename ${n0}/${n1} ${n2}
 expect 0 unlink ${n0}/${n1}

Modified: head/tools/regression/fstest/tests/rename/20.t
==============================================================================
--- head/tools/regression/fstest/tests/rename/20.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/rename/20.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -6,7 +6,7 @@ desc="rename returns EEXIST or ENOTEMPTY
 dir=`dirname $0`
 . ${dir}/../misc.sh
 
-echo "1..16"
+echo "1..25"
 
 n0=`namegen`
 n1=`namegen`
@@ -27,6 +27,18 @@ expect 0 mkfifo ${n1}/${n2} 0644
 expect "EEXIST|ENOTEMPTY" rename ${n0} ${n1}
 expect 0 unlink ${n1}/${n2}
 
+expect 0 mknod ${n1}/${n2} b 0644 1 2
+expect "EEXIST|ENOTEMPTY" rename ${n0} ${n1}
+expect 0 unlink ${n1}/${n2}
+
+expect 0 mknod ${n1}/${n2} c 0644 1 2
+expect "EEXIST|ENOTEMPTY" rename ${n0} ${n1}
+expect 0 unlink ${n1}/${n2}
+
+expect 0 bind ${n1}/${n2}
+expect "EEXIST|ENOTEMPTY" rename ${n0} ${n1}
+expect 0 unlink ${n1}/${n2}
+
 expect 0 symlink test ${n1}/${n2}
 expect "EEXIST|ENOTEMPTY" rename ${n0} ${n1}
 expect 0 unlink ${n1}/${n2}

Modified: head/tools/regression/fstest/tests/unlink/00.t
==============================================================================
--- head/tools/regression/fstest/tests/unlink/00.t      Tue Aug 10 22:45:59 
2010        (r211155)
+++ head/tools/regression/fstest/tests/unlink/00.t      Tue Aug 10 22:57:43 
2010        (r211156)
@@ -6,7 +6,7 @@ desc="unlink removes regular files, symb
 dir=`dirname $0`
 . ${dir}/../misc.sh
 
-echo "1..55"
+echo "1..112"
 
 n0=`namegen`
 n1=`namegen`
@@ -31,7 +31,20 @@ expect fifo lstat ${n0} type
 expect 0 unlink ${n0}
 expect ENOENT lstat ${n0} type
 
-# TODO: sockets removal
+expect 0 mknod ${n0} b 0644 1 2
+expect block lstat ${n0} type
+expect 0 unlink ${n0}
+expect ENOENT lstat ${n0} type
+
+expect 0 mknod ${n0} c 0644 1 2
+expect char lstat ${n0} type
+expect 0 unlink ${n0}
+expect ENOENT lstat ${n0} type
+
+expect 0 bind ${n0}
+expect socket lstat ${n0} type
+expect 0 unlink ${n0}
+expect ENOENT lstat ${n0} type
 
 # successful unlink(2) updates ctime.
 expect 0 create ${n0} 0644
@@ -52,6 +65,33 @@ ctime2=`${fstest} stat ${n0} ctime`
 test_check $ctime1 -lt $ctime2
 expect 0 unlink ${n0}
 
+expect 0 mknod ${n0} b 0644 1 2
+expect 0 link ${n0} ${n1}
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 unlink ${n1}
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
+expect 0 mknod ${n0} c 0644 1 2
+expect 0 link ${n0} ${n1}
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 unlink ${n1}
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
+expect 0 bind ${n0}
+expect 0 link ${n0} ${n1}
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 unlink ${n1}
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -lt $ctime2
+expect 0 unlink ${n0}
+
 # unsuccessful unlink(2) does not update ctime.
 expect 0 create ${n0} 0644
 ctime1=`${fstest} stat ${n0} ctime`
@@ -69,6 +109,30 @@ ctime2=`${fstest} stat ${n0} ctime`
 test_check $ctime1 -eq $ctime2
 expect 0 unlink ${n0}
 
+expect 0 mknod ${n0} b 0644 1 2
+ctime1=`${fstest} stat ${n0} ctime`
+sleep 1
+expect EACCES -u 65534 unlink ${n0}
+ctime2=`${fstest} stat ${n0} ctime`
+test_check $ctime1 -eq $ctime2
+expect 0 unlink ${n0}

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to