Nothing urgent here. Probably can wait for filter documentation. However, I've 
been
playing with filters off and on with limited success. It seems like data-line 
will 
be the most useful to filter on so thats been my focus lately. I have the 
following
script:

#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;

open(my $fh, '>', '/tmp/log.txt') or die $!;

# remove line buffering
select(STDOUT);
$|++;
select($fh);
$|++;

print STDOUT "register|filter|smtp-in|data-line\n";
print STDOUT "register|ready\n";

while ( <> ) {
        chomp; # get rid of newline

        my @report = split /\|/;

        next if $report[0] eq 'config';

        foreach (@report) {
                print $fh "$_\|"; # just to see whats there
        }
        print $fh "\n";

        my $inbody = 0;
        my ($sid, $token, $line);
        $sid = $report[5];
        $token = $report[6];
        $line = $report[$#report];
        if ($report[0] eq 'filter' and $report[3] eq 'smtp-in' and $report[4] 
eq 'data-line') {
                die "invalid filter command" if (scalar @report < 7);
                if ($line eq '') { print $fh "end of headers\n"; $inbody++; }
                if ($line eq '.') { print $fh "end of message\n"; $inbody--; }
                print $fh "filter-dataline|$token|$sid|$line\n";
                print STDOUT "filter-dataline|$token|$sid|$line\n";
        }
}

close $fh;

0;

It prints the following in /tmp/log.txt after a 
$ echo "HI" | mail edgar

filter|0|1566239933.835511|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|Received:
 from localhost (deathstar.my.domain [local])|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|Received: from localhost 
(deathstar.my.domain [local])
filter|0|1566239933.835523|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a| 
by deathstar.my.domain (OpenSMTPD) with ESMTPA id 7052ea5a|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|      by deathstar.my.domain 
(OpenSMTPD) with ESMTPA id 7052ea5a
filter|0|1566239933.835529|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a| 
for <ed...@deathstar.my.domain>;|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|      for 
<ed...@deathstar.my.domain>;
filter|0|1566239933.835533|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a| 
Mon, 19 Aug 2019 13:38:53 -0500 (CDT)|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|      Mon, 19 Aug 2019 
13:38:53 -0500 (CDT)
filter|0|1566239933.836673|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|From:
 Edgar Pettijohn <ed...@deathstar.my.domain>|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|From: Edgar Pettijohn 
<ed...@deathstar.my.domain>
filter|0|1566239933.836681|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|Date:
 Mon, 19 Aug 2019 13:38:53 -0500 (CDT)|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|Date: Mon, 19 Aug 2019 
13:38:53 -0500 (CDT)
filter|0|1566239933.836685|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|To:
 edgar|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|To: edgar
filter|0|1566239933.836688|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|ef8747a12860387a
filter|0|1566239933.836692|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|HI|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|HI
filter|0|1566239933.836695|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|.|
end of message
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|.

I get the following response:
deathstar$ sendmail: command failed: 550 5.7.1 Delivery not authorized, message 
refused: Message is not RFC 2822 compliant

I see the same from a telnet session as well.

So there are 2 problems. First my script doesn't appear to acurately determine 
that the headers are finished. Second mail
doesn't go through. Any suggestions are appreciated.

Thanks,

Edgar

Reply via email to