1271294Sngie#!/bin/sh 2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/granular/05.t 211352 2010-08-15 21:24:17Z pjd $ 3271294Sngie 4271294Sngiedesc="NFSv4 granular permissions checking - DELETE and DELETE_CHILD with directories" 5271294Sngie 6271294Sngiedir=`dirname $0` 7271294Sngie. ${dir}/../misc.sh 8271294Sngie 9271294Sngie[ "${os}:${fs}" = "FreeBSD:ZFS" ] || quick_exit 10271294Sngie 11271294Sngieecho "1..68" 12271294Sngie 13271294Sngien0=`namegen` 14271294Sngien1=`namegen` 15271294Sngien2=`namegen` 16271294Sngien3=`namegen` 17271294Sngie 18271294Sngieexpect 0 mkdir ${n2} 0755 19271294Sngieexpect 0 mkdir ${n3} 0777 20271294Sngiecdir=`pwd` 21271294Sngiecd ${n2} 22271294Sngie 23271294Sngie# Unlink allowed on writable directory. 24271294Sngieexpect 0 mkdir ${n0} 0755 25271294Sngieexpect EACCES -u 65534 -g 65534 rmdir ${n0} 26271294Sngieexpect 0 prependacl . user:65534:write_data::allow 27271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0} 28271294Sngie 29271294Sngie# Moving directory elsewhere allowed on writable directory. 30271294Sngieexpect 0 mkdir ${n0} 0777 31271294Sngieexpect 0 prependacl . user:65534:write_data::deny 32271294Sngieexpect EACCES -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 33271294Sngieexpect 0 prependacl . user:65534:write_data::allow 34271294Sngieexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 35271294Sngie 36271294Sngie# 12 37271294Sngie# Moving directory from elsewhere allowed on writable directory. 38271294Sngieexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 39271294Sngieexpect 0 prependacl . user:65534:append_data::allow 40271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 41271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0} 42271294Sngie 43271294Sngie# Moving directory from elsewhere overwriting local directory allowed 44271294Sngie# on writable directory. 45271294Sngieexpect 0 mkdir ${n0} 0755 46271294Sngieexpect 0 mkdir ../${n3}/${n0} 0777 47271294Sngieexpect 0 prependacl . user:65534:write_data::deny 48271294Sngieexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 49271294Sngieexpect 0 prependacl . user:65534:write_data::allow 50271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 51271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0} 52271294Sngie 53271294Sngie# 23 54271294Sngie# Denied DELETE changes nothing wrt removing. 55271294Sngieexpect 0 mkdir ${n0} 0755 56271294Sngieexpect 0 prependacl ${n0} user:65534:delete::deny 57271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0} 58271294Sngie 59271294Sngie# Denied DELETE changes nothing wrt moving elsewhere or from elsewhere. 60271294Sngieexpect 0 mkdir ${n0} 0777 61271294Sngieexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 62271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 63271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0} 64271294Sngie 65271294Sngie# DELETE_CHILD denies unlink on writable directory. 66271294Sngieexpect 0 mkdir ${n0} 0755 67271294Sngieexpect 0 prependacl . user:65534:delete_child::deny 68271294Sngieexpect EPERM -u 65534 -g 65534 rmdir ${n0} 69271294Sngieexpect 0 rmdir ${n0} 70271294Sngie 71271294Sngie# 35 72271294Sngie# DELETE_CHILD denies moving directory elsewhere. 73271294Sngieexpect 0 mkdir ${n0} 0777 74271294Sngieexpect EPERM -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 75271294Sngieexpect 0 rename ${n0} ../${n3}/${n0} 76271294Sngie 77271294Sngie# DELETE_CHILD does not deny moving directory from elsewhere 78271294Sngie# to a writable directory. 79271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 80271294Sngie 81271294Sngie# DELETE_CHILD denies moving directory from elsewhere 82271294Sngie# to a writable directory overwriting local directory. 83271294Sngieexpect 0 mkdir ../${n3}/${n0} 0755 84271294Sngieexpect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 85271294Sngie 86271294Sngie# DELETE allowed on directory allows for unlinking, no matter 87271294Sngie# what permissions on containing directory are. 88271294Sngieexpect 0 prependacl ${n0} user:65534:delete::allow 89271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0} 90271294Sngie 91271294Sngie# Same for moving the directory elsewhere. 92271294Sngieexpect 0 mkdir ${n0} 0777 93271294Sngieexpect 0 prependacl ${n0} user:65534:delete::allow 94271294Sngieexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 95271294Sngie 96271294Sngie# 46 97271294Sngie# Same for moving the directory from elsewhere into a writable 98271294Sngie# directory with DELETE_CHILD denied. 99271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 100271294Sngieexpect 0 rmdir ${n0} 101271294Sngie 102271294Sngie# DELETE does not allow for overwriting a directory in a unwritable 103271294Sngie# directory with DELETE_CHILD denied. 104271294Sngieexpect 0 mkdir ${n0} 0755 105271294Sngieexpect 0 mkdir ../${n3}/${n0} 0777 106271294Sngieexpect 0 prependacl . user:65534:write_data::deny 107271294Sngieexpect 0 prependacl . user:65534:delete_child::deny 108271294Sngieexpect EPERM -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 109271294Sngieexpect 0 prependacl ${n0} user:65534:delete::allow 110271294Sngie# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 111271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 112271294Sngie 113271294Sngie# 54 114271294Sngie# But it allows for plain deletion. 115271294Sngie# XXX: expect 0 -u 65534 -g 65534 rmdir ${n0} 116271294Sngieexpect 0 rmdir ${n0} 117271294Sngie 118271294Sngie# DELETE_CHILD allowed on unwritable directory. 119271294Sngieexpect 0 mkdir ${n0} 0755 120271294Sngieexpect 0 prependacl . user:65534:delete_child::allow 121271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0} 122271294Sngie 123271294Sngie# Moving things elsewhere is allowed. 124271294Sngieexpect 0 mkdir ${n0} 0777 125271294Sngieexpect 0 -u 65534 -g 65534 rename ${n0} ../${n3}/${n0} 126271294Sngie 127271294Sngie# 60 128271294Sngie# Moving things back is not. 129271294Sngie# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 130271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 131271294Sngie 132271294Sngie# Even if we're overwriting. 133271294Sngie# XXX: expect 0 mkdir ${n0} 0755 134271294Sngieexpect 0 mkdir ../${n3}/${n0} 0777 135271294Sngie# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 136271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 137271294Sngieexpect 0 mkdir ../${n3}/${n0} 0777 138271294Sngie 139271294Sngie# Even if we have DELETE on the existing directory. 140271294Sngieexpect 0 prependacl ${n0} user:65534:delete::allow 141271294Sngie# XXX: expect EACCES -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 142271294Sngieexpect 0 -u 65534 -g 65534 rename ../${n3}/${n0} ${n0} 143271294Sngie 144271294Sngie# Denied DELETE changes nothing wrt removing. 145271294Sngieexpect 0 prependacl ${n0} user:65534:delete::deny 146271294Sngieexpect 0 -u 65534 -g 65534 rmdir ${n0} 147271294Sngie 148271294Sngiecd ${cdir} 149271294Sngieexpect 0 rmdir ${n2} 150