summaryrefslogtreecommitdiff
path: root/pkgs/msmtp
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/msmtp')
-rw-r--r--pkgs/msmtp/0001-msmtp-run-passwordeval-if-tls_key_file-is-provided-e.patch26
-rw-r--r--pkgs/msmtp/default.nix189
-rw-r--r--pkgs/msmtp/msmtpq-remove-binary-check.patch13
-rw-r--r--pkgs/msmtp/msmtpq-systemd-logging.patch41
4 files changed, 269 insertions, 0 deletions
diff --git a/pkgs/msmtp/0001-msmtp-run-passwordeval-if-tls_key_file-is-provided-e.patch b/pkgs/msmtp/0001-msmtp-run-passwordeval-if-tls_key_file-is-provided-e.patch
new file mode 100644
index 0000000..469b666
--- /dev/null
+++ b/pkgs/msmtp/0001-msmtp-run-passwordeval-if-tls_key_file-is-provided-e.patch
@@ -0,0 +1,26 @@
+From 6febfc0f87c0aa4ed595f05441f8b3c9b59b2f50 Mon Sep 17 00:00:00 2001
+From: Alejandro Soto <alejandro@34project.org>
+Date: Wed, 31 Jul 2024 15:38:29 -0600
+Subject: [PATCH] msmtp: run passwordeval if tls_key_file is provided, even
+ without auth
+
+---
+ src/msmtp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/msmtp.c b/src/msmtp.c
+index 71a871a..37f2601 100644
+--- a/src/msmtp.c
++++ b/src/msmtp.c
+@@ -4048,7 +4048,7 @@ int main(int argc, char *argv[])
+
+ /* OK, we're using the settings in 'account'. Complete them and check
+ * them. */
+- if (account->auth_mech && !account->password && account->passwordeval)
++ if ((account->auth_mech || account->tls_key_file) && !account->password && account->passwordeval)
+ {
+ if (eval(account->passwordeval, &account->password, &errstr) != 0)
+ {
+--
+2.44.1
+
diff --git a/pkgs/msmtp/default.nix b/pkgs/msmtp/default.nix
new file mode 100644
index 0000000..c16ee3e
--- /dev/null
+++ b/pkgs/msmtp/default.nix
@@ -0,0 +1,189 @@
+{
+ resholve,
+ stdenv,
+ symlinkJoin,
+ lib,
+ fetchFromGitHub,
+ autoreconfHook,
+ pkg-config,
+ bash,
+ coreutils,
+ gnugrep,
+ gnused,
+ gnutls,
+ gsasl,
+ libidn2,
+ netcat-gnu,
+ texinfo,
+ which,
+ withKeyring ? true,
+ libsecret,
+ withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd,
+ systemd,
+ withScripts ? true,
+ withLibnotify ? true,
+ libnotify,
+ gitUpdater,
+ binlore,
+ msmtp,
+}: let
+ inherit (lib) getBin getExe optionals;
+
+ version = "1.8.32";
+
+ src = fetchFromGitHub {
+ owner = "marlam";
+ repo = "msmtp";
+ rev = "msmtp-${version}";
+ hash = "sha256-ofyDtP7KgTKX/O1O4g3OcDwgihDveAiJ5s5GQtSqf28=";
+ };
+
+ meta = {
+ description = "Simple and easy to use SMTP client with excellent sendmail compatibility";
+ homepage = "https://marlam.de/msmtp/";
+ license = lib.licenses.gpl3Plus;
+ maintainers = with lib.maintainers; [peterhoeg];
+ platforms = lib.platforms.unix;
+ mainProgram = "msmtp";
+ };
+
+ binaries = stdenv.mkDerivation {
+ pname = "msmtp-binaries";
+ inherit version src meta;
+
+ patches = [
+ ./0001-msmtp-run-passwordeval-if-tls_key_file-is-provided-e.patch
+ ];
+
+ configureFlags =
+ [
+ "--sysconfdir=/etc"
+ "--with-libgsasl"
+ ]
+ ++ optionals stdenv.hostPlatform.isDarwin ["--with-macosx-keyring"];
+
+ buildInputs =
+ [
+ gnutls
+ gsasl
+ libidn2
+ ]
+ ++ optionals withKeyring [libsecret];
+
+ nativeBuildInputs = [
+ autoreconfHook
+ pkg-config
+ texinfo
+ ];
+
+ enableParallelBuilding = true;
+
+ postInstall = ''
+ install -Dm444 -t $out/share/doc/msmtp doc/*.example
+ ln -s msmtp $out/bin/sendmail
+ '';
+ };
+
+ scripts = resholve.mkDerivation {
+ pname = "msmtp-scripts";
+ inherit version src meta;
+
+ patches = [
+ ./msmtpq-remove-binary-check.patch
+ ./msmtpq-systemd-logging.patch
+ ];
+
+ postPatch = ''
+ substituteInPlace scripts/msmtpq/msmtpq \
+ --replace @journal@ ${
+ if withSystemd
+ then "Y"
+ else "N"
+ }
+ '';
+
+ dontConfigure = true;
+ dontBuild = true;
+
+ installPhase = ''
+ runHook preInstall
+
+ install -Dm555 -t $out/bin scripts/msmtpq/msmtp*
+ install -Dm444 -t $out/share/doc/msmtp/scripts scripts/msmtpq/README*
+ install -Dm444 -t $out/share/doc/msmtp/scripts scripts/{find_alias,msmtpqueue,set_sendmail}/*
+
+ if grep --quiet -E '@.+@' $out/bin/*; then
+ echo "Unsubstituted variables found. Aborting!"
+ grep -E '@.+@' $out/bin/*
+ exit 1
+ fi
+
+ runHook postInstall
+ '';
+
+ solutions = {
+ msmtpq = {
+ scripts = ["bin/msmtpq"];
+ interpreter = getExe bash;
+ inputs =
+ [
+ binaries
+ coreutils
+ gnugrep
+ gnused
+ netcat-gnu
+ which
+ ]
+ ++ optionals withSystemd [systemd]
+ ++ optionals withLibnotify [libnotify];
+ execer =
+ [
+ "cannot:${getBin binaries}/bin/msmtp"
+ "cannot:${getBin netcat-gnu}/bin/nc"
+ ]
+ ++ optionals withSystemd [
+ "cannot:${getBin systemd}/bin/systemd-cat"
+ ]
+ ++ optionals withLibnotify [
+ "cannot:${getBin libnotify}/bin/notify-send"
+ ];
+ fix."$MSMTP" = ["msmtp"];
+ fake.external =
+ [
+ "ping"
+ ]
+ ++ optionals (!withSystemd) ["systemd-cat"]
+ ++ optionals (!withLibnotify) ["notify-send"];
+ keep.source = ["~/.msmtpqrc"];
+ };
+
+ msmtp-queue = {
+ scripts = ["bin/msmtp-queue"];
+ interpreter = getExe bash;
+ inputs = ["${placeholder "out"}/bin"];
+ execer = ["cannot:${placeholder "out"}/bin/msmtpq"];
+ };
+ };
+ };
+in
+ if withScripts
+ then
+ symlinkJoin {
+ name = "msmtp-${version}";
+ inherit version meta;
+ paths = [
+ binaries
+ scripts
+ ];
+ passthru = {
+ inherit binaries scripts src;
+ # msmtpq forwards most of its arguments to msmtp [1].
+ #
+ # [1]: <https://github.com/marlam/msmtp/blob/msmtp-1.8.26/scripts/msmtpq/msmtpq#L301>
+ binlore.out = binlore.synthesize msmtp ''
+ wrapper bin/msmtpq bin/msmtp
+ '';
+ updateScript = gitUpdater {rev-prefix = "msmtp-";};
+ };
+ }
+ else binaries
diff --git a/pkgs/msmtp/msmtpq-remove-binary-check.patch b/pkgs/msmtp/msmtpq-remove-binary-check.patch
new file mode 100644
index 0000000..045f71c
--- /dev/null
+++ b/pkgs/msmtp/msmtpq-remove-binary-check.patch
@@ -0,0 +1,13 @@
+diff --git a/scripts/msmtpq/msmtpq b/scripts/msmtpq/msmtpq
+index bcb384e..9622e47 100755
+--- a/scripts/msmtpq/msmtpq
++++ b/scripts/msmtpq/msmtpq
+@@ -60,8 +60,6 @@ err() { dsp '' "$@" '' ; exit 1 ; }
+ ## export the location of the msmtp executable before running this script (no quotes !!)
+ ## e.g. ( export MSMTP=/path/to/msmtp )
+ MSMTP="${MSMTP:-msmtp}"
+-"$MSMTP" --version >/dev/null 2>&1 || \
+- log_later -e 1 "msmtpq : can't run the msmtp executable [ $MSMTP ]" # if not found - complain ; quit
+ ##
+ ## set the queue var to the location of the msmtp queue directory
+ ## if the queue dir doesn't yet exist, create it (0700)
diff --git a/pkgs/msmtp/msmtpq-systemd-logging.patch b/pkgs/msmtp/msmtpq-systemd-logging.patch
new file mode 100644
index 0000000..55f386b
--- /dev/null
+++ b/pkgs/msmtp/msmtpq-systemd-logging.patch
@@ -0,0 +1,41 @@
+diff --git a/scripts/msmtpq/msmtpq b/scripts/msmtpq/msmtpq
+index 28d0754..3eaac58 100755
+--- a/scripts/msmtpq/msmtpq
++++ b/scripts/msmtpq/msmtpq
+@@ -182,6 +182,8 @@ if [ -n "$MSMTPQ_LOG" ] ; then
+ unset msmptq_log_dir
+ fi
+
++JOURNAL=@journal@
++
+ umask 077 # set secure permissions on created directories and files
+
+ declare -i CNT # a count of mail(s) currently in the queue
+@@ -214,6 +216,7 @@ on_exit() { # unlock the queue on exit if the lock was
+ ## display msg to user, as well
+ ##
+ log() {
++ local NAME=msmtpq
+ local ARG RC PFX
+ PFX="$('date' +'%Y %d %b %H:%M:%S')"
+ # time stamp prefix - "2008 13 Mar 03:59:45 "
+@@ -233,10 +236,19 @@ log() {
+ done
+ fi
+
++ if [ "$JOURNAL" = "Y" ]; then
++ for ARG; do
++ [ -n "$ARG" ] &&
++ echo "$ARG" | systemd-cat -t "$NAME" -p info
++ done
++ fi
++
+ if [ -n "$RC" ] ; then # an error ; leave w/error return
+ [ -n "$LKD" ] && lock_queue -u # unlock here (if locked)
+ [ -n "$MSMTPQ_LOG" ] && \
+ echo " exit code = $RC" >> "$MSMTPQ_LOG" # logging ok ; send exit code to log
++ [ "$JOURNAL" = "Y" ] && \
++ echo "exit code= $RC" | systemd-cat -t "$NAME" -p emerg
+ exit "$RC" # exit w/return code
+ fi
+ }