fix timestamps when moving home dirs to another file system (#278571)
This commit is contained in:
parent
96de9ca62a
commit
7a19049eec
2 changed files with 123 additions and 1 deletions
117
shadow-4.0.18.1-mtime.patch
Normal file
117
shadow-4.0.18.1-mtime.patch
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
diff -up shadow-4.0.18.1/libmisc/copydir.c.utime shadow-4.0.18.1/libmisc/copydir.c
|
||||||
|
--- shadow-4.0.18.1/libmisc/copydir.c.utime 2007-10-16 11:36:54.000000000 +0200
|
||||||
|
+++ shadow-4.0.18.1/libmisc/copydir.c 2007-10-18 11:59:22.000000000 +0200
|
||||||
|
@@ -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 @@ int copy_tree (const char *src_root, con
|
||||||
|
struct DIRECT *ent;
|
||||||
|
struct stat sb;
|
||||||
|
struct link_name *lp;
|
||||||
|
+ struct timeval mt[2];
|
||||||
|
DIR *dir;
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -215,6 +217,18 @@ int copy_tree (const char *src_root, con
|
||||||
|
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 @@ int copy_tree (const char *src_root, con
|
||||||
|
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 @@ int copy_tree (const char *src_root, con
|
||||||
|
#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 @@ int copy_tree (const char *src_root, con
|
||||||
|
|| 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,14 +369,25 @@ int copy_tree (const char *src_root, con
|
||||||
|
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++;
|
|
@ -5,7 +5,7 @@
|
||||||
Summary: Utilities for managing accounts and shadow password files
|
Summary: Utilities for managing accounts and shadow password files
|
||||||
Name: shadow-utils
|
Name: shadow-utils
|
||||||
Version: 4.0.18.1
|
Version: 4.0.18.1
|
||||||
Release: 18%{?dist}
|
Release: 19%{?dist}
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
URL: http://shadow.pld.org.pl/
|
URL: http://shadow.pld.org.pl/
|
||||||
Source0: ftp://ftp.pld.org.pl/software/shadow/shadow-%{version}.tar.bz2
|
Source0: ftp://ftp.pld.org.pl/software/shadow/shadow-%{version}.tar.bz2
|
||||||
|
@ -28,6 +28,7 @@ Patch12: shadow-4.0.18.1-appendOption.patch
|
||||||
Patch13: shadow-4.0.18.1-sysAccount.patch
|
Patch13: shadow-4.0.18.1-sysAccount.patch
|
||||||
Patch14: shadow-4.0.18.1-findNewUidOnce.patch
|
Patch14: shadow-4.0.18.1-findNewUidOnce.patch
|
||||||
Patch15: shadow-4.0.18.1-groupLoop.patch
|
Patch15: shadow-4.0.18.1-groupLoop.patch
|
||||||
|
Patch16: shadow-4.0.18.1-mtime.patch
|
||||||
|
|
||||||
License: BSD
|
License: BSD
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
|
@ -72,6 +73,7 @@ cp %{SOURCE3} lib/nscd.c
|
||||||
%patch13 -p1 -b .sysAccount
|
%patch13 -p1 -b .sysAccount
|
||||||
%patch14 -p1 -b .findNewUidOnce
|
%patch14 -p1 -b .findNewUidOnce
|
||||||
%patch15 -p1 -b .groupLoop
|
%patch15 -p1 -b .groupLoop
|
||||||
|
%patch16 -p1 -b .mtime
|
||||||
|
|
||||||
rm po/*.gmo
|
rm po/*.gmo
|
||||||
rm po/stamp-po
|
rm po/stamp-po
|
||||||
|
@ -213,6 +215,9 @@ rm -rf $RPM_BUILD_ROOT
|
||||||
%{_mandir}/man8/faillog.8*
|
%{_mandir}/man8/faillog.8*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Oct 18 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-19
|
||||||
|
- fix timestamps when moving home dirs to another file system (#278571)
|
||||||
|
|
||||||
* Mon Oct 08 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-18
|
* Mon Oct 08 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-18
|
||||||
- mark localized man pages with %%lang
|
- mark localized man pages with %%lang
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue