xref: /freebsd/contrib/pjdfstest/tests/rmdir/11.t (revision 531c2d7af3cd2e64eec94aa1b19c4b2f16fce515)
140a8ac8fSEnji Cooper#!/bin/sh
2*3416500aSEnji Cooper# vim: filetype=sh noexpandtab ts=8 sw=8
340a8ac8fSEnji Cooper# $FreeBSD: head/tools/regression/pjdfstest/tests/rmdir/11.t 211352 2010-08-15 21:24:17Z pjd $
440a8ac8fSEnji Cooper
540a8ac8fSEnji Cooperdesc="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"
640a8ac8fSEnji Cooper
740a8ac8fSEnji Cooperdir=`dirname $0`
840a8ac8fSEnji Cooper. ${dir}/../misc.sh
940a8ac8fSEnji Cooper
1040a8ac8fSEnji Cooperecho "1..47"
1140a8ac8fSEnji Cooper
1240a8ac8fSEnji Coopern0=`namegen`
1340a8ac8fSEnji Coopern1=`namegen`
1440a8ac8fSEnji Coopern2=`namegen`
1540a8ac8fSEnji Cooper
1640a8ac8fSEnji Cooperexpect 0 mkdir ${n2} 0755
1740a8ac8fSEnji Coopercdir=`pwd`
1840a8ac8fSEnji Coopercd ${n2}
1940a8ac8fSEnji Cooper
2040a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0755
2140a8ac8fSEnji Cooperexpect 0 chown ${n0} 65534 65534
2240a8ac8fSEnji Cooperexpect 0 chmod ${n0} 01777
2340a8ac8fSEnji Cooper
2440a8ac8fSEnji Cooper# User owns both: the sticky directory and the directory to be removed.
2540a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 mkdir ${n0}/${n1} 0755
2640a8ac8fSEnji Cooperexpect dir,65534,65534 lstat ${n0}/${n1} type,uid,gid
2740a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0}/${n1}
2840a8ac8fSEnji Cooperexpect ENOENT lstat ${n0}/${n1} type
2940a8ac8fSEnji Cooper# User owns the directory to be removed, but doesn't own the sticky directory.
3040a8ac8fSEnji Cooperfor id in 0 65533; do
3140a8ac8fSEnji Cooper	expect 0 chown ${n0} ${id} ${id}
3240a8ac8fSEnji Cooper	create_file dir ${n0}/${n1} 65534 65534
3340a8ac8fSEnji Cooper	expect dir,65534,65534 lstat ${n0}/${n1} type,uid,gid
3440a8ac8fSEnji Cooper	expect 0 -u 65534 -g 65534 rmdir ${n0}/${n1}
3540a8ac8fSEnji Cooper	expect ENOENT lstat ${n0}/${n1} type
3640a8ac8fSEnji Cooperdone
3740a8ac8fSEnji Cooper# User owns the sticky directory, but doesn't own the directory to be removed.
3840a8ac8fSEnji Cooperexpect 0 chown ${n0} 65534 65534
3940a8ac8fSEnji Cooperfor id in 0 65533; do
4040a8ac8fSEnji Cooper	create_file dir ${n0}/${n1} ${id} ${id}
4140a8ac8fSEnji Cooper	expect dir,${id},${id} lstat ${n0}/${n1} type,uid,gid
4240a8ac8fSEnji Cooper	expect 0 -u 65534 -g 65534 rmdir ${n0}/${n1}
4340a8ac8fSEnji Cooper	expect ENOENT lstat ${n0}/${n1} type
4440a8ac8fSEnji Cooperdone
4540a8ac8fSEnji Cooper# User doesn't own the sticky directory nor the directory to be removed.
4640a8ac8fSEnji Cooperfor id in 0 65533; do
4740a8ac8fSEnji Cooper	expect 0 chown ${n0} ${id} ${id}
4840a8ac8fSEnji Cooper	create_file dir ${n0}/${n1} ${id} ${id}
4940a8ac8fSEnji Cooper	expect dir,${id},${id} lstat ${n0}/${n1} type,uid,gid
5040a8ac8fSEnji Cooper	expect "EACCES|EPERM" -u 65534 -g 65534 rmdir ${n0}/${n1}
5140a8ac8fSEnji Cooper	expect dir,${id},${id} lstat ${n0}/${n1} type,uid,gid
5240a8ac8fSEnji Cooper	expect 0 rmdir ${n0}/${n1}
5340a8ac8fSEnji Cooperdone
5440a8ac8fSEnji Cooper
5540a8ac8fSEnji Cooperexpect 0 rmdir ${n0}
5640a8ac8fSEnji Cooper
5740a8ac8fSEnji Coopercd ${cdir}
5840a8ac8fSEnji Cooperexpect 0 rmdir ${n2}
59