diff options
| author | Alejandro Soto <alejandro@34project.org> | 2024-07-31 20:15:44 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2024-08-02 14:15:44 -0600 |
| commit | 951025ec921a83d9ade36252b2fdc6da9f469c03 (patch) | |
| tree | cbf5f4e701b170bb33f22e8ab2a7be047bdca38f /pkgs | |
| parent | 0e909bbfae0f5b83a378f0c6af9772ab55b154b9 (diff) | |
home/mail: patch msmtp to support YKCS12
Diffstat (limited to '')
| -rw-r--r-- | pkgs/default.nix | 6 | ||||
| -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 | 140 | ||||
| -rw-r--r-- | pkgs/msmtp/paths.patch | 64 |
4 files changed, 236 insertions, 0 deletions
diff --git a/pkgs/default.nix b/pkgs/default.nix index 45b3f4f..d595e04 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -38,6 +38,12 @@ in xiaomi-vacuum-map-card = final.callPackage ./lovelace-xiaomi-vacuum-map-card { }; }; + # Tomado de all-packages.nix + msmtp = callPackage ./msmtp { + inherit (final.darwin.apple_sdk.frameworks) Security; + autoreconfHook = final.buildPackages.autoreconfHook269; + }; + postfix = callPackage ./postfix { inherit (prev) postfix; }; } // ( let 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..18036f5 --- /dev/null +++ b/pkgs/msmtp/default.nix @@ -0,0 +1,140 @@ +{ resholve +, stdenv +, symlinkJoin +, lib +, fetchFromGitHub +, autoreconfHook +, pkg-config +, bash +, coreutils +, gnugrep +, gnutls +, gsasl +, libidn2 +, netcat-gnu +, texinfo +, which +, Security +, withKeyring ? true +, libsecret +, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd +, systemd +, withScripts ? true +}: + +let + inherit (lib) getBin getExe optionals; + + version = "1.8.22"; + + src = fetchFromGitHub { + owner = "marlam"; + repo = "msmtp-mirror"; + rev = "msmtp-${version}"; + hash = "sha256-Jt/uvGBrYYr6ua6LVPiP0nuRiIkxBJASdgHBNHivzxQ="; + }; + + meta = with lib; { + description = "Simple and easy to use SMTP client with excellent sendmail compatibility"; + homepage = "https://marlam.de/msmtp/"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ peterhoeg ]; + platforms = 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.isDarwin [ "--with-macosx-keyring" ]; + + buildInputs = [ gnutls gsasl libidn2 ] + ++ optionals stdenv.isDarwin [ Security ] + ++ 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 = [ ./paths.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 + netcat-gnu + which + ] ++ optionals withSystemd [ systemd ]; + execer = [ + "cannot:${getBin binaries}/bin/msmtp" + "cannot:${getBin netcat-gnu}/bin/nc" + ] ++ optionals withSystemd [ + "cannot:${getBin systemd}/bin/systemd-cat" + ]; + fix."$MSMTP" = [ "msmtp" ]; + fake.external = [ "ping" ] + ++ optionals (!withSystemd) [ "systemd-cat" ]; + }; + + 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; }; + } else binaries diff --git a/pkgs/msmtp/paths.patch b/pkgs/msmtp/paths.patch new file mode 100644 index 0000000..9298519 --- /dev/null +++ b/pkgs/msmtp/paths.patch @@ -0,0 +1,64 @@ +diff --git a/scripts/msmtpq/msmtpq b/scripts/msmtpq/msmtpq +index d8b4039..1f2a7b5 100755 +--- a/scripts/msmtpq/msmtpq ++++ b/scripts/msmtpq/msmtpq +@@ -60,8 +60,8 @@ err() { dsp '' "$@" '' ; exit 1 ; } + ## e.g. ( export MSMTP=/path/to/msmtp ) + if [ "$MSMTP" = "" ] ; then # If MSMTP is unset or empty... + MSMTP=msmtp +-elif [ ! -x "$MSMTP" ] ; then +- log -e 1 "msmtpq : can't find the msmtp executable [ $MSMTP ]" # if not found - complain ; quit ++# elif [ ! -x "$MSMTP" ] ; then ++# log -e 1 "msmtpq : can't find the msmtp executable [ $MSMTP ]" # if not found - complain ; quit + fi + ## + ## set the queue var to the location of the msmtp queue directory +@@ -71,7 +71,7 @@ fi + ## ( chmod 0700 msmtp.queue ) + ## + ## the queue dir - export this variable to reflect where you'd like it to be (no quotes !!) +-Q=${Q:-~/.msmtp.queue} ++Q=${MSMTP_QUEUE:-~/.msmtp.queue} + [ -d "$Q" ] || mkdir -m 0700 -p "$Q" || \ + err '' "msmtpq : can't find or create msmtp queue directory [ $Q ]" '' # if not present - complain ; quit + ## +@@ -85,8 +85,10 @@ Q=${Q:-~/.msmtp.queue} + ## + ## the queue log file - export this variable to change where logs are stored (but no quotes !!) + ## Set it to "" (empty string) to disable logging. +-[ -v LOG ] || LOG=~/log/msmtp.queue.log ++LOG=${MSMTP_LOG:-~/log/msmtp.queue.log} + [ -d "$(dirname "$LOG")" ] || mkdir -p "$(dirname "$LOG")" ++ ++JOURNAL=@journal@ + ## ====================================================================================== + + ## msmtpq can use the following environment variables : +@@ -139,6 +141,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 " +@@ -156,10 +159,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 "$LOG" ] && \ + echo " exit code = $RC" >> "$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 + } |
