140a8ac8fSEnji Cooper#!/bin/sh 2*3416500aSEnji Cooper# vim: filetype=sh noexpandtab ts=8 sw=8 340a8ac8fSEnji Cooper# $FreeBSD: head/tools/regression/pjdfstest/tests/granular/05.t 211352 2010-08-15 21:24:17Z pjd $ 440a8ac8fSEnji Cooper 540a8ac8fSEnji Cooperdesc="NFSv4 granular permissions checking - DELETE and DELETE_CHILD with directories" 640a8ac8fSEnji Cooper 740a8ac8fSEnji Cooperdir=`dirname $0` 840a8ac8fSEnji Cooper. ${dir}/../misc.sh 940a8ac8fSEnji Cooper 1040a8ac8fSEnji Cooper[ "${os}:${fs}" = "FreeBSD:ZFS" ] || quick_exit 1140a8ac8fSEnji Cooper 1240a8ac8fSEnji Cooperecho "1..68" 1340a8ac8fSEnji Cooper 1440a8ac8fSEnji Coopern0=`namegen` 1540a8ac8fSEnji Coopern1=`namegen` 1640a8ac8fSEnji Coopern2=`namegen` 1740a8ac8fSEnji Coopern3=`namegen` 1840a8ac8fSEnji Cooper 1940a8ac8fSEnji Cooperexpect 0 mkdir ${n2} 0755 2040a8ac8fSEnji Cooperexpect 0 mkdir ${n3} 0777 2140a8ac8fSEnji Coopercdir=`pwd` 2240a8ac8fSEnji Coopercd ${n2} 2340a8ac8fSEnji Cooper 2440a8ac8fSEnji Cooper# Unlink allowed on writable directory. 2540a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0755 2640a8ac8fSEnji Cooperexpect EACCES -u 65534 -g 65534 rmdir ${n0} 2740a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:write_data::allow 2840a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0} 2940a8ac8fSEnji Cooper 3040a8ac8fSEnji Cooper# Moving directory elsewhere allowed on writable directory. 3140a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0777 3240a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:write_data::deny 3340a8ac8fSEnji Cooperexpect EACCES -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 3440a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:write_data::allow 3540a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 3640a8ac8fSEnji Cooper 3740a8ac8fSEnji Cooper# 12 3840a8ac8fSEnji Cooper# Moving directory from elsewhere allowed on writable directory. 3940a8ac8fSEnji Cooperexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 4040a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:append_data::allow 4140a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 4240a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0} 4340a8ac8fSEnji Cooper 4440a8ac8fSEnji Cooper# Moving directory from elsewhere overwriting local directory allowed 4540a8ac8fSEnji Cooper# on writable directory. 4640a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0755 4740a8ac8fSEnji Cooperexpect 0 mkdir ../${n3}/${n0} 0777 4840a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:write_data::deny 4940a8ac8fSEnji Cooperexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 5040a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:write_data::allow 5140a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 5240a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0} 5340a8ac8fSEnji Cooper 5440a8ac8fSEnji Cooper# 23 5540a8ac8fSEnji Cooper# Denied DELETE changes nothing wrt removing. 5640a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0755 5740a8ac8fSEnji Cooperexpect 0 prependacl ${n0} user:65534:delete::deny 5840a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0} 5940a8ac8fSEnji Cooper 6040a8ac8fSEnji Cooper# Denied DELETE changes nothing wrt moving elsewhere or from elsewhere. 6140a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0777 6240a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 6340a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 6440a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0} 6540a8ac8fSEnji Cooper 6640a8ac8fSEnji Cooper# DELETE_CHILD denies unlink on writable directory. 6740a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0755 6840a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:delete_child::deny 6940a8ac8fSEnji Cooperexpect EPERM -u 65534 -g 65534 rmdir ${n0} 7040a8ac8fSEnji Cooperexpect 0 rmdir ${n0} 7140a8ac8fSEnji Cooper 7240a8ac8fSEnji Cooper# 35 7340a8ac8fSEnji Cooper# DELETE_CHILD denies moving directory elsewhere. 7440a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0777 7540a8ac8fSEnji Cooperexpect EPERM -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 7640a8ac8fSEnji Cooperexpect 0 rename ${n0} ../${n3}/${n0} 7740a8ac8fSEnji Cooper 7840a8ac8fSEnji Cooper# DELETE_CHILD does not deny moving directory from elsewhere 7940a8ac8fSEnji Cooper# to a writable directory. 8040a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 8140a8ac8fSEnji Cooper 8240a8ac8fSEnji Cooper# DELETE_CHILD denies moving directory from elsewhere 8340a8ac8fSEnji Cooper# to a writable directory overwriting local directory. 8440a8ac8fSEnji Cooperexpect 0 mkdir ../${n3}/${n0} 0755 8540a8ac8fSEnji Cooperexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 8640a8ac8fSEnji Cooper 8740a8ac8fSEnji Cooper# DELETE allowed on directory allows for unlinking, no matter 8840a8ac8fSEnji Cooper# what permissions on containing directory are. 8940a8ac8fSEnji Cooperexpect 0 prependacl ${n0} user:65534:delete::allow 9040a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0} 9140a8ac8fSEnji Cooper 9240a8ac8fSEnji Cooper# Same for moving the directory elsewhere. 9340a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0777 9440a8ac8fSEnji Cooperexpect 0 prependacl ${n0} user:65534:delete::allow 9540a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 9640a8ac8fSEnji Cooper 9740a8ac8fSEnji Cooper# 46 9840a8ac8fSEnji Cooper# Same for moving the directory from elsewhere into a writable 9940a8ac8fSEnji Cooper# directory with DELETE_CHILD denied. 10040a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 10140a8ac8fSEnji Cooperexpect 0 rmdir ${n0} 10240a8ac8fSEnji Cooper 10340a8ac8fSEnji Cooper# DELETE does not allow for overwriting a directory in a unwritable 10440a8ac8fSEnji Cooper# directory with DELETE_CHILD denied. 10540a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0755 10640a8ac8fSEnji Cooperexpect 0 mkdir ../${n3}/${n0} 0777 10740a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:write_data::deny 10840a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:delete_child::deny 10940a8ac8fSEnji Cooperexpect EPERM -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 11040a8ac8fSEnji Cooperexpect 0 prependacl ${n0} user:65534:delete::allow 11140a8ac8fSEnji Cooper# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 11240a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 11340a8ac8fSEnji Cooper 11440a8ac8fSEnji Cooper# 54 11540a8ac8fSEnji Cooper# But it allows for plain deletion. 11640a8ac8fSEnji Cooper# XXX: expect 0 -u 65534 -g 65534 rmdir ${n0} 11740a8ac8fSEnji Cooperexpect 0 rmdir ${n0} 11840a8ac8fSEnji Cooper 11940a8ac8fSEnji Cooper# DELETE_CHILD allowed on unwritable directory. 12040a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0755 12140a8ac8fSEnji Cooperexpect 0 prependacl . user:65534:delete_child::allow 12240a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0} 12340a8ac8fSEnji Cooper 12440a8ac8fSEnji Cooper# Moving things elsewhere is allowed. 12540a8ac8fSEnji Cooperexpect 0 mkdir ${n0} 0777 12640a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 12740a8ac8fSEnji Cooper 12840a8ac8fSEnji Cooper# 60 12940a8ac8fSEnji Cooper# Moving things back is not. 13040a8ac8fSEnji Cooper# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 13140a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 13240a8ac8fSEnji Cooper 13340a8ac8fSEnji Cooper# Even if we're overwriting. 13440a8ac8fSEnji Cooper# XXX: expect 0 mkdir ${n0} 0755 13540a8ac8fSEnji Cooperexpect 0 mkdir ../${n3}/${n0} 0777 13640a8ac8fSEnji Cooper# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 13740a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 13840a8ac8fSEnji Cooperexpect 0 mkdir ../${n3}/${n0} 0777 13940a8ac8fSEnji Cooper 14040a8ac8fSEnji Cooper# Even if we have DELETE on the existing directory. 14140a8ac8fSEnji Cooperexpect 0 prependacl ${n0} user:65534:delete::allow 14240a8ac8fSEnji Cooper# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 14340a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 14440a8ac8fSEnji Cooper 14540a8ac8fSEnji Cooper# Denied DELETE changes nothing wrt removing. 14640a8ac8fSEnji Cooperexpect 0 prependacl ${n0} user:65534:delete::deny 14740a8ac8fSEnji Cooperexpect 0 -u 65534 -g 65534 rmdir ${n0} 14840a8ac8fSEnji Cooper 14940a8ac8fSEnji Coopercd ${cdir} 15040a8ac8fSEnji Cooperexpect 0 rmdir ${n2} 151