about summary refs log tree commit diff
path: root/pkgs/desktops/plasma-5
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2020-04-08 01:12:03 -0400
committerMatthew Bauer <mjbauer95@gmail.com>2020-04-09 10:48:14 -0400
commitf0db4de598c077c2a711ccb7894e518b3035a5f8 (patch)
tree85f2028bc4dca3cb9016cb66d0d2d2f3f9114999 /pkgs/desktops/plasma-5
parent357a5c6472a8aa8c83b5246662688b7f1e77fcd9 (diff)
downloadnixlib-f0db4de598c077c2a711ccb7894e518b3035a5f8.tar
nixlib-f0db4de598c077c2a711ccb7894e518b3035a5f8.tar.gz
nixlib-f0db4de598c077c2a711ccb7894e518b3035a5f8.tar.bz2
nixlib-f0db4de598c077c2a711ccb7894e518b3035a5f8.tar.lz
nixlib-f0db4de598c077c2a711ccb7894e518b3035a5f8.tar.xz
nixlib-f0db4de598c077c2a711ccb7894e518b3035a5f8.tar.zst
nixlib-f0db4de598c077c2a711ccb7894e518b3035a5f8.zip
kwallet-pam: unset QT_PLUGIN_PATH
kwallet sets a limit of 1000 for a single characters for environment
variables read from the socket[1]. wrapQtApps gives us a huge value
for QT_PLUGIN_PATH (up to 13000 bytes on my system!) Since this was
overflowing, the Qt plugin loading mechanism was hitting a segfault
when it was trying to parse the truncated QT_PLUGIN_PATH.

So for now, we can just unset QT_PLUGIN_PATH in the pam_kwallet_init
script. kwalletd5 has its own QT_PLUGIN_PATH which it can use.

This problem occured on 20.03, but not 19.09. It’s unclear what
changes were made in that time, but likely that previously we weren’t
getting a QT_PLUGIN_PATH set in the plasma5 startup at all. This means
that in 19.09 our QT_PLUGIN_PATH value must have been small enough to
fit into the 1000 char limit.

Fixes #77290

[1]: https://github.com/KDE/kwallet/blob/bc9713e2725ab1c4311866f751c674a38584bd92/src/runtime/kwalletd/main.cpp#L44

/cc @ttuegel
Diffstat (limited to 'pkgs/desktops/plasma-5')
-rw-r--r--pkgs/desktops/plasma-5/kwallet-pam.nix9
1 files changed, 8 insertions, 1 deletions
diff --git a/pkgs/desktops/plasma-5/kwallet-pam.nix b/pkgs/desktops/plasma-5/kwallet-pam.nix
index 7ddd6e2abb77..590c523e9d74 100644
--- a/pkgs/desktops/plasma-5/kwallet-pam.nix
+++ b/pkgs/desktops/plasma-5/kwallet-pam.nix
@@ -7,8 +7,15 @@ mkDerivation {
   postPatch = ''
     sed -i pam_kwallet_init -e "s|socat|${lib.getBin socat}/bin/socat|"
   '';
+
+  # We get a crash when QT_PLUGIN_PATH is more than 1000 characters.
+  # pam_kwallet_init passes its environment to kwalletd5, but
+  # wrapQtApps gives our environment a huge QT_PLUGIN_PATH value. We
+  # are able to unset it here since kwalletd5 will have its own
+  # QT_PLUGIN_PATH.
   postFixup = ''
-    wrapQtApp $out/libexec/pam_kwallet_init
+    wrapProgram $out/libexec/pam_kwallet_init --unset QT_PLUGIN_PATH
   '';
+
   dontWrapQtApps = true;
 }