What seems to have happened is that this code in lib/File/Path.pm in Perl 5.8.8:
chmod $rp | 0600, $root
or carp "Can't make file $root writeable: $!"
if $force_writeable;
was rewritten for 5.10 as:
my $nperm = $perm & 07777 | 0600;
if ($nperm != $perm and not chmod $nperm, $root) {
if ($Force_Writeable) {
_error($arg, "cannot make file writeable", $canon);
}
}
This tests the $Force_Writeable variable only after attempting the
chmod, whereas the original correctly tested the $Force_Writeable
variable first. This variable defines whether the OS requires write
permission when deleting a file, and is always false on Unix-like
systems including Debian. I believe the correct code is:
my $nperm = $perm & 07777 | 0600;
if ($Force_Writeable && $nperm != $perm and not chmod $nperm,
$root) {
_error($arg, "cannot make file writeable", $canon);
}
All the other chmod calls in _rmtree appear to be dependent on whether
the directory entry being deleted is a directory (tested using lstat,
not stat) and the 'safe' word not being set.
Ben.
--
Ben Hutchings
Design a system any fool can use, and only a fool will want to use it.
signature.asc
Description: This is a digitally signed message part

