2010-06-20 Chris Allegretta <chrisa@asty.org>

* New option allow_insecure_backup, allows the previous security
          fixes for backup files to be overridden if you're really positive
          you want to.  Fixes Savannah bug 29732 by Brian Szymanski <skibrianski>.



git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4508 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
Chris Allegretta 2010-06-21 03:10:10 +00:00
parent 86be3af75f
commit 0acca27ac7
6 changed files with 16 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2010-06-20 Chris Allegretta <chrisa@asty.org>
* New rc file option allow_insecure_backup, allows the previous security
fixes for backup files to be overridden if you're really positive
you want to. Fixes Savannah bug 29732 by Brian Szymanski <skibrianski>.
2010-05-23 Chris Allegretta <chrisa@asty.org> 2010-05-23 Chris Allegretta <chrisa@asty.org>
* files.c (write_file): Don't even try to chown() the backup * 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 file unless we're root, since it's probably going to fail if

View File

@ -57,6 +57,11 @@ match \fI"\fP, \fI'\fP, \fI)\fP, \fI>\fP, \fI]\fP, and \fI}\fP.
The supported commands and arguments are: The supported commands and arguments are:
.TP 3 .TP 3
.B set/unset allow_insecure_backup
When backing up files, allow the backup to succeed even if its permissions
can't be (re)set due to special OS considerations. You should
NOT enable this option unless you are sure you need it.
.TP
.B set/unset autoindent .B set/unset autoindent
Use auto-indentation. Use auto-indentation.
.TP .TP

View File

@ -4,7 +4,7 @@ syntax "nanorc" "\.?nanorc$"
## Possible errors and parameters ## Possible errors and parameters
icolor brightwhite "^[[:space:]]*((un)?set|include|syntax|i?color).*$" icolor brightwhite "^[[:space:]]*((un)?set|include|syntax|i?color).*$"
## Keywords ## Keywords
icolor brightgreen "^[[:space:]]*(set|unset)[[:space:]]+(autoindent|backup|backupdir|backwards|boldtext|brackets|casesensitive|const|cut|fill|historylog|matchbrackets|morespace|mouse|multibuffer|noconvert|nofollow|nohelp|nonewlines|nowrap|operatingdir|preserve|punct)\>" "^[[:space:]]*(set|unset)[[:space:]]+(quickblank|quotestr|rebinddelete|rebindkeypad|regexp|smarthome|smooth|softwrap|speller|suspend|suspendenable|tabsize|tabstospaces|tempfile|undo|view|whitespace|wordbounds)\>" icolor brightgreen "^[[:space:]]*(set|unset)[[:space:]]+(allow_insecure_backup|autoindent|backup|backupdir|backwards|boldtext|brackets|casesensitive|const|cut|fill|historylog|matchbrackets|morespace|mouse|multibuffer|noconvert|nofollow|nohelp|nonewlines|nowrap|operatingdir|preserve|punct)\>" "^[[:space:]]*(set|unset)[[:space:]]+(quickblank|quotestr|rebinddelete|rebindkeypad|regexp|smarthome|smooth|softwrap|speller|suspend|suspendenable|tabsize|tabstospaces|tempfile|undo|view|whitespace|wordbounds)\>"
icolor green "^[[:space:]]*(set|unset|include|syntax|header)\>" icolor green "^[[:space:]]*(set|unset|include|syntax|header)\>"
## Colors ## Colors
icolor yellow "^[[:space:]]*i?color[[:space:]]*(bright)?(white|black|red|blue|green|yellow|magenta|cyan)?(,(white|black|red|blue|green|yellow|magenta|cyan))?\>" icolor yellow "^[[:space:]]*i?color[[:space:]]*(bright)?(white|black|red|blue|green|yellow|magenta|cyan)?(,(white|black|red|blue|green|yellow|magenta|cyan))?\>"

View File

@ -1615,7 +1615,8 @@ bool write_file(const char *name, FILE *f_open, bool tmp, append_type
/* We shouldn't worry about chown()ing something if we're not /* We shouldn't worry about chown()ing something if we're not
root, since it's likely to fail! */ root, since it's likely to fail! */
if (geteuid() == NANO_ROOT_UID && fchown(backup_fd, if (geteuid() == NANO_ROOT_UID && fchown(backup_fd,
openfile->current_stat->st_uid, openfile->current_stat->st_gid) == -1 ) { openfile->current_stat->st_uid, openfile->current_stat->st_gid) == -1
&& !ISSET(INSECURE_BACKUP)) {
statusbar(_("Error writing backup file %s: %s"), backupname, statusbar(_("Error writing backup file %s: %s"), backupname,
strerror(errno)); strerror(errno));
free(backupname); free(backupname);
@ -1623,7 +1624,7 @@ bool write_file(const char *name, FILE *f_open, bool tmp, append_type
goto cleanup_and_exit; goto cleanup_and_exit;
} }
if (fchmod(backup_fd, openfile->current_stat->st_mode) == -1) { if (fchmod(backup_fd, openfile->current_stat->st_mode) == -1 && !ISSET(INSECURE_BACKUP)) {
statusbar(_("Error writing backup file %s: %s"), backupname, statusbar(_("Error writing backup file %s: %s"), backupname,
strerror(errno)); strerror(errno));
free(backupname); free(backupname);

View File

@ -480,6 +480,7 @@ enum
REBIND_KEYPAD, REBIND_KEYPAD,
NO_CONVERT, NO_CONVERT,
BACKUP_FILE, BACKUP_FILE,
INSECURE_BACKUP,
NO_COLOR_SYNTAX, NO_COLOR_SYNTAX,
PRESERVE, PRESERVE,
HISTORYLOG, HISTORYLOG,

View File

@ -77,6 +77,7 @@ static const rcoption rcopts[] = {
#ifndef NANO_TINY #ifndef NANO_TINY
{"autoindent", AUTOINDENT}, {"autoindent", AUTOINDENT},
{"backup", BACKUP_FILE}, {"backup", BACKUP_FILE},
{"allow_insecure_backup", INSECURE_BACKUP},
{"backupdir", 0}, {"backupdir", 0},
{"backwards", BACKWARDS_SEARCH}, {"backwards", BACKWARDS_SEARCH},
{"casesensitive", CASE_SENSITIVE}, {"casesensitive", CASE_SENSITIVE},