loolwsd/LOOLKit.cpp | 42 ++++++++++++++++++++++++++++---------- loolwsd/LOOLWSD.cpp | 1 loolwsd/loolwsd-systemplate-setup | 8 ------- 3 files changed, 32 insertions(+), 19 deletions(-)
New commits: commit ebfa339da02337274d332763b0e1ace952550f2a Author: Michael Meeks <michael.me...@collabora.com> Date: Fri Apr 15 16:16:36 2016 +0100 Cleanup symlinking and add realpath symlink if necessary. diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index 18b0da2..7f55ec9 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -16,6 +16,9 @@ #include <sys/capability.h> #include <unistd.h> #include <utime.h> +#include <limits.h> +#include <stdlib.h> +#include <malloc.h> #include <atomic> #include <cassert> @@ -820,6 +823,27 @@ private: std::atomic_size_t _clientViews; }; +namespace { + void symlinkPathToJail(const Path jailPath, const std::string &loTemplate, + const std::string &loSubPath) + { + Path symlinkSource(jailPath, Path(loTemplate.substr(1))); + File(symlinkSource.parent()).createDirectories(); + + std::string symlinkTarget; + for (auto i = 0; i < Path(loTemplate).depth(); i++) + symlinkTarget += "../"; + symlinkTarget += loSubPath; + + Log::debug("symlink(\"" + symlinkTarget + "\",\"" + symlinkSource.toString() + "\")"); + if (symlink(symlinkTarget.c_str(), symlinkSource.toString().c_str()) == -1) + { + Log::syserror("symlink(\"" + symlinkTarget + "\",\"" + symlinkSource.toString() + "\") failed"); + throw Exception("symlink() failed"); + } + } +} + void lokit_main(const std::string& childRoot, const std::string& sysTemplate, const std::string& loTemplate, @@ -861,19 +885,15 @@ void lokit_main(const std::string& childRoot, // Create a symlink inside the jailPath so that the absolute pathname loTemplate, when // interpreted inside a chroot at jailPath, points to loSubPath (relative to the chroot). - Path symlinkSource(jailPath, Path(loTemplate.substr(1))); - File(symlinkSource.parent()).createDirectories(); - - std::string symlinkTarget; - for (auto i = 0; i < Path(loTemplate).depth(); i++) - symlinkTarget += "../"; - symlinkTarget += loSubPath; + symlinkPathToJail(jailPath, loTemplate, loSubPath); - Log::debug("symlink(\"" + symlinkTarget + "\",\"" + symlinkSource.toString() + "\")"); - if (symlink(symlinkTarget.c_str(), symlinkSource.toString().c_str()) == -1) + // Font paths can end up as realpaths so match that too. + char *resolved = realpath(loTemplate.c_str(), NULL); + if (resolved) { - Log::syserror("symlink(\"" + symlinkTarget + "\",\"" + symlinkSource.toString() + "\") failed"); - throw Exception("symlink() failed"); + if (strcmp(loTemplate.c_str(), resolved)) + symlinkPathToJail(jailPath, std::string(resolved), loSubPath); + free (resolved); } Path jailLOInstallation(jailPath, loSubPath); diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index 31ed0d2..db27edc 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -479,6 +479,7 @@ private: response.setStatus(HTTPResponse::HTTP_NOT_FOUND); response.setContentLength(0); response.send(); + Log::info("file not found."); } } else diff --git a/loolwsd/loolwsd-systemplate-setup b/loolwsd/loolwsd-systemplate-setup index d6539e3..27c760c 100755 --- a/loolwsd/loolwsd-systemplate-setup +++ b/loolwsd/loolwsd-systemplate-setup @@ -87,14 +87,6 @@ if [ -h usr/share/fonts/ghostscript ]; then cp -r -p /usr/share/ghostscript/fonts usr/share/ghostscript fi -# Our Libreoffice install often comes with pre-bundled fonts. -# we need to ensure that there is a link to these with the same -# path that fontconfig found. -mkdir -p ./lo -mkdir -p ./$INSTDIR -rmdir ./$INSTDIR -ln -s /lo $CHROOT/$INSTDIR - # Debugging only hackery to avoid confusion. if test "z$ENABLE_DEBUG" != "z" -a "z$HOME" != "z"; then echo "Copying development users's fonts into systemplate" _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits