summaryrefslogtreecommitdiffstats
path: root/contrib/pjdfstest/tests/rmdir
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2014-12-05 11:44:18 +0000
committerngie <ngie@FreeBSD.org>2014-12-05 11:44:18 +0000
commit2ceba1b1340a12cfe78aa2589bb0bba87f7b33d9 (patch)
treee08795fd1d98cb1be488d6510c6b57e60398f2fa /contrib/pjdfstest/tests/rmdir
parentf88754a36c36675f66d041b57d0da1b2ea102c62 (diff)
downloadFreeBSD-src-2ceba1b1340a12cfe78aa2589bb0bba87f7b33d9.zip
FreeBSD-src-2ceba1b1340a12cfe78aa2589bb0bba87f7b33d9.tar.gz
MFC r272057,r272083,r272084,r272087,r274016:
r272057: Import pjdfstest from ^/vendor/pjdfstest/abf03c3a47745d4521b0e4aa141317553ca48f91 - Remove tools/regression/pjdfstest - Add upgrade directions for contrib/pjdfstest - Add a note to UPDATING for the move (the reachover Makefiles are coming soon) Functional differences: - ftruncate testcases are added from upstream (github) Non-functional differences: - The copyright for the project has been updated to 2012 - pjd's contact information has been updated Discussed with: -testing, jmmv, pjd Sponsored by: EMC / Isilon Storage Division r272083: Expect ELOOP on Darwin/Linux with "O_NOFOLLOW was specified and the target is a symbolic link" case. Assume EMLINK on the rest of the OSes (FreeBSD, Solaris, etc) Sponsored by: EMC / Isilon Storage Division r272084: Fix the executed testplan count Sponsored by: EMC / Isilon Storage Division r272087: Increase the memory disk size in the following testcases to avoid mount failures, which would cause cascade failures in the rest of the test run: link/15.t, open/19.t, mkdir/11.t, mkfifo/11.t, symlink/11.t Fail quickly in all of the testcases if mdconfig, mount, umount, etc fails to avoid issues similar to this in the future Submitted by: Casey Peel <cpeel@isilon.com> Sponsored by: EMC / Isilon Storage Division r274016: Integrate pjdfstest test suite execution into kyua pjdfstest execution is opt-in and must be done as root due to some of the assumptions made by the test suite and lack of error checking in the non-root case A description of how to execute pjdfstest with kyua is provided in share/pjdfstest/README Phabric: D824 (an earlier prototype patch) Relnotes: yes Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'contrib/pjdfstest/tests/rmdir')
-rw-r--r--contrib/pjdfstest/tests/rmdir/00.t28
-rw-r--r--contrib/pjdfstest/tests/rmdir/01.t30
-rw-r--r--contrib/pjdfstest/tests/rmdir/02.t17
-rw-r--r--contrib/pjdfstest/tests/rmdir/03.t22
-rw-r--r--contrib/pjdfstest/tests/rmdir/04.t17
-rw-r--r--contrib/pjdfstest/tests/rmdir/05.t19
-rw-r--r--contrib/pjdfstest/tests/rmdir/06.t24
-rw-r--r--contrib/pjdfstest/tests/rmdir/07.t27
-rw-r--r--contrib/pjdfstest/tests/rmdir/08.t27
-rw-r--r--contrib/pjdfstest/tests/rmdir/09.t65
-rw-r--r--contrib/pjdfstest/tests/rmdir/10.t67
-rw-r--r--contrib/pjdfstest/tests/rmdir/11.t57
-rw-r--r--contrib/pjdfstest/tests/rmdir/12.t20
-rw-r--r--contrib/pjdfstest/tests/rmdir/13.t22
-rw-r--r--contrib/pjdfstest/tests/rmdir/14.t27
-rw-r--r--contrib/pjdfstest/tests/rmdir/15.t12
16 files changed, 481 insertions, 0 deletions
diff --git a/contrib/pjdfstest/tests/rmdir/00.t b/contrib/pjdfstest/tests/rmdir/00.t
new file mode 100644
index 0000000..9e75be6
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/00.t
@@ -0,0 +1,28 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/00.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir removes directories"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..10"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+expect dir lstat ${n0} type
+expect 0 rmdir ${n0}
+expect ENOENT lstat ${n0} type
+
+expect 0 mkdir ${n0} 0755
+expect 0 mkdir ${n0}/${n1} 0755
+time=`${fstest} stat ${n0} ctime`
+sleep 1
+expect 0 rmdir ${n0}/${n1}
+mtime=`${fstest} stat ${n0} mtime`
+test_check $time -lt $mtime
+ctime=`${fstest} stat ${n0} ctime`
+test_check $time -lt $ctime
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/01.t b/contrib/pjdfstest/tests/rmdir/01.t
new file mode 100644
index 0000000..b89ffef
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/01.t
@@ -0,0 +1,30 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/01.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns ENOTDIR if a component of the path is not a directory"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..14"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+expect 0 create ${n0}/${n1} 0644
+expect ENOTDIR rmdir ${n0}/${n1}/test
+expect 0 unlink ${n0}/${n1}
+expect 0 rmdir ${n0}
+
+expect 0 create ${n0} 0644
+expect ENOTDIR rmdir ${n0}
+expect 0 unlink ${n0}
+
+expect 0 symlink ${n1} ${n0}
+expect ENOTDIR rmdir ${n0}
+expect 0 unlink ${n0}
+
+expect 0 mkfifo ${n0} 0644
+expect ENOTDIR rmdir ${n0}
+expect 0 unlink ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/02.t b/contrib/pjdfstest/tests/rmdir/02.t
new file mode 100644
index 0000000..eb8a774
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/02.t
@@ -0,0 +1,17 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/02.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns ENAMETOOLONG if a component of a pathname exceeded {NAME_MAX} characters"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..4"
+
+nx=`namegen_max`
+nxx="${nx}x"
+
+expect 0 mkdir ${nx} 0755
+expect 0 rmdir ${nx}
+expect ENOENT rmdir ${nx}
+expect ENAMETOOLONG rmdir ${nxx}
diff --git a/contrib/pjdfstest/tests/rmdir/03.t b/contrib/pjdfstest/tests/rmdir/03.t
new file mode 100644
index 0000000..3d5a11a
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/03.t
@@ -0,0 +1,22 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/03.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns ENAMETOOLONG if an entire path name exceeded ${PATH_MAX} characters"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..5"
+
+nx=`dirgen_max`
+nxx="${nx}x"
+
+mkdir -p "${nx%/*}"
+
+expect 0 mkdir ${nx} 0755
+expect dir,0755 stat ${nx} type,mode
+expect 0 rmdir ${nx}
+expect ENOENT rmdir ${nx}
+expect ENAMETOOLONG rmdir ${nxx}
+
+rm -rf "${nx%%/*}"
diff --git a/contrib/pjdfstest/tests/rmdir/04.t b/contrib/pjdfstest/tests/rmdir/04.t
new file mode 100644
index 0000000..d5abc31
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/04.t
@@ -0,0 +1,17 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/04.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns ENOENT if the named directory does not exist"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..4"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+expect 0 rmdir ${n0}
+expect ENOENT rmdir ${n0}
+expect ENOENT rmdir ${n1}
diff --git a/contrib/pjdfstest/tests/rmdir/05.t b/contrib/pjdfstest/tests/rmdir/05.t
new file mode 100644
index 0000000..eb98453
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/05.t
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/05.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns ELOOP if too many symbolic links were encountered in translating the pathname"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..6"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 symlink ${n0} ${n1}
+expect 0 symlink ${n1} ${n0}
+expect ELOOP rmdir ${n0}/test
+expect ELOOP rmdir ${n1}/test
+expect 0 unlink ${n0}
+expect 0 unlink ${n1}
diff --git a/contrib/pjdfstest/tests/rmdir/06.t b/contrib/pjdfstest/tests/rmdir/06.t
new file mode 100644
index 0000000..64a6ac8
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/06.t
@@ -0,0 +1,24 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/06.t 211474 2010-08-18 22:06:43Z pjd $
+
+desc="rmdir returns EEXIST or ENOTEMPTY the named directory contains files other than '.' and '..' in it"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..23"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+for type in regular dir fifo block char socket symlink; do
+ create_file ${type} ${n0}/${n1}
+ expect "EEXIST|ENOTEMPTY" rmdir ${n0}
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n0}/${n1}
+ else
+ expect 0 unlink ${n0}/${n1}
+ fi
+done
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/07.t b/contrib/pjdfstest/tests/rmdir/07.t
new file mode 100644
index 0000000..10a78a7
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/07.t
@@ -0,0 +1,27 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/07.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EACCES when search permission is denied for a component of the path prefix"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..10"
+
+n0=`namegen`
+n1=`namegen`
+n2=`namegen`
+
+expect 0 mkdir ${n0} 0755
+cdir=`pwd`
+cd ${n0}
+expect 0 mkdir ${n1} 0755
+expect 0 chown ${n1} 65534 65534
+expect 0 -u 65534 -g 65534 mkdir ${n1}/${n2} 0755
+expect 0 chmod ${n1} 0644
+expect EACCES -u 65534 -g 65534 rmdir ${n1}/${n2}
+expect 0 chmod ${n1} 0755
+expect 0 -u 65534 -g 65534 rmdir ${n1}/${n2}
+expect 0 rmdir ${n1}
+cd ${cdir}
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/08.t b/contrib/pjdfstest/tests/rmdir/08.t
new file mode 100644
index 0000000..fe70c86
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/08.t
@@ -0,0 +1,27 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/08.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EACCES when write permission is denied on the directory containing the link to be removed"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..10"
+
+n0=`namegen`
+n1=`namegen`
+n2=`namegen`
+
+expect 0 mkdir ${n0} 0755
+cdir=`pwd`
+cd ${n0}
+expect 0 mkdir ${n1} 0755
+expect 0 chown ${n1} 65534 65534
+expect 0 -u 65534 -g 65534 mkdir ${n1}/${n2} 0755
+expect 0 chmod ${n1} 0555
+expect EACCES -u 65534 -g 65534 rmdir ${n1}/${n2}
+expect 0 chmod ${n1} 0755
+expect 0 -u 65534 -g 65534 rmdir ${n1}/${n2}
+expect 0 rmdir ${n1}
+cd ${cdir}
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/09.t b/contrib/pjdfstest/tests/rmdir/09.t
new file mode 100644
index 0000000..8b0276c
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/09.t
@@ -0,0 +1,65 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/09.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EPERM if the named directory has its immutable, undeletable or append-only flag set"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+require chflags
+
+case "${os}:${fs}" in
+FreeBSD:ZFS)
+ echo "1..15"
+ ;;
+FreeBSD:UFS)
+ echo "1..30"
+ ;;
+*)
+ quick_exit
+esac
+
+n0=`namegen`
+
+expect 0 mkdir ${n0} 0755
+expect 0 chflags ${n0} SF_IMMUTABLE
+expect EPERM rmdir ${n0}
+expect 0 chflags ${n0} none
+expect 0 rmdir ${n0}
+
+expect 0 mkdir ${n0} 0755
+expect 0 chflags ${n0} SF_NOUNLINK
+expect EPERM rmdir ${n0}
+expect 0 chflags ${n0} none
+expect 0 rmdir ${n0}
+
+expect 0 mkdir ${n0} 0755
+expect 0 chflags ${n0} SF_APPEND
+todo FreeBSD:ZFS "Removing a directory protected by SF_APPEND should return EPERM."
+expect EPERM rmdir ${n0}
+todo FreeBSD:ZFS "Removing a directory protected by SF_APPEND should return EPERM."
+expect 0 chflags ${n0} none
+todo FreeBSD:ZFS "Removing a directory protected by SF_APPEND should return EPERM."
+expect 0 rmdir ${n0}
+
+case "${os}:${fs}" in
+FreeBSD:UFS)
+ expect 0 mkdir ${n0} 0755
+ expect 0 chflags ${n0} UF_IMMUTABLE
+ expect EPERM rmdir ${n0}
+ expect 0 chflags ${n0} none
+ expect 0 rmdir ${n0}
+
+ expect 0 mkdir ${n0} 0755
+ expect 0 chflags ${n0} UF_NOUNLINK
+ expect EPERM rmdir ${n0}
+ expect 0 chflags ${n0} none
+ expect 0 rmdir ${n0}
+
+ expect 0 mkdir ${n0} 0755
+ expect 0 chflags ${n0} UF_APPEND
+ expect EPERM rmdir ${n0}
+ expect 0 chflags ${n0} none
+ expect 0 rmdir ${n0}
+ ;;
+esac
diff --git a/contrib/pjdfstest/tests/rmdir/10.t b/contrib/pjdfstest/tests/rmdir/10.t
new file mode 100644
index 0000000..5d2e37e
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/10.t
@@ -0,0 +1,67 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/10.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EPERM if the parent directory of the named file has its immutable or append-only flag set"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+require chflags
+
+case "${os}:${fs}" in
+FreeBSD:ZFS)
+ echo "1..16"
+ ;;
+FreeBSD:UFS)
+ echo "1..30"
+ ;;
+*)
+ quick_exit
+esac
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 chflags ${n0} SF_IMMUTABLE
+expect EPERM rmdir ${n0}/${n1}
+expect 0 chflags ${n0} none
+expect 0 rmdir ${n0}/${n1}
+
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 chflags ${n0} SF_NOUNLINK
+expect 0 rmdir ${n0}/${n1}
+expect 0 chflags ${n0} none
+
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 chflags ${n0} SF_APPEND
+todo FreeBSD:ZFS "Removing an entry from directory protected by SF_APPEND should return EPERM."
+expect EPERM rmdir ${n0}/${n1}
+expect 0 chflags ${n0} none
+todo FreeBSD:ZFS "Removing an entry from directory protected by SF_APPEND should return EPERM."
+expect 0 rmdir ${n0}/${n1}
+
+case "${os}:${fs}" in
+FreeBSD:UFS)
+ expect 0 mkdir ${n0}/${n1} 0755
+ expect 0 chflags ${n0} UF_IMMUTABLE
+ expect EPERM rmdir ${n0}/${n1}
+ expect 0 chflags ${n0} none
+ expect 0 rmdir ${n0}/${n1}
+
+ expect 0 mkdir ${n0}/${n1} 0755
+ expect 0 chflags ${n0} UF_NOUNLINK
+ expect 0 rmdir ${n0}/${n1}
+ expect 0 chflags ${n0} none
+
+ expect 0 mkdir ${n0}/${n1} 0755
+ expect 0 chflags ${n0} UF_APPEND
+ expect EPERM rmdir ${n0}/${n1}
+ expect 0 chflags ${n0} none
+ expect 0 rmdir ${n0}/${n1}
+ ;;
+esac
+
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/11.t b/contrib/pjdfstest/tests/rmdir/11.t
new file mode 100644
index 0000000..b8e0591
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/11.t
@@ -0,0 +1,57 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/11.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EACCES or EPERM if the directory containing the directory to be removed is marked sticky, and neither the containing directory nor the directory to be removed are owned by the effective user ID"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..47"
+
+n0=`namegen`
+n1=`namegen`
+n2=`namegen`
+
+expect 0 mkdir ${n2} 0755
+cdir=`pwd`
+cd ${n2}
+
+expect 0 mkdir ${n0} 0755
+expect 0 chown ${n0} 65534 65534
+expect 0 chmod ${n0} 01777
+
+# User owns both: the sticky directory and the directory to be removed.
+expect 0 -u 65534 -g 65534 mkdir ${n0}/${n1} 0755
+expect dir,65534,65534 lstat ${n0}/${n1} type,uid,gid
+expect 0 -u 65534 -g 65534 rmdir ${n0}/${n1}
+expect ENOENT lstat ${n0}/${n1} type
+# User owns the directory to be removed, but doesn't own the sticky directory.
+for id in 0 65533; do
+ expect 0 chown ${n0} ${id} ${id}
+ create_file dir ${n0}/${n1} 65534 65534
+ expect dir,65534,65534 lstat ${n0}/${n1} type,uid,gid
+ expect 0 -u 65534 -g 65534 rmdir ${n0}/${n1}
+ expect ENOENT lstat ${n0}/${n1} type
+done
+# User owns the sticky directory, but doesn't own the directory to be removed.
+expect 0 chown ${n0} 65534 65534
+for id in 0 65533; do
+ create_file dir ${n0}/${n1} ${id} ${id}
+ expect dir,${id},${id} lstat ${n0}/${n1} type,uid,gid
+ expect 0 -u 65534 -g 65534 rmdir ${n0}/${n1}
+ expect ENOENT lstat ${n0}/${n1} type
+done
+# User doesn't own the sticky directory nor the directory to be removed.
+for id in 0 65533; do
+ expect 0 chown ${n0} ${id} ${id}
+ create_file dir ${n0}/${n1} ${id} ${id}
+ expect dir,${id},${id} lstat ${n0}/${n1} type,uid,gid
+ expect "EACCES|EPERM" -u 65534 -g 65534 rmdir ${n0}/${n1}
+ expect dir,${id},${id} lstat ${n0}/${n1} type,uid,gid
+ expect 0 rmdir ${n0}/${n1}
+done
+
+expect 0 rmdir ${n0}
+
+cd ${cdir}
+expect 0 rmdir ${n2}
diff --git a/contrib/pjdfstest/tests/rmdir/12.t b/contrib/pjdfstest/tests/rmdir/12.t
new file mode 100644
index 0000000..57d144d
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/12.t
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/12.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EINVAL if the last component of the path is '.' and EEXIST or ENOTEMPTY if the last component of the path is '..'"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..6"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+expect 0 mkdir ${n0}/${n1} 0755
+expect EINVAL rmdir ${n0}/${n1}/.
+todo FreeBSD "According to POSIX: EEXIST or ENOTEMPTY - The path argument names a directory that is not an empty directory, or there are hard links to the directory other than dot or a single entry in dot-dot."
+expect "ENOTEMPTY|EEXIST" rmdir ${n0}/${n1}/..
+expect 0 rmdir ${n0}/${n1}
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/13.t b/contrib/pjdfstest/tests/rmdir/13.t
new file mode 100644
index 0000000..4a1a885
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/13.t
@@ -0,0 +1,22 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/13.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EBUSY if the directory to be removed is the mount point for a mounted file system"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+[ "${os}" = "FreeBSD" ] || quick_exit
+
+echo "1..3"
+
+n0=`namegen`
+
+expect 0 mkdir ${n0} 0755
+n=`mdconfig -a -n -t malloc -s 1m` || exit
+newfs /dev/md${n} >/dev/null || exit
+mount /dev/md${n} ${n0} || exit
+expect EBUSY rmdir ${n0}
+umount /dev/md${n}
+mdconfig -d -u ${n} || exit
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/14.t b/contrib/pjdfstest/tests/rmdir/14.t
new file mode 100644
index 0000000..bdefeae
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/14.t
@@ -0,0 +1,27 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/14.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EROFS if the named file resides on a read-only file system"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+[ "${os}:${fs}" = "FreeBSD:UFS" ] || quick_exit
+
+echo "1..5"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+n=`mdconfig -a -n -t malloc -s 1m` || exit
+newfs /dev/md${n} >/dev/null || exit
+mount /dev/md${n} ${n0} || exit
+expect 0 mkdir ${n0}/${n1} 0755
+mount -ur /dev/md${n}
+expect EROFS rmdir ${n0}/${n1}
+mount -uw /dev/md${n}
+expect 0 rmdir ${n0}/${n1}
+umount /dev/md${n}
+mdconfig -d -u ${n} || exit
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/rmdir/15.t b/contrib/pjdfstest/tests/rmdir/15.t
new file mode 100644
index 0000000..5390403
--- /dev/null
+++ b/contrib/pjdfstest/tests/rmdir/15.t
@@ -0,0 +1,12 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/15.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="rmdir returns EFAULT if the path argument points outside the process's allocated address space"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..2"
+
+expect EFAULT rmdir NULL
+expect EFAULT rmdir DEADCODE
OpenPOWER on IntegriCloud