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