| #!/bin/sh |
| |
| |
| |
|
|
| |
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
|
|
| |
| |
|
|
| . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src |
| print_ver_ cp mv |
|
|
| require_root_ |
|
|
| cwd=$(pwd) |
| cleanup_() { cd /; umount "$cwd/noxattr"; umount "$cwd/xattr"; } |
|
|
| skip=0 |
|
|
| |
| make_fs() { |
| where="$1" |
| opts="$2" |
|
|
| fs="$where.bin" |
|
|
| dd if=/dev/zero of="$fs" bs=8192 count=200 > /dev/null 2>&1 \ |
| || skip=1 |
| mkdir "$where" || skip=1 |
| mkfs -t ext2 -F "$fs" || |
| skip_ "failed to create ext2 file system" |
| mount -oloop,$opts "$fs" "$where" || skip=1 |
| echo test > "$where"/f || skip=1 |
| test -s "$where"/f || skip=1 |
|
|
| test $skip = 1 && |
| skip_ "insufficient mount/ext2 support" |
| } |
|
|
| make_fs noxattr nouser_xattr |
| make_fs xattr user_xattr |
|
|
| |
| xattr_name="user.foo" |
| xattr_value="bar" |
| xattr_pair="$xattr_name=\"$xattr_value\"" |
|
|
| echo test > xattr/a || framework_failure_ |
| getfattr -d xattr/a >out_a || skip_ "failed to get xattr of file" |
| grep -F "$xattr_pair" out_a >/dev/null && framework_failure_ |
| setfattr -n "$xattr_name" -v "$xattr_value" xattr/a >out_a \ |
| || skip_ "failed to set xattr of file" |
| getfattr -d xattr/a >out_a || skip_ "failed to get xattr of file" |
| grep -F "$xattr_pair" out_a >/dev/null \ |
| || skip_ "failed to set xattr of file" |
|
|
|
|
| |
| cp -a xattr/a noxattr/ 2>err || fail=1 |
| test -s noxattr/a || fail=1 |
| compare /dev/null err || fail=1 |
|
|
| rm -f err noxattr/a |
|
|
| |
| cp --preserve=all xattr/a noxattr/ 2>err || fail=1 |
| test -s noxattr/a || fail=1 |
| compare /dev/null err || fail=1 |
|
|
| |
| cp --preserve=all xattr/a noxattr/ 2>err || fail=1 |
| test -s noxattr/a || fail=1 |
| compare /dev/null err || fail=1 |
|
|
| rm -f err noxattr/a |
|
|
| |
| cp -a --preserve=xattr xattr/a noxattr/ 2>err && fail=1 |
| if grep '^#define USE_XATTR 1' $CONFIG_HEADER > /dev/null; then |
| cat <<\EOF > exp |
| cp: setting attributes for 'noxattr/a': Operation not supported |
| EOF |
| else |
| cat <<\EOF > exp |
| cp: cannot preserve extended attributes, cp is built without xattr support |
| EOF |
| fi |
|
|
| compare exp err || fail=1 |
|
|
| rm -f err noxattr/a |
|
|
| |
| mv xattr/a noxattr/ 2>err || fail=1 |
| test -s noxattr/a || fail=1 |
| compare /dev/null err || fail=1 |
|
|
| |
| |
| |
| |
| ln -s 'foo' xattr/symlink || framework_failure_ |
| |
| |
| txattr='trusted.overlay.whiteout' |
| if setfattr -hn "$txattr" -v y xattr/symlink; then |
| |
| if getfattr -h -m- -d xattr/symlink | grep -F "$txattr"; then |
| mv xattr/symlink noxattr/ 2>err || fail=1 |
| if grep '^#define USE_XATTR 1' $CONFIG_HEADER > /dev/null; then |
| getfattr -h -m- -d noxattr/symlink | grep -F "$txattr" || fail=1 |
| fi |
| compare /dev/null err || fail=1 |
| else |
| echo "failed to get '$txattr' xattr. skipping symlink check" >&2 |
| fi |
| else |
| echo "failed to set '$txattr' xattr. skipping symlink check" >&2 |
| fi |
|
|
| Exit $fail |
|
|