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