1271294Sngie#!/bin/sh 2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/granular/04.t 211352 2010-08-15 21:24:17Z pjd $ 3271294Sngie 4271294Sngiedesc="NFSv4 granular permissions checking - ACL_WRITE_OWNER" 5271294Sngie 6271294Sngiedir=`dirname $0` 7271294Sngie. ${dir}/../misc.sh 8271294Sngie 9271294Sngie[ "${os}:${fs}" = "FreeBSD:ZFS" ] || quick_exit 10271294Sngie 11271294Sngieecho "1..52" 12271294Sngie 13271294Sngien0=`namegen` 14271294Sngien1=`namegen` 15271294Sngien2=`namegen` 16271294Sngie 17271294Sngieexpect 0 mkdir ${n2} 0755 18271294Sngiecdir=`pwd` 19271294Sngiecd ${n2} 20271294Sngie 21271294Sngie# ACL_WRITE_OWNER permits to set gid to our own only. 22271294Sngieexpect 0 create ${n0} 0644 23271294Sngieexpect 0,0 lstat ${n0} uid,gid 24271294Sngieexpect EPERM -u 65534 -g 65532,65531 chown ${n0} -1 65532 25271294Sngieexpect 0,0 lstat ${n0} uid,gid 26271294Sngieexpect 0 prependacl ${n0} user:65534:write_owner::allow 27271294Sngieexpect EPERM -u 65534 -g 65532,65531 chown ${n0} -1 65530 28271294Sngieexpect 0,0 lstat ${n0} uid,gid 29271294Sngieexpect 0 -u 65534 -g 65532,65531 chown ${n0} -1 65532 30271294Sngieexpect 0,65532 lstat ${n0} uid,gid 31271294Sngieexpect 0 unlink ${n0} 32271294Sngie 33271294Sngie# ACL_WRITE_OWNER permits to set uid to our own only. 34271294Sngieexpect 0 create ${n0} 0644 35271294Sngieexpect 0,0 lstat ${n0} uid,gid 36271294Sngieexpect EPERM -u 65534 -g 65532,65531 chown ${n0} 65534 65531 37271294Sngieexpect 0,0 lstat ${n0} uid,gid 38271294Sngieexpect 0 prependacl ${n0} user:65534:write_owner::allow 39271294Sngieexpect EPERM -u 65534 -g 65532,65531 chown ${n0} 65530 65531 40271294Sngieexpect 0,0 lstat ${n0} uid,gid 41271294Sngieexpect 0 -u 65534 -g 65532,65531 chown ${n0} 65534 65531 42271294Sngieexpect 65534,65531 lstat ${n0} uid,gid 43271294Sngieexpect 0 unlink ${n0} 44271294Sngie 45271294Sngie# When non-owner calls chown(2) successfully, set-uid and set-gid bits are 46271294Sngie# removed, except when both uid and gid are equal to -1. 47271294Sngieexpect 0 create ${n0} 0644 48271294Sngieexpect 0 prependacl ${n0} user:65534:write_owner::allow 49271294Sngieexpect 0 chmod ${n0} 06555 50271294Sngieexpect 06555 lstat ${n0} mode 51271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532 52271294Sngieexpect 0555,65534,65532 lstat ${n0} mode,uid,gid 53271294Sngieexpect 0 chmod ${n0} 06555 54271294Sngieexpect 06555 lstat ${n0} mode 55271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 65533 56271294Sngieexpect 0555,65534,65533 lstat ${n0} mode,uid,gid 57271294Sngieexpect 0 chmod ${n0} 06555 58271294Sngieexpect 06555 lstat ${n0} mode 59271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 -1 60271294Sngieexpect 06555,65534,65533 lstat ${n0} mode,uid,gid 61271294Sngieexpect 0 unlink ${n0} 62271294Sngie 63271294Sngieexpect 0 mkdir ${n0} 0755 64271294Sngieexpect 0 prependacl ${n0} user:65534:write_owner::allow 65271294Sngieexpect 0 chmod ${n0} 06555 66271294Sngieexpect 06555 lstat ${n0} mode 67271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532 68271294Sngieexpect 0555,65534,65532 lstat ${n0} mode,uid,gid 69271294Sngieexpect 0 chmod ${n0} 06555 70271294Sngieexpect 06555 lstat ${n0} mode 71271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 65533 72271294Sngieexpect 0555,65534,65533 lstat ${n0} mode,uid,gid 73271294Sngieexpect 0 chmod ${n0} 06555 74271294Sngieexpect 06555 lstat ${n0} mode 75271294Sngieexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 -1 76271294Sngieexpect 06555,65534,65533 lstat ${n0} mode,uid,gid 77271294Sngieexpect 0 rmdir ${n0} 78271294Sngie 79271294Sngiecd ${cdir} 80271294Sngieexpect 0 rmdir ${n2} 81