To: vim_dev@googlegroups.com Subject: Patch 8.0.1287 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.1287 Problem: The temp file used when updating the viminfo file may have the wrong permissions if setting the group fails. Solution: Check if the group matches and reduce permissions if not. Files: src/ex_cmds.c *** ../vim-8.0.1286/src/ex_cmds.c 2017-10-24 22:32:56.205116305 +0200 --- src/ex_cmds.c 2017-11-11 16:19:06.469683366 +0100 *************** *** 2007,2013 **** /* * If we can't create in the same directory, try creating a ! * "normal" temp file. */ if (fp_out == NULL) { --- 2007,2014 ---- /* * If we can't create in the same directory, try creating a ! * "normal" temp file. This is just an attempt, renaming the temp ! * file might fail as well. */ if (fp_out == NULL) { *************** *** 2018,2028 **** #if defined(UNIX) && defined(HAVE_FCHOWN) /* ! * Make sure the owner can read/write it. This only works for ! * root. */ if (fp_out != NULL) ! ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid); #endif } } --- 2019,2047 ---- #if defined(UNIX) && defined(HAVE_FCHOWN) /* ! * Make sure the original owner can read/write the tempfile and ! * otherwise preserve permissions, making sure the group matches. */ if (fp_out != NULL) ! { ! stat_T tmp_st; ! ! if (mch_stat((char *)tempname, &tmp_st) >= 0) ! { ! if (st_old.st_uid != tmp_st.st_uid) ! /* Changing the owner might fail, in which case the ! * file will now owned by the current user, oh well. */ ! ignored = fchown(fileno(fp_out), st_old.st_uid, -1); ! if (st_old.st_gid != tmp_st.st_gid ! && fchown(fileno(fp_out), -1, st_old.st_gid) == -1) ! /* can't set the group to what it should be, remove ! * group permissions */ ! (void)mch_setperm(tempname, 0600); ! } ! else ! /* can't stat the file, set conservative permissions */ ! (void)mch_setperm(tempname, 0600); ! } #endif } } *************** *** 7536,7542 **** int idx; sign_T *sp; sign_T *sp_prev; ! buf_T *buf; /* Parse the subcommand. */ p = skiptowhite(arg); --- 7555,7561 ---- int idx; sign_T *sp; sign_T *sp_prev; ! buf_T *buf = NULL; /* Parse the subcommand. */ p = skiptowhite(arg); *** ../vim-8.0.1286/src/version.c 2017-11-11 15:53:56.520172366 +0100 --- src/version.c 2017-11-11 16:44:08.143299609 +0100 *************** *** 763,764 **** --- 763,766 ---- { /* Add new patch number below this line */ + /**/ + 1287, /**/ -- "The future's already arrived - it's just not evenly distributed yet." -- William Gibson /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///