1#!/bin/sh
2# Like fail-eperm, but the failure must be for a file encountered
3# while trying to remove the containing directory with the sticky bit set.
4
5# Copyright (C) 2003-2023 Free Software Foundation, Inc.
6
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU General Public License for more details.
16
17# You should have received a copy of the GNU General Public License
18# along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
20. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
21print_ver_ rm
22require_root_
23
24# The containing directory must be owned by the user who eventually runs rm.
25chown $NON_ROOT_USERNAME .
26
27mkdir a || framework_failure_
28chmod 1777 a || framework_failure_
29touch a/b || framework_failure_
30
31
32# Try to ensure that $NON_ROOT_USERNAME can access
33# the required version of rm.
34rm_version=$(
35  chroot --skip-chdir --user=$NON_ROOT_USERNAME / env PATH="$PATH" \
36    rm --version |
37  sed -n '1s/.* //p'
38)
39case $rm_version in
40  $PACKAGE_VERSION) ;;
41  *) skip_ "cannot access just-built rm as user $NON_ROOT_USERNAME";;
42esac
43chroot --skip-chdir --user=$NON_ROOT_USERNAME / \
44  env PATH="$PATH" rm -rf a 2> out-t && fail=1
45
46# On some systems, we get 'Not owner'.  Convert it.
47# On other systems (HPUX), we get 'Permission denied'.  Convert it, too.
48onp='Operation not permitted'
49sed "s/Not owner/$onp/;s/Permission denied/$onp/" out-t > out
50
51cat <<\EOF > exp
52rm: cannot remove 'a/b': Operation not permitted
53EOF
54
55compare exp out || fail=1
56
57Exit $fail
58