PopRelay Support for milter-greylist.

In order to allow users of a conventional sendmail / pop3 setup to send email from a server running milter-greylist without being grey-listed, it is possible to feed an existing PopRelay authenticated pop3 recipient IP addresses database into the greylist.conf file.

In order to do that, you can set up a greylist.template file, which contains all static setup information, and patch the poprelay daemon (poprelayd) so it would create a new text-file from the database, containing setup information necessary to feed to milter-greylist.

The Recipe:

  1. rename the greylist.conf file to greylist.template

  2. apply this patch to the poprelay 1.5 daemon file poprelayd. it calls the subroutine added_output should it exist.

    The patch looks like this:

    --- poprelayd	Tue Jan 21 20:35:50 2003
    +++ patched/poprelayd	Tue Mar 23 12:27:17 2004
    @@ -357,8 +357,9 @@
     	    $lasttimeout = time;
     	    timeoutdb(60 * $timeout_minutes);
    +	&added_output() if defined &added_output;
     	sleep $log_wait_interval;

  3. add this addendum to the poprelay.conf file. it contains the added_output subroutine, which can be modified as needed.

    The subroutine looks like this:

    sub added_output {
    # local settings - please adjust as needed
    # where is greylist.conf etc. ?
    	my $BASE='/etc/mail/greylist';
    	my $GLT="$BASE.template";
    	my $GLN="$BASE.conf.NEW";
    	my $GLC="$BASE.conf";
    # where are the system utilities 'awk', 'poprelayd', and 'cat' ?
    	my $awk='/bin/awk';
    	my $prd='/sbin/poprelayd';
    	my $cat='/bin/cat';
    	my $dif='/usr/bin/diff';
    # local settings - setup finished.
    	system(qq~$prd -p|$awk 'BEGIN{system("$cat $GLT");}{printf"addr \%s/32\\n",\$1;}'>$GLN~);
    	my ($doit,$newf)=(0,0);
    	if(-f $GLN) {
    		if(-f $GLC) {
    			my $result=`$dif -q $GLN $GLC > /dev/null`;
    			my $ret=($? >> 8) & 127;
    			$doit=1 if $ret==1;
    		else {	$doit=1; }
    	if($doit) {
    		rename($GLN,$GLC); # should probably spit out an error if it fails
    	elsif($newf) {
    		unlink($GLN); # should probably spit out an error if it fails

  4. After all this is done, you can shutdown and start your poprelay daemon, and it will continuously create changed greylist.conf files containing the most up-to-date data from the PopRelay authenticated pop3 recipient IP addresses database.

March 26th, 2004 / Helmut Messerer