diff options
Diffstat (limited to 'system/openssh/bsd-compatible-realpath.patch')
-rw-r--r-- | system/openssh/bsd-compatible-realpath.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/system/openssh/bsd-compatible-realpath.patch b/system/openssh/bsd-compatible-realpath.patch new file mode 100644 index 000000000..1cdb4f7c5 --- /dev/null +++ b/system/openssh/bsd-compatible-realpath.patch @@ -0,0 +1,62 @@ +fix issues with fortify-headers and the way openssh handles the needed +BSD compatible realpath(3). + +unconditionally use the provided realpath() as otherwise cross-builds +would try to use musl realpath() which is posix compliant and not +working to openssh expectations. + +diff -ru openssh-7.2p2.orig/openbsd-compat/openbsd-compat.h openssh-7.2p2/openbsd-compat/openbsd-compat.h +--- openssh-7.2p2.orig/openbsd-compat/openbsd-compat.h 2016-03-09 20:04:48.000000000 +0200 ++++ openssh-7.2p2/openbsd-compat/openbsd-compat.h 2016-07-18 13:33:16.260357745 +0300 +@@ -68,17 +68,7 @@ + void *reallocarray(void *, size_t, size_t); + #endif + +-#if !defined(HAVE_REALPATH) || defined(BROKEN_REALPATH) +-/* +- * glibc's FORTIFY_SOURCE can redefine this and prevent us picking up the +- * compat version. +- */ +-# ifdef BROKEN_REALPATH +-# define realpath(x, y) _ssh_compat_realpath(x, y) +-# endif +- +-char *realpath(const char *path, char *resolved); +-#endif ++char *ssh_realpath(const char *path, char *resolved); + + #ifndef HAVE_RRESVPORT_AF + int rresvport_af(int *alport, sa_family_t af); +diff -ru openssh-7.2p2.orig/openbsd-compat/realpath.c openssh-7.2p2/openbsd-compat/realpath.c +--- openssh-7.2p2.orig/openbsd-compat/realpath.c 2016-03-09 20:04:48.000000000 +0200 ++++ openssh-7.2p2/openbsd-compat/realpath.c 2016-07-18 13:33:45.420721690 +0300 +@@ -31,7 +31,7 @@ + + #include "includes.h" + +-#if !defined(HAVE_REALPATH) || defined(BROKEN_REALPATH) ++#if 1 + + #include <sys/types.h> + #include <sys/param.h> +@@ -58,7 +58,7 @@ + * in which case the path which caused trouble is left in (resolved). + */ + char * +-realpath(const char *path, char *resolved) ++ssh_realpath(const char *path, char *resolved) + { + struct stat sb; + char *p, *q, *s; +diff -ru openssh-7.2p2.orig/sftp-server.c openssh-7.2p2/sftp-server.c +--- openssh-7.2p2.orig/sftp-server.c 2016-03-09 20:04:48.000000000 +0200 ++++ openssh-7.2p2/sftp-server.c 2016-07-18 13:34:29.131267241 +0300 +@@ -1162,7 +1162,7 @@ + } + debug3("request %u: realpath", id); + verbose("realpath \"%s\"", path); +- if (realpath(path, resolvedname) == NULL) { ++ if (ssh_realpath(path, resolvedname) == NULL) { + send_status(id, errno_to_portable(errno)); + } else { + Stat s; |