]> git.wh0rd.org Git - nano.git/commitdiff
2010-05-23 Chris Allegretta <chrisa@asty.org>
authorChris Allegretta <chrisa@asty.org>
Sun, 23 May 2010 04:30:23 +0000 (04:30 +0000)
committerChris Allegretta <chrisa@asty.org>
Sun, 23 May 2010 04:30:23 +0000 (04:30 +0000)
        * 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

ChangeLog
src/files.c

index 8f6a6f8475f863420408015a12d96357b2ea53ae..674c1722483fb52e02441318ed056b6141d7868a 100644 (file)
--- 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
index 07915ce89d34df20371802f693d246ee4e0c12e6..6f4b9182ae091e376d19f6d9ce0d9921412e71b5 100644 (file)
@@ -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);