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 with PSARC/2010/029 27# semantics. Run it as root using ACL-enabled kernel: 28# 29# /usr/src/tools/regression/acltools/run /usr/src/tools/regression/acltools/tools-nfs4-psarc.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@:rw-p--aARWcCos:-------:allow 44> group@:r-----a-R-c--s:-------:allow 45> everyone@:r-----a-R-c--s:-------:allow 46 47$ getfacl -q xxx 48> owner@:rw-p--aARWcCos:-------:allow 49> group@:r-----a-R-c--s:-------:allow 50> everyone@:r-----a-R-c--s:-------:allow 51 52# Check verbose mode formatting. 53$ getfacl -v xxx 54> # file: xxx 55> # owner: root 56> # group: wheel 57> owner@:read_data/write_data/append_data/read_attributes/write_attributes/read_xattr/write_xattr/read_acl/write_acl/write_owner/synchronize::allow 58> group@:read_data/read_attributes/read_xattr/read_acl/synchronize::allow 59> everyone@:read_data/read_attributes/read_xattr/read_acl/synchronize::allow 60 61# Test setfacl -a. 62$ setfacl -a2 u:0:write_acl:allow,g:1:read_acl:deny xxx 63$ getfacl -n xxx 64> # file: xxx 65> # owner: root 66> # group: wheel 67> owner@:rw-p--aARWcCos:-------:allow 68> group@:r-----a-R-c--s:-------:allow 69> user:0:-----------C--:-------:allow 70> group:1:----------c---:-------:deny 71> everyone@:r-----a-R-c--s:-------:allow 72 73# Test user and group name resolving. 74$ rm xxx 75$ touch xxx 76$ setfacl -a2 u:root:write_acl:allow,g:daemon:read_acl:deny xxx 77$ getfacl xxx 78> # file: xxx 79> # owner: root 80> # group: wheel 81> owner@:rw-p--aARWcCos:-------:allow 82> group@:r-----a-R-c--s:-------:allow 83> user:root:-----------C--:-------:allow 84> group:daemon:----------c---:-------:deny 85> everyone@:r-----a-R-c--s:-------:allow 86 87# Check whether ls correctly marks files with "+". 88$ ls -l xxx | cut -d' ' -f1 89> -rw-r--r--+ 90 91# Test removing entries by number. 92$ setfacl -x 1 xxx 93$ getfacl -n xxx 94> # file: xxx 95> # owner: root 96> # group: wheel 97> owner@:rw-p--aARWcCos:-------:allow 98> user:0:-----------C--:-------:allow 99> group:1:----------c---:-------:deny 100> everyone@:r-----a-R-c--s:-------:allow 101 102# Test setfacl -m. 103$ setfacl -a0 everyone@:rwx:deny xxx 104$ setfacl -a0 everyone@:rwx:deny xxx 105$ setfacl -a0 everyone@:rwx:deny xxx 106$ setfacl -m everyone@::deny xxx 107$ getfacl -n xxx 108> # file: xxx 109> # owner: root 110> # group: wheel 111> everyone@:--------------:-------:deny 112> everyone@:--------------:-------:deny 113> everyone@:--------------:-------:deny 114> owner@:rw-p--aARWcCos:-------:allow 115> user:0:-----------C--:-------:allow 116> group:1:----------c---:-------:deny 117> everyone@:r-----a-R-c--s:-------:allow 118 119# Test getfacl -i. 120$ getfacl -i xxx 121> # file: xxx 122> # owner: root 123> # group: wheel 124> everyone@:--------------:-------:deny 125> everyone@:--------------:-------:deny 126> everyone@:--------------:-------:deny 127> owner@:rw-p--aARWcCos:-------:allow 128> user:root:-----------C--:-------:allow:0 129> group:daemon:----------c---:-------:deny:1 130> everyone@:r-----a-R-c--s:-------:allow 131 132# Make sure cp without any flags does not copy copy the ACL. 133$ cp xxx yyy 134$ ls -l yyy | cut -d' ' -f1 135> -rw-r--r-- 136 137# Make sure it does with the "-p" flag. 138$ rm yyy 139$ cp -p xxx yyy 140$ getfacl -n yyy 141> # file: yyy 142> # owner: root 143> # group: wheel 144> everyone@:--------------:-------:deny 145> everyone@:--------------:-------:deny 146> everyone@:--------------:-------:deny 147> owner@:rw-p--aARWcCos:-------:allow 148> user:0:-----------C--:-------:allow 149> group:1:----------c---:-------:deny 150> everyone@:r-----a-R-c--s:-------:allow 151 152$ rm yyy 153 154# Test removing entries by... by example? 155$ setfacl -x everyone@::deny xxx 156$ getfacl -n xxx 157> # file: xxx 158> # owner: root 159> # group: wheel 160> owner@:rw-p--aARWcCos:-------:allow 161> user:0:-----------C--:-------:allow 162> group:1:----------c---:-------:deny 163> everyone@:r-----a-R-c--s:-------:allow 164 165# Test setfacl -b. 166$ setfacl -b xxx 167$ getfacl -n xxx 168> # file: xxx 169> # owner: root 170> # group: wheel 171> owner@:rw-p--aARWcCos:-------:allow 172> group@:r-----a-R-c--s:-------:allow 173> everyone@:r-----a-R-c--s:-------:allow 174 175$ ls -l xxx | cut -d' ' -f1 176> -rw-r--r-- 177 178# Check setfacl(1) and getfacl(1) with multiple files. 179$ touch xxx yyy zzz 180 181$ ls -l xxx yyy zzz | cut -d' ' -f1 182> -rw-r--r-- 183> -rw-r--r-- 184> -rw-r--r-- 185 186$ setfacl -m u:42:x:allow,g:43:w:allow nnn xxx yyy zzz 187> setfacl: nnn: acl_get_file() failed: No such file or directory 188 189$ ls -l nnn xxx yyy zzz | cut -d' ' -f1 190> ls: nnn: No such file or directory 191> -rw-r--r--+ 192> -rw-r--r--+ 193> -rw-r--r--+ 194 195$ getfacl -nq nnn xxx yyy zzz 196> getfacl: nnn: stat() failed: No such file or directory 197> user:42:--x-----------:-------:allow 198> group:43:-w------------:-------:allow 199> owner@:rw-p--aARWcCos:-------:allow 200> group@:r-----a-R-c--s:-------:allow 201> everyone@:r-----a-R-c--s:-------:allow 202> 203> user:42:--x-----------:-------:allow 204> group:43:-w------------:-------:allow 205> owner@:rw-p--aARWcCos:-------:allow 206> group@:r-----a-R-c--s:-------:allow 207> everyone@:r-----a-R-c--s:-------:allow 208> 209> user:42:--x-----------:-------:allow 210> group:43:-w------------:-------:allow 211> owner@:rw-p--aARWcCos:-------:allow 212> group@:r-----a-R-c--s:-------:allow 213> everyone@:r-----a-R-c--s:-------:allow 214 215$ setfacl -b 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$ rm xxx yyy zzz 225 226# Test applying mode to an ACL. 227$ touch xxx 228$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow -x everyone@::allow xxx 229$ chmod 600 xxx 230$ getfacl -n xxx 231> # file: xxx 232> # owner: root 233> # group: wheel 234> owner@:rw-p--aARWcCos:-------:allow 235> group@:------a-R-c--s:-------:allow 236> everyone@:------a-R-c--s:-------:allow 237 238$ ls -l xxx | cut -d' ' -f1 239> -rw------- 240 241$ rm xxx 242$ touch xxx 243$ chown 42 xxx 244$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx 245$ chmod 600 xxx 246$ getfacl -n xxx 247> # file: xxx 248> # owner: 42 249> # group: wheel 250> owner@:rw-p--aARWcCos:-------:allow 251> group@:------a-R-c--s:-------:allow 252> everyone@:------a-R-c--s:-------:allow 253$ ls -l xxx | cut -d' ' -f1 254> -rw------- 255 256$ rm xxx 257$ touch xxx 258$ chown 43 xxx 259$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx 260$ chmod 124 xxx 261$ getfacl -n xxx 262> # file: xxx 263> # owner: 43 264> # group: wheel 265> owner@:rw-p----------:-------:deny 266> group@:r-------------:-------:deny 267> owner@:--x---aARWcCos:-------:allow 268> group@:-w-p--a-R-c--s:-------:allow 269> everyone@:r-----a-R-c--s:-------:allow 270$ ls -l xxx | cut -d' ' -f1 271> ---x-w-r-- 272 273$ rm xxx 274$ touch xxx 275$ chown 43 xxx 276$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx 277$ chmod 412 xxx 278$ getfacl -n xxx 279> # file: xxx 280> # owner: 43 281> # group: wheel 282> owner@:-wxp----------:-------:deny 283> group@:-w-p----------:-------:deny 284> owner@:r-----aARWcCos:-------:allow 285> group@:--x---a-R-c--s:-------:allow 286> everyone@:-w-p--a-R-c--s:-------:allow 287$ ls -l xxx | cut -d' ' -f1 288> -r----x-w- 289 290$ mkdir ddd 291$ setfacl -a0 group:44:rwapd:allow ddd 292$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd 293$ setfacl -a0 user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd 294$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd 295$ getfacl -n ddd 296> # file: ddd 297> # owner: root 298> # group: wheel 299> user:42:r-x-----------:f-i----:allow 300> group:42:-w--D---------:-d-----:allow 301> group:43:-w--D---------:-d-----:deny 302> group@:-----da-------:-------:allow 303> group:44:rw-p-da-------:-------:allow 304> owner@:rwxp--aARWcCos:-------:allow 305> group@:r-x---a-R-c--s:-------:allow 306> everyone@:-w-p--a-R-c--s:f-i----:allow 307 308$ chmod 777 ddd 309$ getfacl -n ddd 310> # file: ddd 311> # owner: root 312> # group: wheel 313> owner@:rwxp--aARWcCos:-------:allow 314> group@:rwxp--a-R-c--s:-------:allow 315> everyone@:rwxp--a-R-c--s:-------:allow 316 317# Test applying ACL to mode. 318$ rmdir ddd 319$ mkdir ddd 320$ setfacl -a0 u:42:rwx:fi:allow ddd 321$ ls -ld ddd | cut -d' ' -f1 322> drwxr-xr-x+ 323 324$ rmdir ddd 325$ mkdir ddd 326$ chmod 0 ddd 327$ setfacl -a0 owner@:r:allow,group@:w:deny,group@:wx:allow ddd 328$ ls -ld ddd | cut -d' ' -f1 329> dr----x---+ 330 331$ rmdir ddd 332$ mkdir ddd 333$ chmod 0 ddd 334$ setfacl -a0 owner@:r:allow,group@:w:fi:deny,group@:wx:allow ddd 335$ ls -ld ddd | cut -d' ' -f1 336> dr---wx---+ 337 338$ rmdir ddd 339$ mkdir ddd 340$ chmod 0 ddd 341$ setfacl -a0 owner@:r:allow,group:43:w:deny,group:43:wx:allow ddd 342$ ls -ld ddd | cut -d' ' -f1 343> dr--------+ 344 345$ rmdir ddd 346$ mkdir ddd 347$ chmod 0 ddd 348$ setfacl -a0 owner@:r:allow,user:43:w:deny,user:43:wx:allow ddd 349$ ls -ld ddd | cut -d' ' -f1 350> dr--------+ 351 352# Test inheritance. 353$ rmdir ddd 354$ mkdir ddd 355$ setfacl -a0 group:43:write_data/write_acl:fin:deny,u:43:rwxp:allow ddd 356$ setfacl -a0 user:42:rx:fi:allow,group:42:write_data/delete_child:dn:deny ddd 357$ setfacl -a0 user:42:write_acl/write_owner:fi:allow ddd 358$ setfacl -a0 group:41:read_data/read_attributes:dni:allow ddd 359$ setfacl -a0 user:41:write_data/write_attributes:fn:allow ddd 360$ getfacl -qn ddd 361> user:41:-w-----A------:f--n---:allow 362> group:41:r-----a-------:-din---:allow 363> user:42:-----------Co-:f-i----:allow 364> user:42:r-x-----------:f-i----:allow 365> group:42:-w--D---------:-d-n---:deny 366> group:43:-w---------C--:f-in---:deny 367> user:43:rwxp----------:-------:allow 368> owner@:rwxp--aARWcCos:-------:allow 369> group@:r-x---a-R-c--s:-------:allow 370> everyone@:r-x---a-R-c--s:-------:allow 371 372$ cd ddd 373$ touch xxx 374$ getfacl -qn xxx 375> user:41:--------------:------I:allow 376> user:42:--------------:------I:allow 377> user:42:r-------------:------I:allow 378> group:43:-w---------C--:------I:deny 379> owner@:rw-p--aARWcCos:-------:allow 380> group@:r-----a-R-c--s:-------:allow 381> everyone@:r-----a-R-c--s:-------:allow 382 383$ rm xxx 384$ umask 077 385$ touch xxx 386$ getfacl -qn xxx 387> user:41:--------------:------I:allow 388> user:42:--------------:------I:allow 389> user:42:--------------:------I:allow 390> group:43:-w---------C--:------I:deny 391> owner@:rw-p--aARWcCos:-------:allow 392> group@:------a-R-c--s:-------:allow 393> everyone@:------a-R-c--s:-------:allow 394 395$ rm xxx 396$ umask 770 397$ touch xxx 398$ getfacl -qn xxx 399> owner@:rw-p----------:-------:deny 400> group@:rw-p----------:-------:deny 401> user:41:--------------:------I:allow 402> user:42:--------------:------I:allow 403> user:42:--------------:------I:allow 404> group:43:-w---------C--:------I:deny 405> owner@:------aARWcCos:-------:allow 406> group@:------a-R-c--s:-------:allow 407> everyone@:rw-p--a-R-c--s:-------:allow 408 409$ rm xxx 410$ umask 707 411$ touch xxx 412$ getfacl -qn xxx 413> owner@:rw-p----------:-------:deny 414> user:41:-w------------:------I:allow 415> user:42:--------------:------I:allow 416> user:42:r-------------:------I:allow 417> group:43:-w---------C--:------I:deny 418> owner@:------aARWcCos:-------:allow 419> group@:rw-p--a-R-c--s:-------:allow 420> everyone@:------a-R-c--s:-------:allow 421 422$ umask 077 423$ mkdir yyy 424$ getfacl -qn yyy 425> group:41:------a-------:------I:allow 426> user:42:-----------Co-:f-i---I:allow 427> user:42:r-x-----------:f-i---I:allow 428> group:42:-w--D---------:------I:deny 429> owner@:rwxp--aARWcCos:-------:allow 430> group@:------a-R-c--s:-------:allow 431> everyone@:------a-R-c--s:-------:allow 432 433$ rmdir yyy 434$ umask 770 435$ mkdir yyy 436$ getfacl -qn yyy 437> owner@:rwxp----------:-------:deny 438> group@:rwxp----------:-------:deny 439> group:41:------a-------:------I:allow 440> user:42:-----------Co-:f-i---I:allow 441> user:42:r-x-----------:f-i---I:allow 442> group:42:-w--D---------:------I:deny 443> owner@:------aARWcCos:-------:allow 444> group@:------a-R-c--s:-------:allow 445> everyone@:rwxp--a-R-c--s:-------:allow 446 447$ rmdir yyy 448$ umask 707 449$ mkdir yyy 450$ getfacl -qn yyy 451> owner@:rwxp----------:-------:deny 452> group:41:r-----a-------:------I:allow 453> user:42:-----------Co-:f-i---I:allow 454> user:42:r-x-----------:f-i---I:allow 455> group:42:-w--D---------:------I:deny 456> owner@:------aARWcCos:-------:allow 457> group@:rwxp--a-R-c--s:-------:allow 458> everyone@:------a-R-c--s:-------:allow 459 460# There is some complication regarding how write_acl and write_owner flags 461# get inherited. Make sure we got it right. 462$ setfacl -b . 463$ setfacl -a0 u:42:Co:f:allow . 464$ setfacl -a0 u:43:Co:d:allow . 465$ setfacl -a0 u:44:Co:fd:allow . 466$ setfacl -a0 u:45:Co:fi:allow . 467$ setfacl -a0 u:46:Co:di:allow . 468$ setfacl -a0 u:47:Co:fdi:allow . 469$ setfacl -a0 u:48:Co:fn:allow . 470$ setfacl -a0 u:49:Co:dn:allow . 471$ setfacl -a0 u:50:Co:fdn:allow . 472$ setfacl -a0 u:51:Co:fni:allow . 473$ setfacl -a0 u:52:Co:dni:allow . 474$ setfacl -a0 u:53:Co:fdni:allow . 475$ umask 022 476$ rm xxx 477$ touch xxx 478$ getfacl -nq xxx 479> user:53:--------------:------I:allow 480> user:51:--------------:------I:allow 481> user:50:--------------:------I:allow 482> user:48:--------------:------I:allow 483> user:47:--------------:------I:allow 484> user:45:--------------:------I:allow 485> user:44:--------------:------I:allow 486> user:42:--------------:------I:allow 487> owner@:rw-p--aARWcCos:-------:allow 488> group@:r-----a-R-c--s:-------:allow 489> everyone@:r-----a-R-c--s:-------:allow 490 491$ rmdir yyy 492$ mkdir yyy 493$ getfacl -nq yyy 494> user:53:--------------:------I:allow 495> user:52:--------------:------I:allow 496> user:50:--------------:------I:allow 497> user:49:--------------:------I:allow 498> user:47:--------------:fd----I:allow 499> user:46:--------------:-d----I:allow 500> user:45:-----------Co-:f-i---I:allow 501> user:44:--------------:fd----I:allow 502> user:43:--------------:-d----I:allow 503> user:42:-----------Co-:f-i---I:allow 504> owner@:rwxp--aARWcCos:-------:allow 505> group@:r-x---a-R-c--s:-------:allow 506> everyone@:r-x---a-R-c--s:-------:allow 507 508$ setfacl -b . 509$ setfacl -a0 u:42:Co:f:deny . 510$ setfacl -a0 u:43:Co:d:deny . 511$ setfacl -a0 u:44:Co:fd:deny . 512$ setfacl -a0 u:45:Co:fi:deny . 513$ setfacl -a0 u:46:Co:di:deny . 514$ setfacl -a0 u:47:Co:fdi:deny . 515$ setfacl -a0 u:48:Co:fn:deny . 516$ setfacl -a0 u:49:Co:dn:deny . 517$ setfacl -a0 u:50:Co:fdn:deny . 518$ setfacl -a0 u:51:Co:fni:deny . 519$ setfacl -a0 u:52:Co:dni:deny . 520$ setfacl -a0 u:53:Co:fdni:deny . 521$ umask 022 522$ rm xxx 523$ touch xxx 524$ getfacl -nq xxx 525> user:53:-----------Co-:------I:deny 526> user:51:-----------Co-:------I:deny 527> user:50:-----------Co-:------I:deny 528> user:48:-----------Co-:------I:deny 529> user:47:-----------Co-:------I:deny 530> user:45:-----------Co-:------I:deny 531> user:44:-----------Co-:------I:deny 532> user:42:-----------Co-:------I:deny 533> owner@:rw-p--aARWcCos:-------:allow 534> group@:r-----a-R-c--s:-------:allow 535> everyone@:r-----a-R-c--s:-------:allow 536 537$ rmdir yyy 538$ mkdir yyy 539$ getfacl -nq yyy 540> user:53:-----------Co-:------I:deny 541> user:52:-----------Co-:------I:deny 542> user:50:-----------Co-:------I:deny 543> user:49:-----------Co-:------I:deny 544> user:47:-----------Co-:fd----I:deny 545> user:46:-----------Co-:-d----I:deny 546> user:45:-----------Co-:f-i---I:deny 547> user:44:-----------Co-:fd----I:deny 548> user:43:-----------Co-:-d----I:deny 549> user:42:-----------Co-:f-i---I:deny 550> owner@:rwxp--aARWcCos:-------:allow 551> group@:r-x---a-R-c--s:-------:allow 552> everyone@:r-x---a-R-c--s:-------:allow 553 554$ rmdir yyy 555$ rm xxx 556$ cd .. 557$ rmdir ddd 558$ rm xxx 559 560# Test basic recursive setting of ACLs. 561$ mkdir ddd 562$ touch ddd/xxx 563$ mkdir ddd/eee 564$ touch ddd/eee/yyy 565$ setfacl -R -m owner@:full_set:f:allow,group@:full_set::allow,everyone@:full_set::allow ddd 566$ getfacl -q ddd 567> owner@:rwxpDdaARWcCos:f------:allow 568> group@:rwxpDdaARWcCos:-------:allow 569> everyone@:rwxpDdaARWcCos:-------:allow 570$ getfacl -q ddd/xxx 571> owner@:rwxpDdaARWcCos:-------:allow 572> group@:rwxpDdaARWcCos:-------:allow 573> everyone@:rwxpDdaARWcCos:-------:allow 574$ getfacl -q ddd/eee 575> owner@:rwxpDdaARWcCos:f------:allow 576> group@:rwxpDdaARWcCos:-------:allow 577> everyone@:rwxpDdaARWcCos:-------:allow 578$ getfacl -q ddd/eee/yyy 579> owner@:rwxpDdaARWcCos:-------:allow 580> group@:rwxpDdaARWcCos:-------:allow 581> everyone@:rwxpDdaARWcCos:-------:allow 582 583$ rm -r ddd 584