#!/bin/sh # make sure `cp -p' preserves special bits # This works only when run as root. # This test would fail due to a bug introduced in 4.0y. # The bug was fixed in 4.0z. if test "$VERBOSE" = yes; then set -x cp --version fi pwd=`pwd` tmp=spec-bits.$$ trap 'status=$?; cd $pwd; rm -rf $tmp && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 framework_failure=0 mkdir $tmp || framework_failure=1 cd $tmp || framework_failure=1 touch file || framework_failure=1 chmod u-w file || framework_failure=1 (echo foo >> file) >/dev/null 2>&1 || { echo '********************************************' echo "$0: NOTICE: This test must be run as root." echo "You can do the following as \`root' to run just this test:" echo "" echo "cd $pwd && $MAKE check TESTS=special-bits" echo "" echo "Here's a minimalist version. It outputs nothing when the test" echo "succeeds, and \`FAIL' if it fails." echo "" echo "cd $pwd \\" echo " && env PATH=../../src:\$PATH MAKE=$MAKE ./special-bits || echo FAIL" echo "" echo '********************************************' exit 77 } touch a b || framework_failure=1 chmod u+sx,go= a || framework_failure=1 chmod u=rwx,g=sx,o= b || framework_failure=1 if test $framework_failure = 1; then echo 'failure in testing framework' exit 1 fi fail=0 cp -p a a2 || fail=1 set _ `ls -l a`; shift; p1=$1 set _ `ls -l a2`; shift; p2=$1 test $p1 = $p2 || fail=1 cp -p b b2 || fail=1 set _ `ls -l b`; shift; p1=$1 set _ `ls -l b2`; shift; p2=$1 test $p1 = $p2 || fail=1 (exit $fail); exit