diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2024-04-05 14:56:13 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2024-04-15 15:28:41 +0200 |
commit | b99082e4f3d4e4d13433ca062ba98da7cd14aa9a (patch) | |
tree | 673b806da25f333fb04305fb00aa4f3a64e3cada /desktop | |
parent | 10fa63a77389c257981310b8920880c812cf0c7c (diff) |
lok: provide global random symbol to find random device.
This is vital for lok when used in a jail with no random device,
but with an inherited file-handle to /dev/urandom.
Use 'dup' to avoid changing code that wants to 'close' the handle
after use.
Change-Id: I15f40fb251f180a2394af030f56e47f2bf9651d4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166113
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/source/lib/init.cxx | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 9b49a9c934a6..f1ca1291aed0 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -31,8 +31,10 @@ #undef HAVE_MALLOC_TRIM +#ifdef UNX +# include <fcntl.h> +#endif #ifdef LINUX -#include <fcntl.h> #if defined __GLIBC__ # include <malloc.h> # define HAVE_MALLOC_TRIM @@ -234,6 +236,20 @@ using namespace bridge; using namespace uno; using namespace lang; +#ifdef UNX + +static int urandom = -1; + +extern "C" { + int SAL_JNI_EXPORT lok_open_urandom() + { + return dup(urandom); + } +}; + +#endif + + using LanguageToolCfg = officecfg::Office::Linguistic::GrammarChecking::LanguageTool; static LibLibreOffice_Impl *gImpl = nullptr; @@ -7903,6 +7919,10 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char const char* tz = ::getenv("TZ"); SfxLokHelper::setDefaultTimezone(!!tz, tz ? OStringToOUString(tz, RTL_TEXTENCODING_UTF8) : OUString()); +#ifdef UNX + if (urandom < 0) + urandom = open("/dev/urandom", O_RDONLY); +#endif } if (eStage != SECOND_INIT) |