Author: adamg                        Date: Wed Nov 30 15:37:10 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- new

---- Files affected:
SOURCES:
   6.4.002 (NONE -> 1.1)  (NEW), 6.4.003 (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/6.4.002
diff -u /dev/null SOURCES/6.4.002:1.1
--- /dev/null   Wed Nov 30 16:37:10 2005
+++ SOURCES/6.4.002     Wed Nov 30 16:37:04 2005
@@ -0,0 +1,282 @@
+To: [EMAIL PROTECTED]
+Subject: Patch 6.4.002
+Fcc: outbox
+From: Bram Moolenaar <[EMAIL PROTECTED]>
+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 -- [EMAIL PROTECTED] -- 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         ///

================================================================
Index: SOURCES/6.4.003
diff -u /dev/null SOURCES/6.4.003:1.1
--- /dev/null   Wed Nov 30 16:37:10 2005
+++ SOURCES/6.4.003     Wed Nov 30 16:37:04 2005
@@ -0,0 +1,49 @@
+To: [EMAIL PROTECTED]
+Subject: Patch 6.4.003
+Fcc: outbox
+From: Bram Moolenaar <[EMAIL PROTECTED]>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 6.4.003 (after 6.4.002)
+Problem:    Build problem on non-Unix systems.
+Solution:   Use stat() instead of lstat().
+Files:     src/fileio.c
+
+
+*** ../vim-6.4.002/src/fileio.c        Tue Nov 29 19:29:15 2005
+--- src/fileio.c       Wed Nov 30 11:48:29 2005
+***************
+*** 3107,3113 ****
+--- 3107,3117 ----
+               for (i = 4913; ; i += 123)
+               {
+                   sprintf((char *)gettail(IObuff), "%d", i);
++ #ifdef HAVE_LSTAT
+                   if (mch_lstat((char *)IObuff, &st) < 0)
++ #else
++                  if (mch_stat((char *)IObuff, &st) < 0)
++ #endif
+                       break;
+               }
+               fd = mch_open((char *)IObuff, O_CREAT|O_WRONLY|O_EXCL, perm);
+*** ../vim-6.4.002/src/version.c       Tue Nov 29 19:29:15 2005
+--- src/version.c      Wed Nov 30 11:49:19 2005
+***************
+*** 643,644 ****
+--- 643,646 ----
+  {   /* Add new patch number below this line */
++ /**/
++     3,
+  /**/
+
+-- 
+If VIM were a woman, I'd marry her.  Slim, organized, helpful
+and beautiful; what's not to like?     --David A. Rogers
+
+ /// Bram Moolenaar -- [EMAIL PROTECTED] -- 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         ///
================================================================
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to