To: vim-dev@vim.org Subject: Patch 6.3b.021 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ Patch 6.3b.021 Problem: The swapfile is not readable for others, the ATTENTION prompt does not show all info when someone else is editing the same file. (Marcel Svitalsky) Solution: Use the protection of original file for the swapfile and set it after creating the swapfile. Files: src/fileio.c *** ../vim-6.3b.020/src/fileio.c Fri May 21 13:40:43 2004 --- src/fileio.c Tue Jun 1 15:02:00 2004 *************** *** 246,251 **** --- 246,252 ---- long linerest = 0; /* remaining chars in line */ #ifdef UNIX int perm = 0; + int swap_mode = -1; /* protection bits for swap file */ #else int perm; #endif *************** *** 452,464 **** #endif #ifdef UNIX /* ! * Set the protection bits of the swap file equal to the original ! * file. This makes it possible for others to read the name of the ! * original file from the swapfile. */ ! if (curbuf->b_ml.ml_mfp->mf_fname != NULL) ! (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, ! (long)((st.st_mode & 0777) | 0600)); #endif #ifdef FEAT_CW_EDITOR /* Get the FSSpec on MacOS --- 453,469 ---- #endif #ifdef UNIX /* ! * Use the protection bits of the original file for the swap file. ! * This makes it possible for others to read the name of the ! * edited file from the swapfile, but only if they can read the ! * edited file. ! * Remove the "write" and "execute" bits for group and others ! * (they must not write the swapfile). ! * Add the "read" and "write" bits for the user, otherwise we may ! * not be able to write to the file ourselves. ! * Setting the bits is done below, after creating the swap file. */ ! swap_mode = (st.st_mode & 0644) | 0600; #endif #ifdef FEAT_CW_EDITOR /* Get the FSSpec on MacOS *************** *** 617,623 **** --- 622,635 ---- #ifdef FEAT_QUICKFIX if (!bt_dontwrite(curbuf)) #endif + { check_need_swap(newfile); + #ifdef UNIX + /* Set swap file protection bits after creating it. */ + if (swap_mode > 0 && curbuf->b_ml.ml_mfp->mf_fname != NULL) + (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode); + #endif + } #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) /* If "Quit" selected at ATTENTION dialog, don't load the file */ *** ../vim-6.3b.020/src/version.c Tue Jun 1 09:46:26 2004 --- src/version.c Tue Jun 1 20:43:56 2004 *************** *** 643,644 **** --- 643,646 ---- { /* Add new patch number below this line */ + /**/ + 21, /**/ -- How To Keep A Healthy Level Of Insanity: 9. As often as possible, skip rather than walk. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ Project leader for A-A-P -- http://www.A-A-P.org /// \\\ Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///