WARNING: Currently untested - use at your own risk

How to trap messages coming from hosts in RBL:

1)  Add fixup entry in control/virtualdomains
    	echo >> /var/qmail/control/virtualdomains '.spam.fixup:spamfixup'
    and give qmail-send a HUP.

2)  Create a catch-all maildir:
        cd ~alias
	setuidgid alias maildirmake RblMessages
	echo > .qmail-spamfixup-default ./RblMessages/
	chown alias:qmail .qmail-spamfixup-default

3)  Patch rblsmtpd.c with the patch file below, then redo 'make setup check'.

4)  Modify qmail-smtpd startup script to include -T option in rblsmtpd
    invocation (tcpserver ... rblsmtpd -T.spam.fixup ... ) and restart
    service.

Hope this help.
Tullio Andreatta <tullio@logicom.it>

diff -u rblsmtpd.c.orig	rblsmtpd.c
--- rblsmtpd.c.orig	Fri Mar 30 11:00:19 2001
+++ rblsmtpd.c	Fri Mar 30 13:10:56 2001
@@ -22,7 +22,7 @@
 }
 void usage(void)
 {
-  strerr_die1x(100,"rblsmtpd: usage: rblsmtpd [ -b ] [ -R ] [ -t timeout ] [ -r base ] [ -a base ] smtpd [ arg ... ]");
+  strerr_die1x(100,"rblsmtpd: usage: rblsmtpd [ -b ] [ -R ] [ -t timeout ] [ -r base ] [ -a base ] [-T @trap] smtpd [ arg ... ]");
 }
 
 char *ip_env;
@@ -57,6 +57,7 @@
 static stralloc text; /* defined if decision is 2 or 3 */
 
 static stralloc tmp;
+static char *spamtrap = 0;
 
 void rbl(char *base)
 {
@@ -115,10 +116,16 @@
 , { 0, reject, 0 }
 } ;
 
-void rblsmtpd(void)
+void rblsmtpd(char **argv)
 {
   int i;
 
+  if (spamtrap) {
+    pathexec_env("RELAYCLIENT", spamtrap);
+    pathexec(argv);
+    strerr_die4sys(111,FATAL,"unable to run ",*argv,": ");
+  }
+
   if (flagmustnotbounce || (decision == 2)) {
     if (!stralloc_copys(&message,"451 ")) nomem();
   }
@@ -175,7 +182,7 @@
     }
   }
 
-  while ((opt = getopt(argc,argv,"bBcCt:r:a:")) != opteof)
+  while ((opt = getopt(argc,argv,"bBcCt:r:a:T:")) != opteof)
     switch(opt) {
       case 'b': flagrblbounce = 1; break;
       case 'B': flagrblbounce = 0; break;
@@ -184,6 +191,7 @@
       case 't': scan_ulong(optarg,&timeout); break;
       case 'r': rbl(optarg); flagwantdefaultrbl = 0; break;
       case 'a': antirbl(optarg); break;
+      case 'T': spamtrap = optarg; break;
       default: usage();
     }
 
@@ -191,7 +199,7 @@
   if (!*argv) usage();
 
   if (flagwantdefaultrbl) rbl("rbl.maps.vix.com");
-  if (decision >= 2) rblsmtpd();
+  if (decision >= 2) rblsmtpd(argv);
 
   pathexec_run(*argv,argv,envp);
   strerr_die4sys(111,FATAL,"unable to run ",*argv,": ");

