Plugin details: qmail-spp-filter 

qmail-spp-filter details

 This program enables qmail-spp commands to be issued based on matches of
   TCPREMOTEIP, SMTPMAILFROM or SMTPRCPTTO with records in text files.

   The TinyCDB library ( is used.  Or if
   is not available, the standard CDB library is used

   Compile plugin using something like this for TinyCDB:

     gcc -g -Wall qmail-spp-filter.c -o qmail-spp-filter -lcdb

   Or this for standard CDB:

     gcc -g -Wall qmail-spp-filter.c -o qmail-spp-filter /usr/lib/cdb.a \
       /usr/lib/unix.a /usr/lib/buffer.a /usr/lib/alloc.a /usr/lib/byte.a

   Put qmail-spp-filter in the qmail plugins directory
   (ex. "/var/qmail/plugins") and add to smtpplugins file
   (ex. "/var/qmail/control/smtpplugins") after [rcpt]


   If the "RELAYCLIENT" environment variable (envar) is set, this module
   exits without doing anything, since the client has permission to relay.

   IPv6 is supported if TCPREMOTEIP contains an IPv6 address or if
   TCP6REMOTEIP envar is set.

   Filters are specified by setting the following envars.


   '#' starts at 1 and increments numerically (base 10, no leading zeros) until
   there is no matching envar.  For each DEF envar, there must be a matching
   CMD envar.

   DEF envars are defined as:


   where "type" is one of:

      ip         list of IP addresses
      from       list of from/sender email addresses
      regexfrom  list of regular expressions to match with from/sender addrs
      rcpt       list of destination/rcptto email addresses
      regexrcpt  list of regular expressions to match with dest/rcptto addrs

   and pathname is the full filename of a text file with one record per line.
   Comments start with '#' in the text files.  CDB hash files
   ( are automatically generated for all but regular
   expression files.  CDB generation is triggered if it appears that the
   source text file is newer than the accompanying CDB file or if a CDB file
   does not exist.  The "qmaild" user must have write access to the directory
   containing the file.

   The regular expressions are of the POSIX Extended Regular Expression
   regex(3) format and are case-insensitive.

   Possible settings of CMD envars are taken from :

     Command       Description
     A             accept mail - turn off qmail-spp in this session
     N             next - accept current SMTP command (do not execute
                   remaining plugins for this command)
     O             ok - like N, but omits qmail checks in MAIL and RCPT
     Emsg          error - do not accept this SMTP command and immediately
                   send msg to the client
     LMmsg         later, mail - like E, but shows error after MAIL command
     LRmsg         later, rcpt - like E, but shows error after RCPT command
     LDmsg         later, data - like E, but shows error after DATA command
     Rmsg          reject mail - send msg to the client and drop connection
     D             drop connection immediately, without printing anything
     Svar=value    set environmental variable var to value
     Uvar          unset var variable
     Hcontent      header - add header content (eg. X-Spam-Flag: YES)  change last address provided by the client to
                   (MAIL FROM or RCPT TO address)
     Pmsg          print - send msg to the client

   Separate commands are separated by a comma or a carriage return.  Be
   careful not to include a comma for any other reason.

   Once a match is found and a CMD is processed, the plugin exits.

   An optional SPP_FILTER_NOMATCH_CMD envar can be set if you want the program
   to issue a qmail-spp command (or commands) if there is a failure to find
   any match.

   Except for the SPP_FILTER_NOMATCH_CMD envar, if any CMDs include the
   special string "send-filter-def" then "send-filter-def" will
   be replaced by the content of the SPP_FILTER_#_DEF envar that matched.

   Example envars:

     SPP_FILTER_2_CMD="A,HSPP-Filter-Match: send-filter-def"
     SPP_FILTER_3_CMD="E550 Blacklisted!"
     SPP_FILTER_6_CMD="E550 Blacklisted!"

   Example "ip" text file:  # full IP address, with no leading zeros
     192.168.2  # partial IP address
     192.168    # partial IP address
     10         # partial IP address
     2001:0db8:0000:0000:0000:0000  # invariant part of IPv6 addresses need to
                                    # be explicit (no "::" or ":0:" compression
                                    # since simple text matching is used.

   Example "from" or "rcpt" text file:

     # list of email addresses to whitelist   # comment

   Example "regexfrom" or "regexrcpt" regex text file:

     # ^ and $ operators are automatically added by the plugin.
     .*       # match any email from

Author: Chris Caputo
Added on: 2008-11-12

<<< Back to plugins

Copyright © 2004-2008 Paweł Foremski

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found here.