#! /bin/bash

. ${0%/*}/test-lib.sh

require_richacls
use_testdir

umask 022

ncheck "mkdir d1"
ncheck "setrichacl --modify owner@:rwpxd:fd:allow,u:101:rw:fd:deny d1"
ncheck "setrichacl --modify u:102:rw:f:deny d1"
ncheck "setrichacl --modify u:103:rw:d:deny d1"
ncheck "setrichacl --modify g:101:rw:fdi:deny d1"

ncheck "setrichacl --modify flags:a d1"

check "getrichacl --numeric --raw d1" <<EOF
d1:
     flags:a
     owner:rwpxd-----------::mask
     group:r--x------------::mask
     other:r--x------------::mask
  user:101:rw--------------:fd:deny
  user:102:rw--------------:f:deny
  user:103:rw--------------:d:deny
 group:101:rw--------------:fdi:deny
    owner@:rwpxd-----------:fd:allow
 everyone@:r--x------------::allow
EOF

ncheck "mkdir d1/d2"
ncheck "touch d1/d3"

# Mode bits derived from inherited ACEs
check "getrichacl --numeric --raw d1/d2" <<EOF
d1/d2:
     flags:map
     owner:rwpxd-----------::mask
     group:----------------::mask
     other:----------------::mask
  user:101:rw--------------:fda:deny
  user:102:rw--------------:fia:deny
  user:103:rw--------------:da:deny
 group:101:rw--------------:fda:deny
    owner@:rwpxd-----------:fda:allow
EOF

check "getrichacl --numeric --raw d1/d3" <<EOF
d1/d3:
     flags:map
     owner:rwp-------------::mask
     group:----------------::mask
     other:----------------::mask
  user:101:rw--------------:a:deny
  user:102:rw--------------:a:deny
 group:101:rw--------------:a:deny
    owner@:rwpx------------:a:allow
EOF

ncheck "mkdir d1/d2/d4"
ncheck "touch d1/d2/d4/d5"

# Protected files
ncheck "mkdir d1/d6"
ncheck "touch d1/d7"

check "getrichacl --numeric --raw d1/d2/d4" <<EOF
d1/d2/d4:
     flags:map
     owner:rwpxd-----------::mask
     group:----------------::mask
     other:----------------::mask
  user:101:rw--------------:fda:deny
  user:102:rw--------------:fia:deny
  user:103:rw--------------:da:deny
 group:101:rw--------------:fda:deny
    owner@:rwpxd-----------:fda:allow
EOF

check "getrichacl --numeric --raw d1/d2/d4/d5" <<EOF
d1/d2/d4/d5:
     flags:map
     owner:rwp-------------::mask
     group:----------------::mask
     other:----------------::mask
  user:101:rw--------------:a:deny
  user:102:rw--------------:a:deny
 group:101:rw--------------:a:deny
    owner@:rwpx------------:a:allow
EOF

# Clear protected flag from all the ACLs
ncheck "setrichacl --modify flags:a d1/d2"
ncheck "setrichacl --modify flags:a d1/d3"
ncheck "setrichacl --modify flags:a d1/d2/d4"
ncheck "setrichacl --modify flags:a d1/d2/d4/d5"

ncheck "getrichacl --numeric d1 | sed -e 's/:fd:deny/:fd:allow/' > acl.txt"
check "cat acl.txt" <<EOF
d1:
     flags:a
  user:101:rw-----------:fd:allow
  user:102:rw-----------:f:deny
  user:103:rw-----------:d:deny
 group:101:rw-----------:fdi:deny
    owner@:rwpxd--------:fd:allow
 everyone@:r--x---------::allow
EOF

ncheck "setrichacl --set-file acl.txt d1"

check "getrichacl --numeric --raw d1" <<EOF
d1:
     flags:a
     owner:rwpxd-----------::mask
     group:rw-x------------::mask
     other:r--x------------::mask
  user:101:rw--------------:fd:allow
  user:102:rw--------------:f:deny
  user:103:rw--------------:d:deny
 group:101:rw--------------:fdi:deny
    owner@:rwpxd-----------:fd:allow
 everyone@:r--x------------::allow
EOF

check "getrichacl --numeric --raw d1/d2" <<EOF
d1/d2:
     flags:a
     owner:rwpxd-----------::mask
     group:rw--------------::mask
     other:----------------::mask
  user:101:rw--------------:fda:allow
  user:102:rw--------------:fia:deny
  user:103:rw--------------:da:deny
 group:101:rw--------------:fda:deny
    owner@:rwpxd-----------:fda:allow
EOF

check "getrichacl --numeric --raw d1/d3" <<EOF
d1/d3:
     flags:a
     owner:rwpx------------::mask
     group:rw--------------::mask
     other:----------------::mask
  user:101:rw--------------:a:allow
  user:102:rw--------------:a:deny
 group:101:rw--------------:a:deny
    owner@:rwpx------------:a:allow
EOF

check "getrichacl --numeric --raw d1/d2/d4" <<EOF
d1/d2/d4:
     flags:a
     owner:rwpxd-----------::mask
     group:rw--------------::mask
     other:----------------::mask
  user:101:rw--------------:fda:allow
  user:102:rw--------------:fia:deny
  user:103:rw--------------:da:deny
 group:101:rw--------------:fda:deny
    owner@:rwpxd-----------:fda:allow
EOF

check "getrichacl --numeric --raw d1/d2/d4/d5" <<EOF
d1/d2/d4/d5:
     flags:a
     owner:rwpx------------::mask
     group:rw--------------::mask
     other:----------------::mask
  user:101:rw--------------:a:allow
  user:102:rw--------------:a:deny
 group:101:rw--------------:a:deny
    owner@:rwpx------------:a:allow
EOF

# No automatic inheritance for protected files
check "getrichacl --numeric --raw d1/d6" <<EOF
d1/d6:
     flags:map
     owner:rwpxd-----------::mask
     group:----------------::mask
     other:----------------::mask
  user:101:rw--------------:fda:deny
  user:102:rw--------------:fia:deny
  user:103:rw--------------:da:deny
 group:101:rw--------------:fda:deny
    owner@:rwpxd-----------:fda:allow
EOF

check "getrichacl --numeric --raw d1/d7" <<EOF
d1/d7:
     flags:map
     owner:rwp-------------::mask
     group:----------------::mask
     other:----------------::mask
  user:101:rw--------------:a:deny
  user:102:rw--------------:a:deny
 group:101:rw--------------:a:deny
    owner@:rwpx------------:a:allow
EOF
