1#!/bin/sh 2 3# Copyright (C) 2000-2023 Free Software Foundation, Inc. 4 5# This program is free software: you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation, either version 3 of the License, or 8# (at your option) any later version. 9 10# This program is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14 15# You should have received a copy of the GNU General Public License 16# along with this program. If not, see <https://www.gnu.org/licenses/>. 17 18. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src 19print_ver_ cp 20skip_if_root_ 21 22chmod g-s . || framework_failure_ 23mkdir D D/D || framework_failure_ 24touch D/a || framework_failure_ 25chmod 0 D/a || framework_failure_ 26chmod u=rx,go=,-st D || framework_failure_ 27 28 29# This is expected to exit non-zero, because it can't read D/a. 30returns_ 1 cp -pR D DD > /dev/null 2>&1 || fail=1 31 32# Permissions on DD must be 'dr-x------' 33 34mode=$(ls -ld DD|cut -b-10) 35test "$mode" = dr-x------ || fail=1 36 37chmod 0 D 38ln -s D/D symlink 39touch F 40cat > exp <<\EOF 41cp: cannot stat 'symlink': Permission denied 42EOF 43 44cp F symlink 2> out && fail=1 45# HPUX appears to fail with EACCES rather than EPERM. 46# Transform their diagnostic 47# ...: The file access permissions do not allow the specified action. 48# to the expected one: 49sed 's/: The file access permissions.*/: Permission denied/'<out>o1;mv o1 out 50compare exp out || fail=1 51 52cp --no-target-directory F symlink 2> out && fail=1 53sed 's/: The file access permissions.*/: Permission denied/'<out>o1;mv o1 out 54compare exp out || fail=1 55 56cat > exp <<\EOF 57cp: target directory 'symlink': Permission denied 58EOF 59 60cp --target-directory=symlink F 2> out && fail=1 61sed 's/: The file access permissions.*/: Permission denied/'<out>o1;mv o1 out 62compare exp out || fail=1 63 64chmod 700 D 65 66Exit $fail 67