xref: /freebsd/tests/sys/acl/tools-nfs4.test (revision 10ff414c)
1# Copyright (c) 2008, 2009 Edward Tomasz Napierała <trasz@FreeBSD.org>
2#
3# Redistribution and use in source and binary forms, with or without
4# modification, are permitted provided that the following conditions
5# are met:
6# 1. Redistributions of source code must retain the above copyright
7#    notice, this list of conditions and the following disclaimer.
8# 2. Redistributions in binary form must reproduce the above copyright
9#    notice, this list of conditions and the following disclaimer in the
10#    documentation and/or other materials provided with the distribution.
11#
12# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22# SUCH DAMAGE.
23#
24# $FreeBSD$
25#
26
27# This is a tools-level test for NFSv4 ACL functionality.  Run it as root
28# using ACL-enabled kernel:
29#
30# /usr/src/tools/regression/acltools/run /usr/src/tools/regression/acltools/tools-nfs4.test
31#
32# WARNING: Creates files in unsafe way.
33
34$ whoami
35> root
36$ umask 022
37
38# Smoke test for getfacl(1).
39$ touch xxx
40$ getfacl xxx
41> # file: xxx
42> # owner: root
43> # group: wheel
44>             owner@:--x-----------:-------:deny
45>             owner@:rw-p---A-W-Co-:-------:allow
46>             group@:-wxp----------:-------:deny
47>             group@:r-------------:-------:allow
48>          everyone@:-wxp---A-W-Co-:-------:deny
49>          everyone@:r-----a-R-c--s:-------:allow
50
51$ getfacl -q xxx
52>             owner@:--x-----------:-------:deny
53>             owner@:rw-p---A-W-Co-:-------:allow
54>             group@:-wxp----------:-------:deny
55>             group@:r-------------:-------:allow
56>          everyone@:-wxp---A-W-Co-:-------:deny
57>          everyone@:r-----a-R-c--s:-------:allow
58
59# Check verbose mode formatting.
60$ getfacl -v xxx
61> # file: xxx
62> # owner: root
63> # group: wheel
64>             owner@:execute::deny
65>             owner@:read_data/write_data/append_data/write_attributes/write_xattr/write_acl/write_owner::allow
66>             group@:write_data/execute/append_data::deny
67>             group@:read_data::allow
68>          everyone@:write_data/execute/append_data/write_attributes/write_xattr/write_acl/write_owner::deny
69>          everyone@:read_data/read_attributes/read_xattr/read_acl/synchronize::allow
70
71# Test setfacl -a.
72$ setfacl -a2 u:0:write_acl:allow,g:1:read_acl:deny xxx
73$ getfacl -n xxx
74> # file: xxx
75> # owner: root
76> # group: wheel
77>             owner@:--x-----------:-------:deny
78>             owner@:rw-p---A-W-Co-:-------:allow
79>             user:0:-----------C--:-------:allow
80>            group:1:----------c---:-------:deny
81>             group@:-wxp----------:-------:deny
82>             group@:r-------------:-------:allow
83>          everyone@:-wxp---A-W-Co-:-------:deny
84>          everyone@:r-----a-R-c--s:-------:allow
85
86# Test user and group name resolving.
87$ rm xxx
88$ touch xxx
89$ setfacl -a2 u:root:write_acl:allow,g:daemon:read_acl:deny xxx
90$ getfacl xxx
91> # file: xxx
92> # owner: root
93> # group: wheel
94>             owner@:--x-----------:-------:deny
95>             owner@:rw-p---A-W-Co-:-------:allow
96>          user:root:-----------C--:-------:allow
97>       group:daemon:----------c---:-------:deny
98>             group@:-wxp----------:-------:deny
99>             group@:r-------------:-------:allow
100>          everyone@:-wxp---A-W-Co-:-------:deny
101>          everyone@:r-----a-R-c--s:-------:allow
102
103# Check whether ls correctly marks files with "+".
104$ ls -l xxx | cut -d' ' -f1
105> -rw-r--r--+
106
107# Test removing entries by number.
108$ setfacl -x 4 xxx
109$ setfacl -x 4 xxx
110$ getfacl -n xxx
111> # file: xxx
112> # owner: root
113> # group: wheel
114>             owner@:--x-----------:-------:deny
115>             owner@:rw-p---A-W-Co-:-------:allow
116>             user:0:-----------C--:-------:allow
117>            group:1:----------c---:-------:deny
118>          everyone@:-wxp---A-W-Co-:-------:deny
119>          everyone@:r-----a-R-c--s:-------:allow
120
121# Test setfacl -m.
122$ setfacl -a0 everyone@:rwx:deny xxx
123$ setfacl -a0 everyone@:rwx:deny xxx
124$ setfacl -a0 everyone@:rwx:deny xxx
125$ setfacl -m everyone@::deny xxx
126$ getfacl -n xxx
127> # file: xxx
128> # owner: root
129> # group: wheel
130>          everyone@:--------------:-------:deny
131>          everyone@:--------------:-------:deny
132>          everyone@:--------------:-------:deny
133>             owner@:--x-----------:-------:deny
134>             owner@:rw-p---A-W-Co-:-------:allow
135>             user:0:-----------C--:-------:allow
136>            group:1:----------c---:-------:deny
137>          everyone@:--------------:-------:deny
138>          everyone@:r-----a-R-c--s:-------:allow
139
140# Test getfacl -i.
141$ getfacl -i xxx
142> # file: xxx
143> # owner: root
144> # group: wheel
145>          everyone@:--------------:-------:deny
146>          everyone@:--------------:-------:deny
147>          everyone@:--------------:-------:deny
148>             owner@:--x-----------:-------:deny
149>             owner@:rw-p---A-W-Co-:-------:allow
150>          user:root:-----------C--:-------:allow:0
151>       group:daemon:----------c---:-------:deny:1
152>          everyone@:--------------:-------:deny
153>          everyone@:r-----a-R-c--s:-------:allow
154
155# Make sure cp without any flags does not copy copy the ACL.
156$ cp xxx yyy
157$ ls -l yyy | cut -d' ' -f1
158> -rw-r--r--
159
160# Make sure it does with the "-p" flag.
161$ rm yyy
162$ cp -p xxx yyy
163$ getfacl -n yyy
164> # file: yyy
165> # owner: root
166> # group: wheel
167>          everyone@:--------------:-------:deny
168>          everyone@:--------------:-------:deny
169>          everyone@:--------------:-------:deny
170>             owner@:--x-----------:-------:deny
171>             owner@:rw-p---A-W-Co-:-------:allow
172>             user:0:-----------C--:-------:allow
173>            group:1:----------c---:-------:deny
174>          everyone@:--------------:-------:deny
175>          everyone@:r-----a-R-c--s:-------:allow
176
177$ rm yyy
178
179# Test removing entries by...  by example?
180$ setfacl -x everyone@::deny xxx
181$ getfacl -n xxx
182> # file: xxx
183> # owner: root
184> # group: wheel
185>             owner@:--x-----------:-------:deny
186>             owner@:rw-p---A-W-Co-:-------:allow
187>             user:0:-----------C--:-------:allow
188>            group:1:----------c---:-------:deny
189>          everyone@:r-----a-R-c--s:-------:allow
190
191# Test setfacl -b.
192$ setfacl -b xxx
193$ getfacl -n xxx
194> # file: xxx
195> # owner: root
196> # group: wheel
197>             owner@:--x-----------:-------:deny
198>             owner@:rw-p---A-W-Co-:-------:allow
199>             group@:-wxp----------:-------:deny
200>             group@:r-------------:-------:allow
201>          everyone@:-wxp---A-W-Co-:-------:deny
202>          everyone@:r-----a-R-c--s:-------:allow
203
204$ ls -l xxx | cut -d' ' -f1
205> -rw-r--r--
206
207# Check setfacl(1) and getfacl(1) with multiple files.
208$ touch xxx yyy zzz
209
210$ ls -l xxx yyy zzz | cut -d' ' -f1
211> -rw-r--r--
212> -rw-r--r--
213> -rw-r--r--
214
215$ setfacl -m u:42:x:allow,g:43:w:allow nnn xxx yyy zzz
216> setfacl: nnn: acl_get_file() failed: No such file or directory
217
218$ ls -l nnn xxx yyy zzz | cut -d' ' -f1
219> ls: nnn: No such file or directory
220> -rw-r--r--+
221> -rw-r--r--+
222> -rw-r--r--+
223
224$ getfacl -nq nnn xxx yyy zzz
225> getfacl: nnn: stat() failed: No such file or directory
226>            user:42:--x-----------:-------:allow
227>           group:43:-w------------:-------:allow
228>             owner@:--x-----------:-------:deny
229>             owner@:rw-p---A-W-Co-:-------:allow
230>             group@:-wxp----------:-------:deny
231>             group@:r-------------:-------:allow
232>          everyone@:-wxp---A-W-Co-:-------:deny
233>          everyone@:r-----a-R-c--s:-------:allow
234>
235>            user:42:--x-----------:-------:allow
236>           group:43:-w------------:-------:allow
237>             owner@:--x-----------:-------:deny
238>             owner@:rw-p---A-W-Co-:-------:allow
239>             group@:-wxp----------:-------:deny
240>             group@:r-------------:-------:allow
241>          everyone@:-wxp---A-W-Co-:-------:deny
242>          everyone@:r-----a-R-c--s:-------:allow
243>
244>            user:42:--x-----------:-------:allow
245>           group:43:-w------------:-------:allow
246>             owner@:--x-----------:-------:deny
247>             owner@:rw-p---A-W-Co-:-------:allow
248>             group@:-wxp----------:-------:deny
249>             group@:r-------------:-------:allow
250>          everyone@:-wxp---A-W-Co-:-------:deny
251>          everyone@:r-----a-R-c--s:-------:allow
252
253$ setfacl -b nnn xxx yyy zzz
254> setfacl: nnn: acl_get_file() failed: No such file or directory
255
256$ ls -l nnn xxx yyy zzz | cut -d' ' -f1
257> ls: nnn: No such file or directory
258> -rw-r--r--
259> -rw-r--r--
260> -rw-r--r--
261
262$ rm xxx yyy zzz
263
264# Test applying mode to an ACL.
265$ touch xxx
266$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow -x everyone@::allow xxx
267$ chmod 600 xxx
268$ getfacl -n xxx
269> # file: xxx
270> # owner: root
271> # group: wheel
272>            user:42:r-------------:-------:deny
273>            user:42:r-------------:-------:allow
274>            user:43:-w------------:-------:deny
275>            user:43:-w------------:-------:allow
276>            user:44:--x-----------:-------:deny
277>            user:44:--x-----------:-------:allow
278>             owner@:--------------:-------:deny
279>             owner@:-------A-W-Co-:-------:allow
280>             group@:--------------:-------:deny
281>             group@:--------------:-------:allow
282>          everyone@:-------A-W-Co-:-------:deny
283>             owner@:--x-----------:-------:deny
284>             owner@:rw-p---A-W-Co-:-------:allow
285>             group@:rwxp----------:-------:deny
286>             group@:--------------:-------:allow
287>          everyone@:rwxp---A-W-Co-:-------:deny
288>          everyone@:------a-R-c--s:-------:allow
289$ ls -l xxx | cut -d' ' -f1
290> -rw-------+
291
292$ rm xxx
293$ touch xxx
294$ chown 42 xxx
295$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx
296$ chmod 600 xxx
297$ getfacl -n xxx
298> # file: xxx
299> # owner: 42
300> # group: wheel
301>            user:42:--------------:-------:deny
302>            user:42:r-------------:-------:allow
303>            user:43:-w------------:-------:deny
304>            user:43:-w------------:-------:allow
305>            user:44:--x-----------:-------:deny
306>            user:44:--x-----------:-------:allow
307>             owner@:--x-----------:-------:deny
308>             owner@:rw-p---A-W-Co-:-------:allow
309>             group@:rwxp----------:-------:deny
310>             group@:--------------:-------:allow
311>          everyone@:rwxp---A-W-Co-:-------:deny
312>          everyone@:------a-R-c--s:-------:allow
313$ ls -l xxx | cut -d' ' -f1
314> -rw-------+
315
316$ rm xxx
317$ touch xxx
318$ chown 43 xxx
319$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx
320$ chmod 124 xxx
321$ getfacl -n xxx
322> # file: xxx
323> # owner: 43
324> # group: wheel
325>            user:42:r-------------:-------:deny
326>            user:42:r-------------:-------:allow
327>            user:43:-w------------:-------:deny
328>            user:43:-w------------:-------:allow
329>            user:44:--x-----------:-------:deny
330>            user:44:--x-----------:-------:allow
331>             owner@:rw-p----------:-------:deny
332>             owner@:--x----A-W-Co-:-------:allow
333>             group@:r-x-----------:-------:deny
334>             group@:-w-p----------:-------:allow
335>          everyone@:-wxp---A-W-Co-:-------:deny
336>          everyone@:r-----a-R-c--s:-------:allow
337$ ls -l xxx | cut -d' ' -f1
338> ---x-w-r--+
339
340$ rm xxx
341$ touch xxx
342$ chown 43 xxx
343$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx
344$ chmod 412 xxx
345$ getfacl -n xxx
346> # file: xxx
347> # owner: 43
348> # group: wheel
349>            user:42:r-------------:-------:deny
350>            user:42:r-------------:-------:allow
351>            user:43:-w------------:-------:deny
352>            user:43:-w------------:-------:allow
353>            user:44:--------------:-------:deny
354>            user:44:--x-----------:-------:allow
355>             owner@:-wxp----------:-------:deny
356>             owner@:r------A-W-Co-:-------:allow
357>             group@:rw-p----------:-------:deny
358>             group@:--x-----------:-------:allow
359>          everyone@:r-x----A-W-Co-:-------:deny
360>          everyone@:-w-p--a-R-c--s:-------:allow
361$ ls -l xxx | cut -d' ' -f1
362> -r----x-w-+
363
364$ mkdir ddd
365$ setfacl -a0 group:44:rwapd:allow ddd
366$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd
367$ setfacl -a0 user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd
368$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd
369$ getfacl -n ddd
370> # file: ddd
371> # owner: root
372> # group: wheel
373>            user:42:r-x-----------:f-i----:allow
374>           group:42:-w--D---------:-d-----:allow
375>           group:43:-w--D---------:-d-----:deny
376>             group@:-----da-------:-------:allow
377>           group:44:rw-p-da-------:-------:allow
378>             owner@:--------------:-------:deny
379>             owner@:rwxp---A-W-Co-:-------:allow
380>             group@:-w-p----------:-------:deny
381>             group@:r-x-----------:-------:allow
382>          everyone@:-w-p---A-W-Co-:-------:deny
383>          everyone@:-w-p--a-R-c--s:f-i----:allow
384$ chmod 777 ddd
385$ getfacl -n ddd
386> # file: ddd
387> # owner: root
388> # group: wheel
389>            user:42:r-x-----------:f-i----:allow
390>           group:42:-w--D---------:-di----:allow
391>           group:42:--------------:-------:deny
392>           group:42:-w--D---------:-------:allow
393>           group:43:-w--D---------:-di----:deny
394>           group:43:-w--D---------:-------:deny
395>             group@:-----da-------:-------:allow
396>           group:44:--------------:-------:deny
397>           group:44:rw-p-da-------:-------:allow
398>             owner@:--------------:-------:deny
399>             owner@:-------A-W-Co-:-------:allow
400>             group@:--------------:-------:deny
401>             group@:--------------:-------:allow
402>          everyone@:-------A-W-Co-:-------:deny
403>          everyone@:-w-p--a-R-c--s:f-i----:allow
404>             owner@:--------------:-------:deny
405>             owner@:rwxp---A-W-Co-:-------:allow
406>             group@:--------------:-------:deny
407>             group@:rwxp----------:-------:allow
408>          everyone@:-------A-W-Co-:-------:deny
409>          everyone@:rwxp--a-R-c--s:-------:allow
410
411$ rmdir ddd
412$ mkdir ddd
413$ setfacl -a0 group:44:rwapd:allow ddd
414$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd
415$ setfacl -a0 user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd
416$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd
417$ chmod 124 ddd
418$ getfacl -n ddd
419> # file: ddd
420> # owner: root
421> # group: wheel
422>            user:42:r-x-----------:f-i----:allow
423>           group:42:-w--D---------:-di----:allow
424>           group:42:--------------:-------:deny
425>           group:42:----D---------:-------:allow
426>           group:43:-w--D---------:-di----:deny
427>           group:43:-w--D---------:-------:deny
428>             group@:-----da-------:-------:allow
429>           group:44:r-------------:-------:deny
430>           group:44:r----da-------:-------:allow
431>             owner@:--------------:-------:deny
432>             owner@:-------A-W-Co-:-------:allow
433>             group@:--------------:-------:deny
434>             group@:--------------:-------:allow
435>          everyone@:-------A-W-Co-:-------:deny
436>          everyone@:-w-p--a-R-c--s:f-i----:allow
437>             owner@:rw-p----------:-------:deny
438>             owner@:--x----A-W-Co-:-------:allow
439>             group@:r-x-----------:-------:deny
440>             group@:-w-p----------:-------:allow
441>          everyone@:-wxp---A-W-Co-:-------:deny
442>          everyone@:r-----a-R-c--s:-------:allow
443
444$ rmdir ddd
445$ mkdir ddd
446$ setfacl -a0 group:44:rwapd:allow ddd
447$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd
448$ setfacl -a0 user:42:rx:allow,user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd
449$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd
450$ chmod 412 ddd
451$ getfacl -n ddd
452> # file: ddd
453> # owner: root
454> # group: wheel
455>            user:42:r-------------:-------:deny
456>            user:42:r-x-----------:-------:allow
457>            user:42:r-x-----------:f-i----:allow
458>           group:42:-w--D---------:-di----:allow
459>           group:42:-w------------:-------:deny
460>           group:42:-w--D---------:-------:allow
461>           group:43:-w--D---------:-di----:deny
462>           group:43:-w--D---------:-------:deny
463>             group@:-----da-------:-------:allow
464>           group:44:rw-p----------:-------:deny
465>           group:44:rw-p-da-------:-------:allow
466>             owner@:--------------:-------:deny
467>             owner@:-------A-W-Co-:-------:allow
468>             group@:--------------:-------:deny
469>             group@:--------------:-------:allow
470>          everyone@:-------A-W-Co-:-------:deny
471>          everyone@:-w-p--a-R-c--s:f-i----:allow
472>             owner@:-wxp----------:-------:deny
473>             owner@:r------A-W-Co-:-------:allow
474>             group@:rw-p----------:-------:deny
475>             group@:--x-----------:-------:allow
476>          everyone@:r-x----A-W-Co-:-------:deny
477>          everyone@:-w-p--a-R-c--s:-------:allow
478
479$ rmdir ddd
480$ mkdir ddd
481$ setfacl -a0 group:44:rwapd:allow ddd
482$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd
483$ setfacl -a0 user:42:rx:allow,user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd
484$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd
485$ chown 42 ddd
486$ chmod 412 ddd
487$ getfacl -n ddd
488> # file: ddd
489> # owner: 42
490> # group: wheel
491>            user:42:--x-----------:-------:deny
492>            user:42:r-x-----------:-------:allow
493>            user:42:r-x-----------:f-i----:allow
494>           group:42:-w--D---------:-di----:allow
495>           group:42:-w------------:-------:deny
496>           group:42:-w--D---------:-------:allow
497>           group:43:-w--D---------:-di----:deny
498>           group:43:-w--D---------:-------:deny
499>             group@:-----da-------:-------:allow
500>           group:44:rw-p----------:-------:deny
501>           group:44:rw-p-da-------:-------:allow
502>             owner@:--------------:-------:deny
503>             owner@:-------A-W-Co-:-------:allow
504>             group@:--------------:-------:deny
505>             group@:--------------:-------:allow
506>          everyone@:-------A-W-Co-:-------:deny
507>          everyone@:-w-p--a-R-c--s:f-i----:allow
508>             owner@:-wxp----------:-------:deny
509>             owner@:r------A-W-Co-:-------:allow
510>             group@:rw-p----------:-------:deny
511>             group@:--x-----------:-------:allow
512>          everyone@:r-x----A-W-Co-:-------:deny
513>          everyone@:-w-p--a-R-c--s:-------:allow
514
515# Test applying ACL to mode.
516$ rmdir ddd
517$ mkdir ddd
518$ setfacl -a0 u:42:rwx:fi:allow ddd
519$ ls -ld ddd | cut -d' ' -f1
520> drwxr-xr-x+
521
522$ rmdir ddd
523$ mkdir ddd
524$ chmod 0 ddd
525$ setfacl -a0 owner@:r:allow,group@:w:deny,group@:wx:allow ddd
526$ ls -ld ddd | cut -d' ' -f1
527> dr----x---+
528
529$ rmdir ddd
530$ mkdir ddd
531$ chmod 0 ddd
532$ setfacl -a0 owner@:r:allow,group@:w:fi:deny,group@:wx:allow ddd
533$ ls -ld ddd | cut -d' ' -f1
534> dr---wx---+
535
536$ rmdir ddd
537$ mkdir ddd
538$ chmod 0 ddd
539$ setfacl -a0 owner@:r:allow,group:43:w:deny,group:43:wx:allow ddd
540$ ls -ld ddd | cut -d' ' -f1
541> dr--------+
542
543$ rmdir ddd
544$ mkdir ddd
545$ chmod 0 ddd
546$ setfacl -a0 owner@:r:allow,user:43:w:deny,user:43:wx:allow ddd
547$ ls -ld ddd | cut -d' ' -f1
548> dr--------+
549
550# Test inheritance.
551$ rmdir ddd
552$ mkdir ddd
553$ setfacl -a0 group:43:write_data/write_acl:fin:deny,u:43:rwxp:allow ddd
554$ setfacl -a0 user:42:rx:fi:allow,group:42:write_data/delete_child:dn:deny ddd
555$ setfacl -a0 user:42:write_acl/write_owner:fi:allow ddd
556$ setfacl -a0 group:41:read_data/read_attributes:dni:allow ddd
557$ setfacl -a0 user:41:write_data/write_attributes:fn:allow ddd
558$ getfacl -qn ddd
559>            user:41:-w-----A------:f--n---:allow
560>           group:41:r-----a-------:-din---:allow
561>            user:42:-----------Co-:f-i----:allow
562>            user:42:r-x-----------:f-i----:allow
563>           group:42:-w--D---------:-d-n---:deny
564>           group:43:-w---------C--:f-in---:deny
565>            user:43:rwxp----------:-------:allow
566>             owner@:--------------:-------:deny
567>             owner@:rwxp---A-W-Co-:-------:allow
568>             group@:-w-p----------:-------:deny
569>             group@:r-x-----------:-------:allow
570>          everyone@:-w-p---A-W-Co-:-------:deny
571>          everyone@:r-x---a-R-c--s:-------:allow
572
573$ cd ddd
574$ touch xxx
575$ getfacl -qn xxx
576>            user:41:-w------------:-------:deny
577>            user:41:-w-----A------:-------:allow
578>            user:42:--------------:-------:deny
579>            user:42:--------------:-------:allow
580>            user:42:--x-----------:-------:deny
581>            user:42:r-x-----------:-------:allow
582>           group:43:-w---------C--:-------:deny
583>             owner@:--x-----------:-------:deny
584>             owner@:rw-p---A-W-Co-:-------:allow
585>             group@:-wxp----------:-------:deny
586>             group@:r-------------:-------:allow
587>          everyone@:-wxp---A-W-Co-:-------:deny
588>          everyone@:r-----a-R-c--s:-------:allow
589
590$ rm xxx
591$ umask 077
592$ touch xxx
593$ getfacl -qn xxx
594>            user:41:-w------------:-------:deny
595>            user:41:-w-----A------:-------:allow
596>            user:42:--------------:-------:deny
597>            user:42:--------------:-------:allow
598>            user:42:r-x-----------:-------:deny
599>            user:42:r-x-----------:-------:allow
600>           group:43:-w---------C--:-------:deny
601>             owner@:--x-----------:-------:deny
602>             owner@:rw-p---A-W-Co-:-------:allow
603>             group@:rwxp----------:-------:deny
604>             group@:--------------:-------:allow
605>          everyone@:rwxp---A-W-Co-:-------:deny
606>          everyone@:------a-R-c--s:-------:allow
607
608$ rm xxx
609$ umask 770
610$ touch xxx
611$ getfacl -qn xxx
612>            user:41:-w------------:-------:deny
613>            user:41:-w-----A------:-------:allow
614>            user:42:--------------:-------:deny
615>            user:42:--------------:-------:allow
616>            user:42:r-x-----------:-------:deny
617>            user:42:r-x-----------:-------:allow
618>           group:43:-w---------C--:-------:deny
619>             owner@:rwxp----------:-------:deny
620>             owner@:-------A-W-Co-:-------:allow
621>             group@:rwxp----------:-------:deny
622>             group@:--------------:-------:allow
623>          everyone@:--x----A-W-Co-:-------:deny
624>          everyone@:rw-p--a-R-c--s:-------:allow
625
626$ rm xxx
627$ umask 707
628$ touch xxx
629$ getfacl -qn xxx
630>            user:41:--------------:-------:deny
631>            user:41:-w-----A------:-------:allow
632>            user:42:--------------:-------:deny
633>            user:42:--------------:-------:allow
634>            user:42:--x-----------:-------:deny
635>            user:42:r-x-----------:-------:allow
636>           group:43:-w---------C--:-------:deny
637>             owner@:rwxp----------:-------:deny
638>             owner@:-------A-W-Co-:-------:allow
639>             group@:--x-----------:-------:deny
640>             group@:rw-p----------:-------:allow
641>          everyone@:rwxp---A-W-Co-:-------:deny
642>          everyone@:------a-R-c--s:-------:allow
643
644$ umask 077
645$ mkdir yyy
646$ getfacl -qn yyy
647>           group:41:r-------------:-------:deny
648>           group:41:r-----a-------:-------:allow
649>            user:42:-----------Co-:f-i----:allow
650>            user:42:r-x-----------:f-i----:allow
651>           group:42:-w--D---------:-------:deny
652>             owner@:--------------:-------:deny
653>             owner@:rwxp---A-W-Co-:-------:allow
654>             group@:rwxp----------:-------:deny
655>             group@:--------------:-------:allow
656>          everyone@:rwxp---A-W-Co-:-------:deny
657>          everyone@:------a-R-c--s:-------:allow
658
659$ rmdir yyy
660$ umask 770
661$ mkdir yyy
662$ getfacl -qn yyy
663>           group:41:r-------------:-------:deny
664>           group:41:r-----a-------:-------:allow
665>            user:42:-----------Co-:f-i----:allow
666>            user:42:r-x-----------:f-i----:allow
667>           group:42:-w--D---------:-------:deny
668>             owner@:rwxp----------:-------:deny
669>             owner@:-------A-W-Co-:-------:allow
670>             group@:rwxp----------:-------:deny
671>             group@:--------------:-------:allow
672>          everyone@:-------A-W-Co-:-------:deny
673>          everyone@:rwxp--a-R-c--s:-------:allow
674
675$ rmdir yyy
676$ umask 707
677$ mkdir yyy
678$ getfacl -qn yyy
679>           group:41:--------------:-------:deny
680>           group:41:------a-------:-------:allow
681>            user:42:-----------Co-:f-i----:allow
682>            user:42:r-x-----------:f-i----:allow
683>           group:42:-w--D---------:-------:deny
684>             owner@:rwxp----------:-------:deny
685>             owner@:-------A-W-Co-:-------:allow
686>             group@:--------------:-------:deny
687>             group@:rwxp----------:-------:allow
688>          everyone@:rwxp---A-W-Co-:-------:deny
689>          everyone@:------a-R-c--s:-------:allow
690
691# There is some complication regarding how write_acl and write_owner flags
692# get inherited.  Make sure we got it right.
693$ setfacl -b .
694$ setfacl -a0 u:42:Co:f:allow .
695$ setfacl -a0 u:43:Co:d:allow .
696$ setfacl -a0 u:44:Co:fd:allow .
697$ setfacl -a0 u:45:Co:fi:allow .
698$ setfacl -a0 u:46:Co:di:allow .
699$ setfacl -a0 u:47:Co:fdi:allow .
700$ setfacl -a0 u:48:Co:fn:allow .
701$ setfacl -a0 u:49:Co:dn:allow .
702$ setfacl -a0 u:50:Co:fdn:allow .
703$ setfacl -a0 u:51:Co:fni:allow .
704$ setfacl -a0 u:52:Co:dni:allow .
705$ setfacl -a0 u:53:Co:fdni:allow .
706$ umask 022
707$ rm xxx
708$ touch xxx
709$ getfacl -nq xxx
710>            user:53:--------------:-------:deny
711>            user:53:--------------:-------:allow
712>            user:51:--------------:-------:deny
713>            user:51:--------------:-------:allow
714>            user:50:--------------:-------:deny
715>            user:50:--------------:-------:allow
716>            user:48:--------------:-------:deny
717>            user:48:--------------:-------:allow
718>            user:47:--------------:-------:deny
719>            user:47:--------------:-------:allow
720>            user:45:--------------:-------:deny
721>            user:45:--------------:-------:allow
722>            user:44:--------------:-------:deny
723>            user:44:--------------:-------:allow
724>            user:42:--------------:-------:deny
725>            user:42:--------------:-------:allow
726>             owner@:--x-----------:-------:deny
727>             owner@:rw-p---A-W-Co-:-------:allow
728>             group@:-wxp----------:-------:deny
729>             group@:r-------------:-------:allow
730>          everyone@:-wxp---A-W-Co-:-------:deny
731>          everyone@:r-----a-R-c--s:-------:allow
732
733$ rmdir yyy
734$ mkdir yyy
735$ getfacl -nq yyy
736>            user:53:--------------:-------:deny
737>            user:53:--------------:-------:allow
738>            user:52:--------------:-------:deny
739>            user:52:--------------:-------:allow
740>            user:50:--------------:-------:deny
741>            user:50:--------------:-------:allow
742>            user:49:--------------:-------:deny
743>            user:49:--------------:-------:allow
744>            user:47:-----------Co-:fdi----:allow
745>            user:47:--------------:-------:deny
746>            user:47:--------------:-------:allow
747>            user:46:-----------Co-:-di----:allow
748>            user:46:--------------:-------:deny
749>            user:46:--------------:-------:allow
750>            user:45:-----------Co-:f-i----:allow
751>            user:44:-----------Co-:fdi----:allow
752>            user:44:--------------:-------:deny
753>            user:44:--------------:-------:allow
754>            user:43:-----------Co-:-di----:allow
755>            user:43:--------------:-------:deny
756>            user:43:--------------:-------:allow
757>            user:42:-----------Co-:f-i----:allow
758>             owner@:--------------:-------:deny
759>             owner@:rwxp---A-W-Co-:-------:allow
760>             group@:-w-p----------:-------:deny
761>             group@:r-x-----------:-------:allow
762>          everyone@:-w-p---A-W-Co-:-------:deny
763>          everyone@:r-x---a-R-c--s:-------:allow
764
765$ setfacl -b .
766$ setfacl -a0 u:42:Co:f:deny .
767$ setfacl -a0 u:43:Co:d:deny .
768$ setfacl -a0 u:44:Co:fd:deny .
769$ setfacl -a0 u:45:Co:fi:deny .
770$ setfacl -a0 u:46:Co:di:deny .
771$ setfacl -a0 u:47:Co:fdi:deny .
772$ setfacl -a0 u:48:Co:fn:deny .
773$ setfacl -a0 u:49:Co:dn:deny .
774$ setfacl -a0 u:50:Co:fdn:deny .
775$ setfacl -a0 u:51:Co:fni:deny .
776$ setfacl -a0 u:52:Co:dni:deny .
777$ setfacl -a0 u:53:Co:fdni:deny .
778$ umask 022
779$ rm xxx
780$ touch xxx
781$ getfacl -nq xxx
782>            user:53:-----------Co-:-------:deny
783>            user:51:-----------Co-:-------:deny
784>            user:50:-----------Co-:-------:deny
785>            user:48:-----------Co-:-------:deny
786>            user:47:-----------Co-:-------:deny
787>            user:45:-----------Co-:-------:deny
788>            user:44:-----------Co-:-------:deny
789>            user:42:-----------Co-:-------:deny
790>             owner@:--x-----------:-------:deny
791>             owner@:rw-p---A-W-Co-:-------:allow
792>             group@:-wxp----------:-------:deny
793>             group@:r-------------:-------:allow
794>          everyone@:-wxp---A-W-Co-:-------:deny
795>          everyone@:r-----a-R-c--s:-------:allow
796
797$ rmdir yyy
798$ mkdir yyy
799$ getfacl -nq yyy
800>            user:53:-----------Co-:-------:deny
801>            user:52:-----------Co-:-------:deny
802>            user:50:-----------Co-:-------:deny
803>            user:49:-----------Co-:-------:deny
804>            user:47:-----------Co-:fdi----:deny
805>            user:47:-----------Co-:-------:deny
806>            user:46:-----------Co-:-di----:deny
807>            user:46:-----------Co-:-------:deny
808>            user:45:-----------Co-:f-i----:deny
809>            user:44:-----------Co-:fdi----:deny
810>            user:44:-----------Co-:-------:deny
811>            user:43:-----------Co-:-di----:deny
812>            user:43:-----------Co-:-------:deny
813>            user:42:-----------Co-:f-i----:deny
814>             owner@:--------------:-------:deny
815>             owner@:rwxp---A-W-Co-:-------:allow
816>             group@:-w-p----------:-------:deny
817>             group@:r-x-----------:-------:allow
818>          everyone@:-w-p---A-W-Co-:-------:deny
819>          everyone@:r-x---a-R-c--s:-------:allow
820
821$ rmdir yyy
822$ rm xxx
823$ cd ..
824$ rmdir ddd
825$ rm xxx
826
827# Test basic recursive setting of ACLs.
828$ mkdir ddd
829$ touch ddd/xxx
830$ mkdir ddd/eee
831$ touch ddd/eee/yyy
832$ setfacl -R -m owner@:full_set:f:allow,group@:full_set::allow,everyone@:full_set::allow ddd
833$ getfacl -q ddd
834>             owner@:--------------:-------:deny
835>             owner@:rwxpDdaARWcCos:f------:allow
836>             group@:-w-p----------:-------:deny
837>             group@:rwxpDdaARWcCos:-------:allow
838>          everyone@:-w-p---A-W-Co-:-------:deny
839>          everyone@:rwxpDdaARWcCos:-------:allow
840$ getfacl -q ddd/xxx
841>             owner@:--x-----------:-------:deny
842>             owner@:rwxpDdaARWcCos:-------:allow
843>             group@:-wxp----------:-------:deny
844>             group@:rwxpDdaARWcCos:-------:allow
845>          everyone@:-wxp---A-W-Co-:-------:deny
846>          everyone@:rwxpDdaARWcCos:-------:allow
847$ getfacl -q ddd/eee
848>             owner@:--------------:-------:deny
849>             owner@:rwxpDdaARWcCos:f------:allow
850>             group@:-w-p----------:-------:deny
851>             group@:rwxpDdaARWcCos:-------:allow
852>          everyone@:-w-p---A-W-Co-:-------:deny
853>          everyone@:rwxpDdaARWcCos:-------:allow
854$ getfacl -q ddd/eee/yyy
855>             owner@:--x-----------:-------:deny
856>             owner@:rwxpDdaARWcCos:-------:allow
857>             group@:-wxp----------:-------:deny
858>             group@:rwxpDdaARWcCos:-------:allow
859>          everyone@:-wxp---A-W-Co-:-------:deny
860>          everyone@:rwxpDdaARWcCos:-------:allow
861
862$ rm -r ddd
863