From 195f52b5ec2732cd70b0845810c9dc0e068d0641 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 27 Nov 2003 08:24:01 +0000 Subject: [PATCH] Ensure that we have write permission before overwriting a file. --- binutils/ChangeLog | 5 +++++ binutils/rename.c | 16 ++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index e7d5309..208f96e 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2003-11-27 Nick Clifton + + * rename.c (smart_rename): Make sure that we have write + permission on the destination file before renaming. + 2003-11-26 Daniel Jacobowitz Nick Clifton diff --git a/binutils/rename.c b/binutils/rename.c index 99561c4..398152e 100644 --- a/binutils/rename.c +++ b/binutils/rename.c @@ -159,14 +159,18 @@ smart_rename (const char *from, const char *to, int preserve_dates) if (ret != 0) { /* We have to clean up here. */ - - non_fatal (_("%s: rename: %s"), to, strerror (errno)); + non_fatal (_("unable to rename '%s' reason: %s"), to, strerror (errno)); unlink (from); } #else /* Use rename only if TO is not a symbolic link and has - only one hard link. */ - if (! exists || (!S_ISLNK (s.st_mode) && s.st_nlink == 1)) + only one hard link, and we have permission to write to it. */ + if (! exists + || (!S_ISLNK (s.st_mode) + && S_ISREG (s.st_mode) + && (s.st_mode & S_IWUSR) + && s.st_nlink == 1) + ) { ret = rename (from, to); if (ret == 0) @@ -193,7 +197,7 @@ smart_rename (const char *from, const char *to, int preserve_dates) else { /* We have to clean up here. */ - non_fatal (_("%s: rename: %s"), to, strerror (errno)); + non_fatal (_("unable to rename '%s' reason: %s"), to, strerror (errno)); unlink (from); } } @@ -201,7 +205,7 @@ smart_rename (const char *from, const char *to, int preserve_dates) { ret = simple_copy (from, to); if (ret != 0) - non_fatal (_("%s: simple_copy: %s"), to, strerror (errno)); + non_fatal (_("unable to copy file '%s' reason: %s"), to, strerror (errno)); if (preserve_dates) set_times (to, &s); -- 2.7.4