[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug-fix for rm on systems that might have unlinkable directories
From: |
Jim Meyering |
Subject: |
bug-fix for rm on systems that might have unlinkable directories |
Date: |
Sun, 09 Dec 2007 13:58:06 +0100 |
On some systems (see unlinkdir.m4[1] for the list), GNU rm takes
advantage of "knowing" that unlink ("directory") will always fail,
and thus avoids a race condition.
However, in all post-6.9 snapshots and in coreutils-6.9.90, the uglier code
that is used only on other systems has a bug that made it impossible to
remove a non-directory as root.
[1] If you know of a system not mentioned in this macro and on which
unlink ("directory") is guaranteed to fail, please tell address@hidden
http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=m4/unlinkdir.m4
Here's the patch:
"rm" as root would fail to unlink a non-directory on OS X 10.4.x
* src/remove.c (remove_entry) ["can unlink directories"]: Fix a
mistakenly reversed condition.
* NEWS: Mention this bug fix.
Reported by Pieter Bowman.
---
ChangeLog | 8 ++++++++
NEWS | 4 ++++
THANKS | 1 +
src/remove.c | 2 +-
4 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index f9686a6..d2f2f31 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-12-09 Jim Meyering <address@hidden>
+
+ "rm" as root would fail to unlink a non-directory on OS X 10.4.x
+ * src/remove.c (remove_entry) ["can unlink directories"]: Fix a
+ mistakenly reversed condition.
+ * NEWS: Mention this bug fix.
+ Reported by Pieter Bowman.
+
2007-12-08 Jim Meyering <address@hidden>
* src/c99-to-c89.diff: Adjust shred.c offsets.
diff --git a/NEWS b/NEWS
index c6a0511..e5e59a6 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ GNU coreutils NEWS -*-
outline -*-
* Noteworthy changes in release 6.9.91 (????-??-??) [beta]
+ "rm" would fail to unlink a non-directory when run in an environment
+ in which the user running rm is capable of unlinking a directory.
+ [bug introduced in coreutils-6.9]
+
* Noteworthy changes in release 6.9.90 (2007-12-01) [beta]
diff --git a/THANKS b/THANKS
index 0b0124b..f91c262 100644
--- a/THANKS
+++ b/THANKS
@@ -424,6 +424,7 @@ Philippe De Muyter address@hidden
Philippe Schnoebelen address@hidden
Phillip Jones address@hidden
Piergiorgio Sartor address@hidden
+Pieter Bowman address@hidden
Piotr Kwapulinski address@hidden
Prashant TR address@hidden
Rainer Orth address@hidden
diff --git a/src/remove.c b/src/remove.c
index 11e2ccb..de8f5ff 100644
--- a/src/remove.c
+++ b/src/remove.c
@@ -1150,7 +1150,7 @@ remove_entry (int fd_cwd, Dirstack_state const *ds, char
const *filename,
dirent_type = DT_DIR;
}
- if (dirent_type == DT_DIR)
+ if (dirent_type != DT_DIR)
{
/* At this point, barring race conditions, FILENAME is known
to be a non-directory, so it's ok to try to unlink it. */
--
1.5.3.7.1116.gae2a9
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- bug-fix for rm on systems that might have unlinkable directories,
Jim Meyering <=