From: Lennart Poettering Date: Mon, 1 Feb 2021 15:57:46 +0000 (+0100) Subject: copy: also attempt to copy atime/mtime when copying symlinks, device nodes, fifos X-Git-Tag: v248-rc1~209^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fb934d53f90dafeed9c39468ce2c3a73baf4d71d;p=thirdparty%2Fsystemd.git copy: also attempt to copy atime/mtime when copying symlinks, device nodes, fifos --- diff --git a/src/basic/copy.c b/src/basic/copy.c index aa805bb8e25..c2c337c1a1b 100644 --- a/src/basic/copy.c +++ b/src/basic/copy.c @@ -391,9 +391,10 @@ static int fd_copy_symlink( uid_is_valid(override_uid) ? override_uid : st->st_uid, gid_is_valid(override_gid) ? override_gid : st->st_gid, AT_SYMLINK_NOFOLLOW) < 0) - return -errno; + r = -errno; - return 0; + (void) utimensat(dt, to, (struct timespec[]) { st->st_atim, st->st_mtim }, AT_SYMLINK_NOFOLLOW); + return r; } /* Encapsulates the database we store potential hardlink targets in */ @@ -693,6 +694,8 @@ static int fd_copy_fifo( if (fchmodat(dt, to, st->st_mode & 07777, 0) < 0) r = -errno; + (void) utimensat(dt, to, (struct timespec[]) { st->st_atim, st->st_mtim }, AT_SYMLINK_NOFOLLOW); + (void) memorize_hardlink(hardlink_context, st, dt, to); return r; } @@ -739,6 +742,8 @@ static int fd_copy_node( if (fchmodat(dt, to, st->st_mode & 07777, 0) < 0) r = -errno; + (void) utimensat(dt, to, (struct timespec[]) { st->st_atim, st->st_mtim }, AT_SYMLINK_NOFOLLOW); + (void) memorize_hardlink(hardlink_context, st, dt, to); return r; }