diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2015-02-09 15:37:51 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2015-02-09 15:37:51 -0800 |
commit | b3aa1878670c3584716cdf6d79c894277a2c7c00 (patch) | |
tree | f9ff25c700d2e32abb97724e260387b36adf522e | |
parent | 0986b6d9917b719165eb8a18a305cba2e920c007 (diff) |
Use a symlink instead of a hard link for fishd.socket compatibility path
On OS X, work around filesystem corruption triggered by having hard
links in /tmp, by using a symlink instead.
-rw-r--r-- | fishd.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -626,12 +626,21 @@ repeat: // Attempt to hardlink the old socket name so that old versions of fish keep working on upgrade // Not critical if it fails + // On OS X, we use symlinks instead of hardlinks to work around a filesystem corruption bug http://openradar.appspot.com/19687545 + // On Linux, we use hardlinks instead of symlinks for compatibility with the Yama security model - see #1859 + int (*linkfunc)(const char *, const char *); +#if __APPLE__ + linkfunc = symlink; +#else + linkfunc = link; +#endif + if (unlink(old_sock_name.c_str()) != 0 && errno != ENOENT) { debug(0, L"Could not create legacy socket path"); wperror(L"unlink"); } - else if (link(sock_name.c_str(), old_sock_name.c_str()) != 0) + else if (linkfunc(sock_name.c_str(), old_sock_name.c_str()) != 0) { debug(0, L"Could not create legacy socket path"); wperror(L"link"); |