#!/bin/bash set -e error() { echo "$@" 1>&2; } fail() { [ $# -eq 0 ] || error "$@"; exit 1; } workd="$1" if [ -z "$workd" ]; then TEMP_D=$(mktemp -d ${TMPDIR:-/tmp}/${0##*/}.XXXXXX) trap 'rm -Rf "${TEMP_D}"' EXIT workd="$TEMP_D" fi cd "$workd" which getfacl >/dev/null 2>&1 || { echo "no getfacl in PATH"; exit 1; } mkdir -p orig/no-defaults orig/defaults orig/modified-defaults ## remove the defaults on our extract dirs so they are not inherited for d in extract-without extract-with; do mkdir -p "$d" && setfacl --remove-default "$d" if getfacl "$d" | grep -q 'default:'; then fail "getfacl showed defaults after setfacl removed on $d" fi done ## set 'default' perms on modified-defaults and defaults defperms="--modify u::rwx --modify g::r-x --modify other::r-x" modperms="--modify u::rwx --modify g::rwx --modify other::---" setfacl --default $defperms orig/defaults setfacl --default $modperms orig/modified-defaults setfacl --remove-default orig/no-defaults getfacl orig/no-defaults | grep -q 'default:' && fail "getfacl showed defaults after setfacl removed on no-defaults" ## create 2 tarballs for each dir. One with '--acl' and one without. for d in no-defaults defaults modified-defaults; do ( cd orig && tar --xattrs '--xattrs-include=*' --acl -cpf ../$d-with.tar $d && tar --xattrs '--xattrs-include=*' -cpf ../$d-without.tar $d && tar --xattrs '--xattrs-include=*' --no-acl -cpf ../$d-noacl.tar $d ) done ## extract both source tarballs for d in no-defaults defaults modified-defaults; do for s in with without noacl; do mkdir -p extract-without/src-$s extract-with/src-$s extract-noacl/src-$s ( cd extract-without/src-$s && tar --xattrs '--xattrs-include=*' -xpf ../../$d-$s.tar ) ( cd extract-with/src-$s && tar --xattrs '--xattrs-include=*' --acl -xpf ../../$d-$s.tar ) ( cd extract-noacl/src-$s && tar --xattrs '--xattrs-include=*' --no-acl -xpf ../../$d-$s.tar ) done done ## now just list the extracted dirs for d in orig/* extract-*/*/*; do [ -d "$d" ] || continue # touch 'foo' in extract dirs [ "${d#orig/}" != "$d" ] || touch "$d/foo" fname=$(echo "$d" | sed 's,/,_,g') ( echo === $d === echo " == getfacl $d ==" getfacl $d | sed 's,^, ,' echo " == ls -l $d ==" ls -l "$d" | sed 's,^, ,' echo " == ls -ld $d ==" ls -ld "$d" | sed 's,^, ,' echo ) | tee "$fname.info" done