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