Skip to content

Commit

Permalink
msmtp: clean up msmtpq
Browse files Browse the repository at this point in the history
 - replace relative bin paths with absolute filenames in the nix store
 - make the log and queue paths configurable
 - log to the journal on linux
  • Loading branch information
Peter Hoeg committed Feb 23, 2017
1 parent f4d188b commit 1c46605
Show file tree
Hide file tree
Showing 2 changed files with 128 additions and 13 deletions.
45 changes: 32 additions & 13 deletions pkgs/applications/networking/msmtp/default.nix
Original file line number Diff line number Diff line change
@@ -1,30 +1,49 @@
{ stdenv, fetchurl, openssl, pkgconfig, gnutls, gsasl, libidn, Security }:
{ stdenv, lib, fetchurl, autoreconfHook, pkgconfig
, openssl, netcat, gnutls, gsasl, libidn, Security, systemd }:

stdenv.mkDerivation rec {
version = "1.6.6";
let
tester = "n"; # {x| |p|P|n|s}
journal = if stdenv.isLinux then "y" else "n";

in stdenv.mkDerivation rec {
name = "msmtp-${version}";
version = "1.6.6";

src = fetchurl {
url = "mirror://sourceforge/msmtp/${name}.tar.xz";
sha256 = "0ppvww0sb09bnsrpqnvlrn8vx231r24xn2iiwpy020mxc8gxn5fs";
};

buildInputs = [ openssl pkgconfig gnutls gsasl libidn ]
patches = [
./paths.patch
];

buildInputs = [ openssl gnutls gsasl libidn ]
++ stdenv.lib.optional stdenv.isDarwin Security;
nativeBuildInputs = [ autoreconfHook pkgconfig ];

configureFlags =
stdenv.lib.optional stdenv.isDarwin [ "--with-macosx-keyring" ];

postInstall = ''
cp scripts/msmtpq/msmtp-queue scripts/msmtpq/msmtpq $prefix/bin/
chmod +x $prefix/bin/msmtp-queue $prefix/bin/msmtpq
substitute scripts/msmtpq/msmtpq $out/bin/msmtpq \
--replace @msmtp@ $out/bin/msmtp \
--replace @nc@ ${netcat}/bin/nc \
--replace @journal@ ${journal} \
${lib.optionalString (journal == "y") "--replace @systemdcat@ ${systemd}/bin/systemd-cat" } \
--replace @test@ ${tester}
substitute scripts/msmtpq/msmtp-queue $out/bin/msmtp-queue \
--replace @msmtpq@ $out/bin/msmtpq
chmod +x $out/bin/*
'';

meta = {
description = "Simple and easy to use SMTP client with excellent sendmail compatibility";
homepage = "http://msmtp.sourceforge.net/";
license = stdenv.lib.licenses.gpl3;
maintainers = [ stdenv.lib.maintainers.garbas ];
platforms = stdenv.lib.platforms.unix;
};
meta = with stdenv.lib; {
description = "Simple and easy to use SMTP client with excellent sendmail compatibility";
homepage = "http://msmtp.sourceforge.net/";
license = licenses.gpl3;
maintainers = with maintainers; [ garbas peterhoeg ];
platforms = platforms.unix;
};
}
96 changes: 96 additions & 0 deletions pkgs/applications/networking/msmtp/paths.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
diff --git a/scripts/msmtpq/msmtp-queue b/scripts/msmtpq/msmtp-queue
index 1dc220d..d834241 100755
--- a/scripts/msmtpq/msmtp-queue
+++ b/scripts/msmtpq/msmtp-queue
@@ -27,4 +27,4 @@
## change the below line to be
## exec /path/to/msmtpq --q-mgmt

-exec msmtpq --q-mgmt "$1"
+exec @msmtpq@ --q-mgmt "$1"
diff --git a/scripts/msmtpq/msmtpq b/scripts/msmtpq/msmtpq
index bdb4fb8..1363a67 100755
--- a/scripts/msmtpq/msmtpq
+++ b/scripts/msmtpq/msmtpq
@@ -59,7 +59,7 @@ err() { dsp '' "$@" '' ; exit 1 ; }
## enter the location of the msmtp executable (no quotes !!)
## e.g. ( MSMTP=/path/to/msmtp )
## and uncomment the test for its existence
-MSMTP=msmtp
+MSMTP=@msmtp@
#[ -x "$MSMTP" ] || \
# log -e 1 "msmtpq : can't find the msmtp executable [ $MSMTP ]" # if not found - complain ; quit
##
@@ -70,9 +70,8 @@ MSMTP=msmtp
## ( chmod 0700 msmtp.queue )
##
## the queue dir - modify this to reflect where you'd like it to be (no quotes !!)
-Q=~/.msmtp.queue
-[ -d "$Q" ] || \
- err '' "msmtpq : can't find msmtp queue directory [ $Q ]" '' # if not present - complain ; quit
+Q=${MSMTP_QUEUE:-~/.msmtp.queue}
+test -d "$Q" || mkdir -p "$Q"
##
## set the queue log file var to the location of the msmtp queue log file
## where it is or where you'd like it to be
@@ -84,7 +83,10 @@ Q=~/.msmtp.queue
## (doing so would be inadvisable under most conditions, however)
##
## the queue log file - modify (or comment out) to taste (but no quotes !!)
-LOG=~/log/msmtp.queue.log
+LOG=${MSMTP_LOG:-~/log/msmtp.queue.log}
+test -d "$(dirname $LOG)" || mkdir -p "$(dirname $LOG)"
+
+JOURNAL=@journal@
## ======================================================================================

## msmtpq can use the following environment variables :
@@ -108,7 +110,7 @@ LOG=~/log/msmtp.queue.log
##
#EMAIL_CONN_NOTEST=y # deprecated ; use below var
#EMAIL_CONN_TEST={x| |p|P|n|s} # see settings above for EMAIL_CONN_TEST
-EMAIL_CONN_TEST=n
+EMAIL_CONN_TEST=@test@
#EMAIL_QUEUE_QUIET=t
## ======================================================================================

@@ -138,6 +140,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="$('date' +'%Y %d %b %H:%M:%S')"
# time stamp prefix - "2008 13 Mar 03:59:45 "
if [ "$1" = '-e' ] ; then # there's an error exit code
@@ -154,10 +157,19 @@ log() {
done
fi

+ if [ "$JOURNAL" == "y" ] ; then
+ for ARG ; do
+ [ -n "$ARG" ] && \
+ echo "$PFX : $ARG" | @systemdcat@ -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" | @systemdcat@ -t $NAME -p emerg
exit $RC # exit w/return code
fi
}
@@ -207,10 +219,7 @@ connect_test() {
ping -qnc1 -w4 8.8.8.8 >/dev/null 2>&1 || return 1

elif [ "$EMAIL_CONN_TEST" = 'n' ] ; then # use netcat (nc) test
- # must, of course, have netcat (nc) installed
- which nc >/dev/null 2>&1 || \
- log -e 1 "msmtpq : can't find netcat executable [ nc ]" # if not found - complain ; quit
- 'nc' -vz www.debian.org 80 >/dev/null 2>&1 || return 1
+ @nc@ -vz www.debian.org 80 >/dev/null 2>&1 || return 1

elif [ "$EMAIL_CONN_TEST" = 's' ] ; then # use sh sockets test
# note that this does not work on debian systems

4 comments on commit 1c46605

@jwiegley
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@peterhoeg Hi Peter, just FYI this breaks on Darwin with a build error in libbsd, because it appears the dependencies have changed:

building path(s) ‘/nix/store/v21fb8laviynla5mm7nivhyy7zjffrz7-libbsd-0.8.2’
unpacking sources
unpacking source archive /nix/store/gf84gw8r46pyg016mjvaavh71ks4wpik-libbsd-0.8.2.tar.xz
source root is libbsd-0.8.2
...
  CC       arc4random.lo
In file included from arc4random.c:31:
In file included from ../include/bsd/stdlib.h:37:
../include/bsd/libutil.h:42:10: fatal error: 'features.h' file not found
#include <features.h>
         ^
1 error generated.
make[2]: *** [Makefile:627: arc4random.lo] Error 1

@peterhoeg
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like I'm missing something very obvious here, but neither msmtp nor libbsd have any dependencies on each other and libbsd has platforms = linux; so why does darwin even try to compile it?

I have a local branch with libbsd bumped to 0.8.3 but nox-review wip is currently doing its thing - it will take a while as there are some fairly large packages that depend on libbsd.

@peterhoeg
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh, I guess it's because stdenv is different on mac.

@jwiegley
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed; also, the reference to systemd is not made conditional on darwin.

Please sign in to comment.