1188943Sthompsa#!/bin/sh
2188943Sthompsa# $FreeBSD: head/tools/regression/pjdfstest/tests/granular/00.t 211352 2010-08-15 21:24:17Z pjd $
3188943Sthompsa
4188943Sthompsadesc="NFSv4 granular permissions checking - WRITE_DATA vs APPEND_DATA on directories"
5188943Sthompsa
6188943Sthompsadir=`dirname $0`
7188943Sthompsa. ${dir}/../misc.sh
8188943Sthompsa
9188943Sthompsa[ "${os}:${fs}" = "FreeBSD:ZFS" ] || quick_exit
10188943Sthompsa
11188943Sthompsaecho "1..49"
12188943Sthompsa
13188943Sthompsan0=`namegen`
14188943Sthompsan1=`namegen`
15188943Sthompsan2=`namegen`
16188943Sthompsan3=`namegen`
17188943Sthompsa
18188943Sthompsaexpect 0 mkdir ${n2} 0755
19188943Sthompsaexpect 0 mkdir ${n3} 0777
20188943Sthompsacdir=`pwd`
21188943Sthompsacd ${n2}
22188943Sthompsa
23188943Sthompsa# Tests 2..7 - check out whether root user can do stuff.
24188943Sthompsa# Can create files?
25188943Sthompsaexpect 0 create ${n0} 0644
26188943Sthompsa
27188943Sthompsa# Can create symlinks?
28188943Sthompsaexpect 0 link ${n0} ${n1}
29188943Sthompsaexpect 0 unlink ${n1}
30188943Sthompsaexpect 0 unlink ${n0}
31188943Sthompsa
32188943Sthompsa# Can create directories?
33188943Sthompsaexpect 0 mkdir ${n0} 0755
34188943Sthompsaexpect 0 rmdir ${n0}
35188943Sthompsa
36188943Sthompsa# Check whether user 65534 is permitted to create and remove
37188943Sthompsa# files, but not subdirectories.
38expect 0 prependacl . user:65534:write_data::allow,user:65534:append_data::deny
39
40# Can create files?
41expect 0 -u 65534 -g 65534 create ${n0} 0644
42
43# Can create symlinks?
44expect 0 -u 65534 -g 65534 link ${n0} ${n1}
45expect 0 -u 65534 -g 65534 unlink ${n1}
46expect 0 -u 65534 -g 65534 unlink ${n0}
47
48# Can create directories?
49expect EACCES -u 65534 -g 65534 mkdir ${n0} 0755
50expect ENOENT -u 65534 -g 65534 rmdir ${n0}
51expect 0 mkdir ${n0} 0755
52expect 0 -u 65534 -g 65534 rmdir ${n0}
53
54# Can move files from other directory?
55expect 0 create ../${n3}/${n1} 0644
56expect 0 -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
57
58# Can move files from other directory overwriting existing files?
59expect 0 create ../${n3}/${n1} 0644
60expect 0 -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
61
62expect 0 -u 65534 -g 65534 unlink ${n0}
63
64# Can move directories from other directory?
65expect 0 mkdir ../${n3}/${n1} 0777
66expect EACCES -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
67
68# Can move directories from other directory overwriting existing directory?
69expect EACCES -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
70expect 0 -u 65534 -g 65534 rmdir ../${n3}/${n1}
71
72# Check whether user 65534 is permitted to create
73# subdirectories, but not files - and to remove neither of them.
74expect 0 prependacl . user:65534:write_data::deny,user:65534:append_data::allow
75
76# Can create files?
77expect EACCES -u 65534 -g 65534 create ${n0} 0644
78
79# Can create symlinks?
80expect 0 create ${n0} 0644
81expect EACCES -u 65534 -g 65534 link ${n0} ${n1}
82expect ENOENT -u 65534 -g 65534 unlink ${n1}
83expect EACCES -u 65534 -g 65534 unlink ${n0}
84expect 0 unlink ${n0}
85
86# Can create directories?
87expect 0 -u 65534 -g 65534 mkdir ${n0} 0755
88expect EACCES -u 65534 -g 65534 rmdir ${n0}
89expect 0 rmdir ${n0}
90
91# Can move files from other directory?
92expect 0 create ../${n3}/${n1} 0644
93expect EACCES -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
94
95# Can move files from other directory overwriting existing files?
96expect EACCES -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
97expect 0 -u 65534 -g 65534 unlink ../${n3}/${n1}
98
99# Can move directories from other directory?
100expect 0 mkdir ../${n3}/${n1} 0777
101expect 0 -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
102
103# Can move directories from other directory overwriting existing directory?
104expect 0 mkdir ../${n3}/${n1} 0777
105expect EACCES -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
106expect 0 prependacl . user:65534:delete_child::allow
107expect 0 -u 65534 -g 65534 rename ../${n3}/${n1} ${n0}
108expect 0 -u 65534 -g 65534 rmdir ${n0}
109
110cd ${cdir}
111expect 0 rmdir ${n2}
112expect 0 rmdir ${n3}
113