1196948Strasz#!/bin/sh 2196948Strasz# $FreeBSD: releng/10.2/tools/regression/pjdfstest/tests/granular/04.t 210984 2010-08-06 23:58:54Z pjd $ 3196948Strasz 4196948Straszdesc="NFSv4 granular permissions checking - ACL_WRITE_OWNER" 5196948Strasz 6196948Straszdir=`dirname $0` 7196948Strasz. ${dir}/../misc.sh 8196948Strasz 9210984Spjd[ "${os}:${fs}" = "FreeBSD:ZFS" ] || quick_exit 10210984Spjd 11196948Straszecho "1..52" 12196948Strasz 13196948Straszn0=`namegen` 14196948Straszn1=`namegen` 15196948Straszn2=`namegen` 16196948Strasz 17196948Straszexpect 0 mkdir ${n2} 0755 18196948Straszcdir=`pwd` 19196948Straszcd ${n2} 20196948Strasz 21196948Strasz# ACL_WRITE_OWNER permits to set gid to our own only. 22196948Straszexpect 0 create ${n0} 0644 23196948Straszexpect 0,0 lstat ${n0} uid,gid 24196948Straszexpect EPERM -u 65534 -g 65532,65531 chown ${n0} -1 65532 25196948Straszexpect 0,0 lstat ${n0} uid,gid 26196948Straszexpect 0 prependacl ${n0} user:65534:write_owner::allow 27196948Straszexpect EPERM -u 65534 -g 65532,65531 chown ${n0} -1 65530 28196948Straszexpect 0,0 lstat ${n0} uid,gid 29196948Straszexpect 0 -u 65534 -g 65532,65531 chown ${n0} -1 65532 30196948Straszexpect 0,65532 lstat ${n0} uid,gid 31196948Straszexpect 0 unlink ${n0} 32196948Strasz 33196948Strasz# ACL_WRITE_OWNER permits to set uid to our own only. 34196948Straszexpect 0 create ${n0} 0644 35196948Straszexpect 0,0 lstat ${n0} uid,gid 36196948Straszexpect EPERM -u 65534 -g 65532,65531 chown ${n0} 65534 65531 37196948Straszexpect 0,0 lstat ${n0} uid,gid 38196948Straszexpect 0 prependacl ${n0} user:65534:write_owner::allow 39196948Straszexpect EPERM -u 65534 -g 65532,65531 chown ${n0} 65530 65531 40196948Straszexpect 0,0 lstat ${n0} uid,gid 41196948Straszexpect 0 -u 65534 -g 65532,65531 chown ${n0} 65534 65531 42196948Straszexpect 65534,65531 lstat ${n0} uid,gid 43196948Straszexpect 0 unlink ${n0} 44196948Strasz 45196948Strasz# When non-owner calls chown(2) successfully, set-uid and set-gid bits are 46196948Strasz# removed, except when both uid and gid are equal to -1. 47196948Straszexpect 0 create ${n0} 0644 48196948Straszexpect 0 prependacl ${n0} user:65534:write_owner::allow 49196948Straszexpect 0 chmod ${n0} 06555 50196948Straszexpect 06555 lstat ${n0} mode 51196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532 52196948Straszexpect 0555,65534,65532 lstat ${n0} mode,uid,gid 53196948Straszexpect 0 chmod ${n0} 06555 54196948Straszexpect 06555 lstat ${n0} mode 55196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 65533 56196948Straszexpect 0555,65534,65533 lstat ${n0} mode,uid,gid 57196948Straszexpect 0 chmod ${n0} 06555 58196948Straszexpect 06555 lstat ${n0} mode 59196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 -1 60196948Straszexpect 06555,65534,65533 lstat ${n0} mode,uid,gid 61196948Straszexpect 0 unlink ${n0} 62196948Strasz 63196948Straszexpect 0 mkdir ${n0} 0755 64196948Straszexpect 0 prependacl ${n0} user:65534:write_owner::allow 65196948Straszexpect 0 chmod ${n0} 06555 66196948Straszexpect 06555 lstat ${n0} mode 67196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} 65534 65532 68196948Straszexpect 0555,65534,65532 lstat ${n0} mode,uid,gid 69196948Straszexpect 0 chmod ${n0} 06555 70196948Straszexpect 06555 lstat ${n0} mode 71196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 65533 72196948Straszexpect 0555,65534,65533 lstat ${n0} mode,uid,gid 73196948Straszexpect 0 chmod ${n0} 06555 74196948Straszexpect 06555 lstat ${n0} mode 75196948Straszexpect 0 -u 65534 -g 65533,65532 chown ${n0} -1 -1 76196948Straszexpect 06555,65534,65533 lstat ${n0} mode,uid,gid 77196948Straszexpect 0 rmdir ${n0} 78196948Strasz 79196948Straszcd ${cdir} 80196948Straszexpect 0 rmdir ${n2} 81