Dang. I forgot to append a dummy column to the textfile. Corrected
version is below.

Also added a note that "mv newdatabse realdatabase" is not needed
with cdb and lmdb.

        Wietse

Mark Goodge:
> What would be the simplest method in Postfix of implementing an 
> equivalent to the exim ACL mentioned in this blog post:
> 
> http://blog.hinterlands.org/2013/10/unwanted-email-from-communicado-ltd/
> 
> That is, what's the simplest way of rejecting email from a list of 
> domains contained within a simple text file that can be updated 
> regularly without needing to restart Postfix.

No need to restart Postfix. Use an indexed file and let smtpd(8)
auto-detect that the file has changed.

Run this from cron:

    #!/bin/sh

    # Configure smtpd(8) to query $TYPE:real-file

    TYPE=hash
    SUFF=db
    URL=http://example.com/file.txt

    test -f old-file || touch old-file
    wget -O new-file $URL && test -s new-file && 
        perl -pi -e 's/$/ x/' new-file && cmp -s old-file new-file || {
            postmap $TYPE:new-file && mv new-file.$SUFF real-file.$SUFF
            mv new-file old-file
    }

In particular, LMDB as of postfix-2.11-20131122 no longer restarts
a daemon and picks up changes immediately. With cdb and hash, the
changes are detected at the start of a new SMTP session and then
smtpd(8) restarts.

The "mv new-file.$SUFF real-file.$SUFF" step is not needed with cdb
or lmdb databases (cdb already renames the result file, and lmdb
uses copy-on-write internally, which for pratical purposes works
like rename).

        Wietse

Reply via email to