[openssh-commits] [openssh] 01/01: Update utimensat test.

git+noreply at mindrot.org git+noreply at mindrot.org
Fri Jun 7 23:53:13 AEST 2019


This is an automated email from the git hooks/post-receive script.

dtucker pushed a commit to branch master
in repository openssh.

commit 182898192d4b720e4faeafd5b39c2cfb3b92aa21
Author: Darren Tucker <dtucker at dtucker.net>
Date:   Fri Jun 7 23:47:37 2019 +1000

    Update utimensat test.
    
    POSIX specifies that when given a symlink, AT_SYMLINK_NOFOLLOW should
    update the symlink and not the destination.  The compat code doesn't
    have a way to do this, so where possible it fails instead of following a
    symlink when explicitly asked not to. Instead of checking for an explicit
    failure, check that it does not update the destination, which both the
    real and compat implmentations should honour.
    
    Inspired by github pull req #125 from chutzpah at gentoo.org.
---
 openbsd-compat/regress/utimensattest.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/openbsd-compat/regress/utimensattest.c b/openbsd-compat/regress/utimensattest.c
index a7bc7634..b29cef2f 100644
--- a/openbsd-compat/regress/utimensattest.c
+++ b/openbsd-compat/regress/utimensattest.c
@@ -83,14 +83,28 @@ main(void)
 		fail("mtim.tv_nsec", 45678000, sb.st_mtim.tv_nsec);
 #endif
 
+	/*
+	 * POSIX specifies that when given a symlink, AT_SYMLINK_NOFOLLOW
+	 * should update the symlink and not the destination.  The compat
+	 * code doesn't have a way to do this, so where possible it fails
+	 * with ENOSYS instead of following a symlink when explicitly asked
+	 * not to.  Here we just test that it does not update the destination.
+	 */
 	if (rename(TMPFILE, TMPFILE2) == -1)
 		fail("rename", 0, 0);
 	if (symlink(TMPFILE2, TMPFILE) == -1)
 		fail("symlink", 0, 0);
+	ts[0].tv_sec = 11223344;
+	ts[1].tv_sec = 55667788;
+	(void)utimensat(AT_FDCWD, TMPFILE, ts, AT_SYMLINK_NOFOLLOW);
+	if (stat(TMPFILE2, &sb) == -1)
+		fail("stat", 0, 0 );
+	if (sb.st_atime == 11223344)
+		fail("utimensat symlink st_atime", 0, 0 );
+	if (sb.st_mtime == 55667788)
+		fail("utimensat symlink st_mtime", 0, 0 );
 
-	if (utimensat(AT_FDCWD, TMPFILE, ts, AT_SYMLINK_NOFOLLOW) != -1)
-		fail("utimensat followed symlink", 0, 0);
-
+	/* Clean up */
 	if (!(unlink(TMPFILE) == 0 && unlink(TMPFILE2) == 0))
 		fail("unlink", 0, 0);
 	exit(0);

-- 
To stop receiving notification emails like this one, please contact
djm at mindrot.org.


More information about the openssh-commits mailing list