[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] linkat: avoid OS X 10.10 trailing slash with symlink bug
From: |
Pádraig Brady |
Subject: |
[PATCH] linkat: avoid OS X 10.10 trailing slash with symlink bug |
Date: |
Fri, 29 May 2015 04:05:57 +0100 |
On Darwin 14.3.0 linkat(,"path1",,"dangling_symlink/",)
causes the symlink to be dereferenced, and if it points
to a non existent file, that file will be created as
a hard link to "path1".
This fixes a test failure in test-linkat.c.
* m4/linkat.m4 (gl_FUNC_LINKAT): Augment the test with
this case. The existing workaround in linkat.c for
trailing slash issues, suffices for this case.
* doc/posix-functions/linkat.texi: Add OS X 10.10 to
the list of platforms with trailing slash issues.
---
ChangeLog | 14 ++++++++++++++
doc/posix-functions/linkat.texi | 2 +-
m4/linkat.m4 | 14 ++++++++++++--
3 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 035fb7a..82abe7f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2015-05-29 Pádraig Brady <address@hidden>
+
+ linkat: avoid OS X 10.10 trailing slash with symlink bug
+ On Darwin 14.3.0 linkat(,"path1",,"dangling_symlink/",)
+ causes the symlink to be dereferenced, and if it points
+ to a non existent file, that file will be created as
+ a hard link to "path1".
+ This fixes a test failure in test-linkat.c.
+ * m4/linkat.m4 (gl_FUNC_LINKAT): Augment the test with
+ this case. The existing workaround in linkat.c for
+ trailing slash issues, suffices for this case.
+ * doc/posix-functions/linkat.texi: Add OS X 10.10 to
+ the list of platforms with trailing slash issues.
+
2015-05-28 Pádraig Brady <address@hidden>
unlinkat: handle ignoring of ".." on Darwin 14
diff --git a/doc/posix-functions/linkat.texi b/doc/posix-functions/linkat.texi
index fadb350..8bdf9d3 100644
--- a/doc/posix-functions/linkat.texi
+++ b/doc/posix-functions/linkat.texi
@@ -19,7 +19,7 @@ Mac OS X 10.10.
@item
This function fails to reject trailing slashes on non-directories on
some platforms:
-AIX 7.1, Solaris 11 2011-11.
+AIX 7.1, Solaris 11 2011-11, Mac OS X 10.10.
@item
This functions does not support @code{AT_SYMLINK_FOLLOW} on some platforms:
Linux kernel 2.6.17.
diff --git a/m4/linkat.m4 b/m4/linkat.m4
index 567cb5d..03cf23a 100644
--- a/m4/linkat.m4
+++ b/m4/linkat.m4
@@ -52,7 +52,7 @@ AC_DEFUN([gl_FUNC_LINKAT],
AC_CACHE_CHECK([whether linkat handles trailing slash correctly],
[gl_cv_func_linkat_slash],
- [rm -rf conftest.a conftest.b conftest.c conftest.d
+ [rm -rf conftest.a conftest.b conftest.c conftest.d conftest.e conftest.s
AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[[#include <unistd.h>
@@ -83,6 +83,16 @@ AC_DEFUN([gl_FUNC_LINKAT],
if (linkat (AT_FDCWD, "conftest.a", AT_FDCWD, "conftest.d/",
AT_SYMLINK_FOLLOW) == 0)
result |= 8;
+
+ /* On OS X 10.10 a trailing "/" will cause the second path to be
+ dereferenced, and thus will succeed on a dangling symlink. */
+ if (symlink ("conftest.e", "conftest.s") == 0)
+ {
+ if (linkat (AT_FDCWD, "conftest.a", AT_FDCWD, "conftest.s/",
+ AT_SYMLINK_FOLLOW) == 0)
+ result |= 16;
+ }
+
return result;
]])],
[gl_cv_func_linkat_slash=yes],
@@ -93,7 +103,7 @@ AC_DEFUN([gl_FUNC_LINKAT],
*) gl_cv_func_linkat_slash="guessing no";;
esac
])
- rm -rf conftest.a conftest.b conftest.c conftest.d])
+ rm -rf conftest.a conftest.b conftest.c conftest.d conftest.e
conftest.s])
case "$gl_cv_func_linkat_slash" in
*yes) gl_linkat_slash_bug=0 ;;
*) gl_linkat_slash_bug=1 ;;
--
2.4.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] linkat: avoid OS X 10.10 trailing slash with symlink bug,
Pádraig Brady <=