diff options
Diffstat (limited to 'pkgs/msmtp')
| -rw-r--r-- | pkgs/msmtp/0001-msmtp-run-passwordeval-if-tls_key_file-is-provided-e.patch | 26 | ||||
| -rw-r--r-- | pkgs/msmtp/default.nix | 189 | ||||
| -rw-r--r-- | pkgs/msmtp/msmtpq-remove-binary-check.patch | 13 | ||||
| -rw-r--r-- | pkgs/msmtp/msmtpq-systemd-logging.patch | 41 |
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 + } |
