diff --git a/opendmarc-halonlog b/opendmarc-halonlog index adffc21..08e206a 100755 --- a/opendmarc-halonlog +++ b/opendmarc-halonlog @@ -1,9 +1,16 @@ #!/usr/bin/perl -#use warnings; +use warnings; use strict; my $reporter = $0; +my %spf_map = ( + 'pass' => 0, + 'softfail' => 2, + 'neutral' => 3, + 'none' => 6, + 'fail' => 7, +); while () { @@ -37,19 +44,15 @@ while () print '0' if ! defined($result{'p'}); print "\n"; print "sp "; - print ord('n') if $result{'sp'} eq 'none'; - print ord('r') if $result{'sp'} eq 'reject'; - print ord('q') if $result{'sp'} eq 'quarantine'; - print '0' if ! defined($result{'sp'}); - print "\n"; - print "spf "; - print '0' if $result{'spf'} eq 'pass'; - print '2' if $result{'spf'} eq 'softfail'; - print '3' if $result{'spf'} eq 'neutral'; - print '6' if $result{'spf'} eq 'none'; - print '7' if $result{'spf'} eq 'fail'; - print '-1' if $result{'spf'} eq 'unknown'; + if (defined($result{'sp'})) { + print ord('n') if $result{'sp'} eq 'none'; + print ord('r') if $result{'sp'} eq 'reject'; + print ord('q') if $result{'sp'} eq 'quarantine'; + } else { + print '0'; + } print "\n"; + printf("spf %d\n", exists($spf_map{$result{'spf'}}) ? $spf_map{$result{'spf'}} : -1); foreach my $key (keys %result) { next if $key !~ m/^dkim:(.+)\._domainkey\.(.+)$/s;