r417 - in trunk/vim: debian upstream/patches

James Vega jamessan-guest at costa.debian.org
Tue Nov 29 21:19:09 UTC 2005


Author: jamessan-guest
Date: 2005-11-29 21:19:07 +0000 (Tue, 29 Nov 2005)
New Revision: 417

Added:
   trunk/vim/upstream/patches/6.4.002
Modified:
   trunk/vim/debian/README
   trunk/vim/debian/changelog
Log:
Upstream patch 6.4.002


Modified: trunk/vim/debian/README
===================================================================
--- trunk/vim/debian/README	2005-11-27 22:28:21 UTC (rev 416)
+++ trunk/vim/debian/README	2005-11-29 21:19:07 UTC (rev 417)
@@ -26,3 +26,4 @@
 
   SIZE  NAME     FIXES
   1705  6.4.001  (extra) Win32: can't compile the global IME code
+  7802  6.4.002  Unix: may change owner of wrong file in rare cases

Modified: trunk/vim/debian/changelog
===================================================================
--- trunk/vim/debian/changelog	2005-11-27 22:28:21 UTC (rev 416)
+++ trunk/vim/debian/changelog	2005-11-29 21:19:07 UTC (rev 417)
@@ -1,5 +1,8 @@
-vim (1:6.4-001+3) UNRELEASED; urgency=low
+vim (1:6.4-002+1) UNRELEASED; urgency=low
 
+  [ Debian VIM Maintainers ]
+  * New upstream patch (002), see README.gz for details.
+
   [ Stefano Zacchiroli ]
   * Added back vim-tiny package. (closes: #222138)
   * Reshaped vim packaging as follows:
@@ -35,7 +38,7 @@
   [ Matthijs Mohlmann ]
   * Updated syntax for sshd_config and ssh_config.
 
- -- Debian VIM Maintainers <pkg-vim-maintainers at lists.alioth.debian.org>  Sat, 26 Nov 2005 12:38:15 +0100
+ -- Debian VIM Maintainers <pkg-vim-maintainers at lists.alioth.debian.org>  Tue, 29 Nov 2005 15:59:35 -0500
 
 vim (1:6.4-001+2) unstable; urgency=low
 

Added: trunk/vim/upstream/patches/6.4.002
===================================================================
--- trunk/vim/upstream/patches/6.4.002	2005-11-27 22:28:21 UTC (rev 416)
+++ trunk/vim/upstream/patches/6.4.002	2005-11-29 21:19:07 UTC (rev 417)
@@ -0,0 +1,282 @@
+To: vim-dev at vim.org
+Subject: Patch 6.4.002
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.4.002
+Problem:    Unix: There is a small chance that the ownership of the wrong file
+	    is changed.
+Solution:   Use fchown() instead of chown() for the viminfo file and the
+	    backup file.
+Files:	    src/ex_cmds.c, src/fileio.c
+
+
+*** ../vim-6.4.001/src/ex_cmds.c	Thu Jul 21 22:23:54 2005
+--- src/ex_cmds.c	Tue Nov 29 17:23:48 2005
+***************
+*** 14,19 ****
+--- 14,23 ----
+  #include "vim.h"
+  #include "version.h"
+  
++ #ifdef HAVE_FCNTL_H
++ # include <fcntl.h>
++ #endif
++ 
+  #ifdef FEAT_EX_EXTRA
+  static int linelen __ARGS((int *has_tab));
+  #endif
+***************
+*** 1510,1516 ****
+  
+  	if (tempname != NULL)
+  	{
+! 	    fp_out = mch_fopen((char *)tempname, WRITEBIN);
+  
+  	    /*
+  	     * If we can't create in the same directory, try creating a
+--- 1514,1536 ----
+  
+  	if (tempname != NULL)
+  	{
+! 	    int fd;
+! 
+! 	    /* Use mch_open() to be able to use O_EXCL and set file
+! 	     * protection same as original file, but strip s-bit. */
+! #ifdef UNIX
+! 	    fd = mch_open((char *)tempname,
+! 		    O_CREAT|O_EXTRA|O_EXCL|O_WRONLY,
+! 				       (int)((st_old.st_mode & 0777) | 0600));
+! #else
+! 	    fd = mch_open((char *)tempname,
+! 		    O_CREAT|O_EXTRA|O_EXCL|O_WRONLY,
+! 				       0600);	/* r&w for user only */
+! #endif
+! 	    if (fd < 0)
+! 		fp_out = NULL;
+! 	    else
+! 		fp_out = fdopen(fd, WRITEBIN);
+  
+  	    /*
+  	     * If we can't create in the same directory, try creating a
+***************
+*** 1522,1539 ****
+  		if ((tempname = vim_tempname('o')) != NULL)
+  		    fp_out = mch_fopen((char *)tempname, WRITEBIN);
+  	    }
+! #ifdef UNIX
+  	    /*
+! 	     * Set file protection same as original file, but strip s-bit
+! 	     * and make sure the owner can read/write it.
+  	     */
+  	    if (fp_out != NULL)
+! 	    {
+! 		(void)mch_setperm(tempname,
+! 				  (long)((st_old.st_mode & 0777) | 0600));
+! 		/* this only works for root: */
+! 		(void)chown((char *)tempname, st_old.st_uid, st_old.st_gid);
+! 	    }
+  #endif
+  	}
+      }
+--- 1542,1555 ----
+  		if ((tempname = vim_tempname('o')) != NULL)
+  		    fp_out = mch_fopen((char *)tempname, WRITEBIN);
+  	    }
+! 
+! #if defined(UNIX) && defined(HAVE_FCHOWN)
+  	    /*
+! 	     * Make sure the owner can read/write it.  This only works for
+! 	     * root.
+  	     */
+  	    if (fp_out != NULL)
+! 		(void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
+  #endif
+  	}
+      }
+*** ../vim-6.4.001/src/fileio.c	Fri Mar 18 19:16:29 2005
+--- src/fileio.c	Tue Nov 29 16:51:26 2005
+***************
+*** 3087,3093 ****
+  	    if (st_old.st_nlink > 1
+  		    || mch_lstat((char *)fname, &st) < 0
+  		    || st.st_dev != st_old.st_dev
+! 		    || st.st_ino != st_old.st_ino)
+  		backup_copy = TRUE;
+  	    else
+  # endif
+--- 3087,3098 ----
+  	    if (st_old.st_nlink > 1
+  		    || mch_lstat((char *)fname, &st) < 0
+  		    || st.st_dev != st_old.st_dev
+! 		    || st.st_ino != st_old.st_ino
+! #  ifndef HAVE_FCHOWN
+! 		    || st.st_uid != st_old.st_uid
+! 		    || st.st_gid != st_old.st_gid
+! #  endif
+! 		    )
+  		backup_copy = TRUE;
+  	    else
+  # endif
+***************
+*** 3102,3125 ****
+  		for (i = 4913; ; i += 123)
+  		{
+  		    sprintf((char *)gettail(IObuff), "%d", i);
+! 		    if (mch_stat((char *)IObuff, &st) < 0)
+  			break;
+  		}
+  		fd = mch_open((char *)IObuff, O_CREAT|O_WRONLY|O_EXCL, perm);
+- 		close(fd);
+  		if (fd < 0)	/* can't write in directory */
+  		    backup_copy = TRUE;
+  		else
+  		{
+  # ifdef UNIX
+! 		    chown((char *)IObuff, st_old.st_uid, st_old.st_gid);
+! 		    (void)mch_setperm(IObuff, perm);
+  		    if (mch_stat((char *)IObuff, &st) < 0
+  			    || st.st_uid != st_old.st_uid
+  			    || st.st_gid != st_old.st_gid
+  			    || st.st_mode != perm)
+  			backup_copy = TRUE;
+  # endif
+  		    mch_remove(IObuff);
+  		}
+  	    }
+--- 3107,3133 ----
+  		for (i = 4913; ; i += 123)
+  		{
+  		    sprintf((char *)gettail(IObuff), "%d", i);
+! 		    if (mch_lstat((char *)IObuff, &st) < 0)
+  			break;
+  		}
+  		fd = mch_open((char *)IObuff, O_CREAT|O_WRONLY|O_EXCL, perm);
+  		if (fd < 0)	/* can't write in directory */
+  		    backup_copy = TRUE;
+  		else
+  		{
+  # ifdef UNIX
+! #  ifdef HAVE_FCHOWN
+! 		    fchown(fd, st_old.st_uid, st_old.st_gid);
+! #  endif
+  		    if (mch_stat((char *)IObuff, &st) < 0
+  			    || st.st_uid != st_old.st_uid
+  			    || st.st_gid != st_old.st_gid
+  			    || st.st_mode != perm)
+  			backup_copy = TRUE;
+  # endif
++ 		    /* Close the file before removing it, on MS-Windows we
++ 		     * can't delete an open file. */
++ 		    close(fd);
+  		    mch_remove(IObuff);
+  		}
+  	    }
+***************
+*** 3333,3343 ****
+  			 * bits for the group same as the protection bits for
+  			 * others.
+  			 */
+! 			if (st_new.st_gid != st_old.st_gid &&
+  # ifdef HAVE_FCHOWN  /* sequent-ptx lacks fchown() */
+! 				    fchown(bfd, (uid_t)-1, st_old.st_gid) != 0
+! # else
+! 			  chown((char *)backup, (uid_t)-1, st_old.st_gid) != 0
+  # endif
+  						)
+  			    mch_setperm(backup,
+--- 3341,3349 ----
+  			 * bits for the group same as the protection bits for
+  			 * others.
+  			 */
+! 			if (st_new.st_gid != st_old.st_gid
+  # ifdef HAVE_FCHOWN  /* sequent-ptx lacks fchown() */
+! 				&& fchown(bfd, (uid_t)-1, st_old.st_gid) != 0
+  # endif
+  						)
+  			    mch_setperm(backup,
+***************
+*** 3999,4004 ****
+--- 4005,4033 ----
+      }
+  #endif
+  
++ #ifdef UNIX
++     /* When creating a new file, set its owner/group to that of the original
++      * file.  Get the new device and inode number. */
++     if (backup != NULL && !backup_copy)
++     {
++ # ifdef HAVE_FCHOWN
++ 	struct stat	st;
++ 
++ 	/* don't change the owner when it's already OK, some systems remove
++ 	 * permission or ACL stuff */
++ 	if (mch_stat((char *)wfname, &st) < 0
++ 		|| st.st_uid != st_old.st_uid
++ 		|| st.st_gid != st_old.st_gid)
++ 	{
++ 	    fchown(fd, st_old.st_uid, st_old.st_gid);
++ 	    if (perm >= 0)	/* set permission again, may have changed */
++ 		(void)mch_setperm(wfname, perm);
++ 	}
++ # endif
++ 	buf_setino(buf);
++     }
++ #endif
++ 
+      if (close(fd) != 0)
+      {
+  	errmsg = (char_u *)_("E512: Close failed");
+***************
+*** 4021,4047 ****
+       * ACL on a file the user doesn't own). */
+      if (!backup_copy)
+  	mch_set_acl(wfname, acl);
+- #endif
+- 
+- #ifdef UNIX
+-     /* When creating a new file, set its owner/group to that of the original
+-      * file.  Get the new device and inode number. */
+-     if (backup != NULL && !backup_copy)
+-     {
+- 	struct stat	st;
+- 
+- 	/* don't change the owner when it's already OK, some systems remove
+- 	 * permission or ACL stuff */
+- 	if (mch_stat((char *)wfname, &st) < 0
+- 		|| st.st_uid != st_old.st_uid
+- 		|| st.st_gid != st_old.st_gid)
+- 	{
+- 	    chown((char *)wfname, st_old.st_uid, st_old.st_gid);
+- 	    if (perm >= 0)	/* set permission again, may have changed */
+- 		(void)mch_setperm(wfname, perm);
+- 	}
+- 	buf_setino(buf);
+-     }
+  #endif
+  
+  
+--- 4050,4055 ----
+*** ../vim-6.4.001/src/version.c	Mon Oct 17 11:09:59 2005
+--- src/version.c	Tue Nov 29 19:23:24 2005
+***************
+*** 643,644 ****
+--- 643,646 ----
+  {   /* Add new patch number below this line */
++ /**/
++     2,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+250. You've given up the search for the "perfect woman" and instead,
+     sit in front of the PC until you're just too tired to care.
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://www.ICCF.nl         ///




More information about the pkg-vim-maintainers mailing list