[Pkg-shadow-commits] r1493 - in upstream/trunk: . libmisc

nekral-guest at alioth.debian.org nekral-guest at alioth.debian.org
Wed Dec 26 13:54:23 UTC 2007


Author: nekral-guest
Date: 2007-12-26 13:54:23 +0000 (Wed, 26 Dec 2007)
New Revision: 1493

Modified:
   upstream/trunk/ChangeLog
   upstream/trunk/NEWS
   upstream/trunk/libmisc/copydir.c
Log:
Merge RedHat's patch shadow-4.0.18.1-mtime.patch:
    * NEWS: Document that usermod will now preserve user's file modification
    and access time.
    * libmisc/copydir.c: Preserve the access and modification time of copied
    files. This is important for usermod. This will also impact useradd, for
    the skeleton files, but this is not important.
    * libmisc/copydir.c: Stop and return an error if a file could not be
    closed after during a copy.


Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog	2007-12-26 13:18:27 UTC (rev 1492)
+++ upstream/trunk/ChangeLog	2007-12-26 13:54:23 UTC (rev 1493)
@@ -1,5 +1,16 @@
 2007-12-26  Nicolas François  <nicolas.francois at centraliens.net>
 
+	Merge RedHat's patch shadow-4.0.18.1-mtime.patch:
+	* NEWS: Document that usermod will now preserve user's file modification
+	and access time.
+	* libmisc/copydir.c: Preserve the access and modification time of copied
+	files. This is important for usermod. This will also impact useradd, for
+	the skeleton files, but this is not important.
+	* libmisc/copydir.c: Stop and return an error if a file could not be
+	closed after during a copy.
+
+2007-12-26  Nicolas François  <nicolas.francois at centraliens.net>
+
 	Cleanups:
 	* src/useradd.c (find_new_gid): Check that gflg is not set (assert).
 	* src/useradd.c (find_new_gid): Do not check the group name uniqueness

Modified: upstream/trunk/NEWS
===================================================================
--- upstream/trunk/NEWS	2007-12-26 13:18:27 UTC (rev 1492)
+++ upstream/trunk/NEWS	2007-12-26 13:54:23 UTC (rev 1493)
@@ -7,6 +7,9 @@
   * Do not install the shadow library per default.
 - useradd
   * New option -l to avoid adding the user to the lastlog and faillog databases.
+- usermod
+  * Keep the access and modification time of files when moving an user's home
+    directory.
 
 shadow-4.0.18.2 -> shadow-4.1.0						09-12-2008
 

Modified: upstream/trunk/libmisc/copydir.c
===================================================================
--- upstream/trunk/libmisc/copydir.c	2007-12-26 13:18:27 UTC (rev 1492)
+++ upstream/trunk/libmisc/copydir.c	2007-12-26 13:54:23 UTC (rev 1493)
@@ -33,6 +33,7 @@
 
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <sys/time.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include "prototypes.h"
@@ -154,6 +155,7 @@
 	struct DIRECT *ent;
 	struct stat sb;
 	struct link_name *lp;
+	struct timeval mt[2];
 	DIR *dir;
 
 	/*
@@ -215,6 +217,18 @@
 		if (LSTAT (src_name, &sb) == -1)
 			continue;
 
+#if  defined(_BSD_SOURCE) || defined(_SVID_SOURCE)
+		mt[0].tv_sec  = sb.st_atim.tv_sec;
+		mt[0].tv_usec = sb.st_atim.tv_nsec / 1000;
+		mt[1].tv_sec  = sb.st_mtim.tv_sec;
+		mt[1].tv_usec = sb.st_mtim.tv_nsec / 1000;
+#else
+		mt[0].tv_sec  = sb.st_atime;
+		mt[0].tv_usec = sb.st_atimensec / 1000;
+		mt[1].tv_sec  = sb.st_mtime;
+		mt[1].tv_usec = sb.st_mtimensec / 1000;
+#endif
+
 		if (S_ISDIR (sb.st_mode)) {
 
 			/*
@@ -230,10 +244,12 @@
 				      uid == (uid_t) - 1 ? sb.st_uid : uid,
 				      gid == (gid_t) - 1 ? sb.st_gid : gid)
 			    || chmod (dst_name, sb.st_mode)
-			    || copy_tree (src_name, dst_name, uid, gid)) {
+			    || copy_tree (src_name, dst_name, uid, gid)
+			    || utimes (dst_name, mt)) {
 				err++;
 				break;
 			}
+
 			continue;
 		}
 #ifdef	S_IFLNK
@@ -270,13 +286,21 @@
 #ifdef WITH_SELINUX
 			selinux_file_context (dst_name);
 #endif
-			if (symlink (oldlink, dst_name) ||
-			    lchown (dst_name,
+			if (symlink (oldlink, dst_name)
+			    || lchown (dst_name,
 				    uid == (uid_t) - 1 ? sb.st_uid : uid,
 				    gid == (gid_t) - 1 ? sb.st_gid : gid)) {
 				err++;
 				break;
 			}
+
+			/* 2007-10-18: We don't care about
+			 *  exit status of lutimes because
+			 *  it returns ENOSYS on many system
+			 *  - not implemented
+			 */
+			lutimes (dst_name, mt);
+
 			continue;
 		}
 #endif
@@ -314,10 +338,12 @@
 			    || chown (dst_name,
 				      uid == (uid_t) - 1 ? sb.st_uid : uid,
 				      gid == (gid_t) - 1 ? sb.st_gid : gid)
-			    || chmod (dst_name, sb.st_mode & 07777)) {
+			    || chmod (dst_name, sb.st_mode & 07777)
+			    || utimes (dst_name, mt)) {
 				err++;
 				break;
 			}
+
 			continue;
 		}
 
@@ -343,15 +369,26 @@
 			err++;
 			break;
 		}
+
 		while ((cnt = read (ifd, buf, sizeof buf)) > 0) {
 			if (write (ofd, buf, cnt) != cnt) {
 				cnt = -1;
 				break;
 			}
 		}
+
 		close (ifd);
-		close (ofd);
 
+		if (futimes (ofd, mt) != 0) {
+			err++;
+			break;
+		}
+
+		if (close (ofd) != 0) {
+			err++;
+			break;
+		}
+
 		if (cnt == -1) {
 			err++;
 			break;




More information about the Pkg-shadow-commits mailing list