|
|
#!/bin/sh |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src |
|
|
print_ver_ cp mv ginstall |
|
|
|
|
|
|
|
|
touch src dest || framework_failure_ |
|
|
cp --preserve=xattr -n src dest \ |
|
|
|| skip_ "coreutils built without xattr support" |
|
|
|
|
|
|
|
|
cleanup_() { rm -rf "$other_partition_tmpdir"; } |
|
|
. "$abs_srcdir/tests/other-fs-tmpdir" |
|
|
b_other="$other_partition_tmpdir/b" |
|
|
rm -f "$b_other" || framework_failure_ |
|
|
|
|
|
|
|
|
xattr_name="user.foo" |
|
|
xattr_value="bar" |
|
|
xattr_pair="$xattr_name=\"$xattr_value\"" |
|
|
|
|
|
|
|
|
touch a || framework_failure_ |
|
|
getfattr -d a >out_a || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_a && framework_failure_ |
|
|
|
|
|
|
|
|
setfattr -n "$xattr_name" -v "$xattr_value" a >out_a \ |
|
|
|| skip_ "failed to set xattr of file" |
|
|
getfattr -d a >out_a || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_a \ |
|
|
|| skip_ "failed to set xattr of file" |
|
|
|
|
|
|
|
|
|
|
|
cp a b || fail=1 |
|
|
getfattr -d b >out_b || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_b && fail=1 |
|
|
|
|
|
|
|
|
cp --preserve=xattr a b || fail=1 |
|
|
getfattr -d b >out_b || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_b || fail=1 |
|
|
|
|
|
|
|
|
cp --preserve=all a c || fail=1 |
|
|
getfattr -d c >out_c || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_c || fail=1 |
|
|
|
|
|
|
|
|
cp -a a d 2>err && { compare /dev/null err || fail=1; } |
|
|
getfattr -d d >out_d || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_d || fail=1 |
|
|
|
|
|
|
|
|
chmod a-w a || framework_failure_ |
|
|
rm -f e |
|
|
cp --preserve=xattr a e || fail=1 |
|
|
getfattr -d e >out_e || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_e || fail=1 |
|
|
|
|
|
|
|
|
src_perm=$(stat --format=%a a) |
|
|
dst_perm=$(stat --format=%a e) |
|
|
test "$dst_perm" = "$src_perm" || fail=1 |
|
|
|
|
|
chmod u+w a || framework_failure_ |
|
|
|
|
|
rm b || framework_failure_ |
|
|
|
|
|
|
|
|
ginstall a b || fail=1 |
|
|
getfattr -d b >out_b || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_b && fail=1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mv a b || fail=1 |
|
|
getfattr -d b >out_b || skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_b || cat >&2 <<EOF |
|
|
================================================================= |
|
|
$0: WARNING!!! |
|
|
rename () does not preserve extended attributes |
|
|
================================================================= |
|
|
EOF |
|
|
|
|
|
|
|
|
test_mv=1 |
|
|
touch "$b_other" || framework_failure_ |
|
|
setfattr -n "$xattr_name" -v "$xattr_value" "$b_other" >out_a \ |
|
|
|| test_mv=0 |
|
|
getfattr -d "$b_other" >out_b || test_mv=0 |
|
|
grep -F "$xattr_pair" out_b || test_mv=0 |
|
|
rm -f "$b_other" || framework_failure_ |
|
|
|
|
|
if test $test_mv -eq 1; then |
|
|
|
|
|
mv b "$b_other" || fail=1 |
|
|
getfattr -d "$b_other" >out_b || |
|
|
skip_ "failed to get xattr of file" |
|
|
grep -F "$xattr_pair" out_b || fail=1 |
|
|
else |
|
|
cat >&2 <<EOF |
|
|
================================================================= |
|
|
$0: WARNING!!! |
|
|
failed to set xattr of file $b_other |
|
|
================================================================= |
|
|
EOF |
|
|
fi |
|
|
|
|
|
Exit $fail |
|
|
|