1#!/usr/bin/perl 2# Test "rm" and unreadable directories. 3 4# Copyright (C) 1998-2023 Free Software Foundation, Inc. 5 6# This program is free software: you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation, either version 3 of the License, or 9# (at your option) any later version. 10 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <https://www.gnu.org/licenses/>. 18 19use strict; 20 21(my $program_name = $0) =~ s|.*/||; 22 23# Turn off localization of executable's output. 24@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; 25 26my $d = "dir-$$"; 27my $mkdir = {PRE => sub {mkdir $d,0100 or die "$d: $!\n"}}; 28my $prog = 'rm'; 29my $uid = $<; 30 31my @Tests = 32 ( 33 # test-name options input expected-output 34 # 35 # Removing an empty, unwritable directory succeeds. 36 ['unreadable-1', '-rf', $d, {EXIT => 0}, $mkdir], 37 38 ['unreadable-2', '-rf', $d, 39 {EXIT => $uid == 0 ? 0 : 1}, 40 {ERR => $uid == 0 ? '' 41 : "$prog: cannot remove '$d': Permission denied\n"}, 42 {PRE => sub { (mkdir $d,0700 and mkdir "$d/x",0700 and chmod 0100,$d) 43 or die "$d: $!\n"}} ], 44 ); 45 46my $save_temps = $ENV{SAVE_TEMPS}; 47my $verbose = $ENV{VERBOSE}; 48 49my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose); 50exit $fail; 51