commit 86be3af75fc86852751df9cafc67483dc31c65ae
parent 0dcfa1d7f71d2a67c4a8ebea8b2654e5814d9eae
Author: Chris Allegretta <chrisa@asty.org>
Date: Sun, 23 May 2010 04:30:23 +0000
2010-05-23 Chris Allegretta <chrisa@asty.org>
* files.c (write_file): Don't even try to chown() the backup
file unless we're root, since it's probably going to fail if
we're editing a file we don't own. Fixes Savannah bug
29514: [nano 2.2.2] backup should ignore chown errors.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4507 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,9 @@
+2010-05-23 Chris Allegretta <chrisa@asty.org>
+ * files.c (write_file): Don't even try to chown() the backup
+ file unless we're root, since it's probably going to fail if
+ we're editing a file we don't own. Fixes Savannah bug
+ 29514: [nano 2.2.2] backup should ignore chown errors.
+
GNU nano 2.2.4 - 2010.04.15
2010-04-07 Chris Allegretta <chrisa@asty.org>
* doc/man/nano.1,nanorc.5: Remove the backup file warnings now
diff --git a/src/files.c b/src/files.c
@@ -1612,9 +1612,18 @@ bool write_file(const char *name, FILE *f_open, bool tmp, append_type
goto cleanup_and_exit;
}
- if (fchmod(backup_fd, openfile->current_stat->st_mode) == -1 ||
- fchown(backup_fd, openfile->current_stat->st_uid,
- openfile->current_stat->st_gid) == -1 ) {
+ /* We shouldn't worry about chown()ing something if we're not
+ root, since it's likely to fail! */
+ if (geteuid() == NANO_ROOT_UID && fchown(backup_fd,
+ openfile->current_stat->st_uid, openfile->current_stat->st_gid) == -1 ) {
+ statusbar(_("Error writing backup file %s: %s"), backupname,
+ strerror(errno));
+ free(backupname);
+ fclose(backup_file);
+ goto cleanup_and_exit;
+ }
+
+ if (fchmod(backup_fd, openfile->current_stat->st_mode) == -1) {
statusbar(_("Error writing backup file %s: %s"), backupname,
strerror(errno));
free(backupname);