From 6d97096d8bf999edf8f1eff36a5577c2ae536e45 Mon Sep 17 00:00:00 2001 From: Clemens Fruhwirth Date: Sun, 16 Sep 2018 13:10:56 +0200 Subject: [PATCH] mpack: Invoke /run/wrappers/bin/sendmail via execvp Calling /run/current-sw/bin/sendmail fails under postfix because setgid bits are not set. Switching the hardcoded path to an invocation via execvp should cover both cases, when the sendmail binary is setgid-wrapped and when it is not. --- pkgs/tools/networking/mpack/default.nix | 7 +------ pkgs/tools/networking/mpack/sendmail-via-execvp.diff | 12 ++++++++++++ 2 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 pkgs/tools/networking/mpack/sendmail-via-execvp.diff diff --git a/pkgs/tools/networking/mpack/default.nix b/pkgs/tools/networking/mpack/default.nix index 62cec7c41ee..5a8af7de36a 100644 --- a/pkgs/tools/networking/mpack/default.nix +++ b/pkgs/tools/networking/mpack/default.nix @@ -8,18 +8,13 @@ stdenv.mkDerivation rec { sha256 = "0k590z96509k96zxmhv72gkwhrlf55jkmyqlzi72m61r7axhhh97"; }; - patches = [ ./build-fix.patch ]; + patches = [ ./build-fix.patch ./sendmail-via-execvp.diff ]; postPatch = '' for f in *.{c,man,pl,unix} ; do substituteInPlace $f --replace /usr/tmp /tmp done - for f in unixpk.c ; do - substituteInPlace $f \ - --replace /usr/sbin /run/current-system/sw/bin - done - # this just shuts up some warnings for f in {decode,encode,part,unixos,unixpk,unixunpk,xmalloc}.c ; do sed -i 'i#include ' $f diff --git a/pkgs/tools/networking/mpack/sendmail-via-execvp.diff b/pkgs/tools/networking/mpack/sendmail-via-execvp.diff new file mode 100644 index 00000000000..8f10901038d --- /dev/null +++ b/pkgs/tools/networking/mpack/sendmail-via-execvp.diff @@ -0,0 +1,12 @@ +--- mpack-1.6/unixpk.c 2003-07-21 22:50:41.000000000 +0200 ++++ mpack-1.6/unixpk.c 2018-09-16 12:57:14.104026964 +0200 +@@ -254,8 +254,9 @@ + #ifdef SCO + execv("/usr/lib/mail/execmail", addr+start); + #else ++ execvp("sendmail", addr+start); + execv("/usr/lib/sendmail", addr+start); + execv("/usr/sbin/sendmail", addr+start); + #endif + perror("execv"); + _exit(1);