X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~cjwatson/git?a=blobdiff_plain;f=bsmtp-pull;h=5a0305f6bf071b9c52b387a84785817f4d636877;hb=45eab59f0d77d92ffd4d30e01b932ec79ae8a87f;hp=5a2c474c6c68fc09bdf879bda76c08221888eae8;hpb=f65a1cbceaa3ab471e5d9fa87f5637559e3b581d;p=bin.git diff --git a/bsmtp-pull b/bsmtp-pull index 5a2c474..5a0305f 100755 --- a/bsmtp-pull +++ b/bsmtp-pull @@ -7,7 +7,7 @@ if [ -z "$1" ]; then exit 1 fi -DIR="$HOME/.bsmtp" +DIR="$HOME/tmp/.bsmtp" mkdir -p "$DIR" cd "$DIR" @@ -19,13 +19,15 @@ HOST="$1" # By default, lockfile-create gives up after three minutes, so don't cron # this any more frequently than that without supplying a --retry argument. lockfile-create "$HOST" +# Race condition pointed out by pjb: this doesn't guarantee that the lock is +# held before the critical section starts. lockfile-touch "$HOST" & TOUCH="$!" trap 'kill "$TOUCH"; lockfile-remove "$HOST"' EXIT ERR HUP INT QUIT TERM -ssh -2 -C "$HOST" bsmtp-pull-server > "$HOST" +ssh -2 -i "$HOME/.ssh/id-bsmtp-$HOST" -C "$HOST" bsmtp-pull-server > "$HOST" [ -s "$HOST" ] || exit 0 -/usr/sbin/sendmail -bS < "$HOST" +/usr/sbin/sendmail -bS -odq < "$HOST" rm -f "$HOST" exit 0