On 1/15/2015 2:55 PM, David F. Skoll wrote:
On Thu, 15 Jan 2015 10:41:14 -0700
Peter Nagel <pbna...@rmi.net> wrote:

[Some very good comments]

Yes, I can see how MIMEDefang misbehaves if you're trying to sign
something.  I'll definitely look at fixing the behaviour.

We've been experimenting with making sure DKIM verification is working so we've added a verification loop to test all of the DKIM signed messages to see if we can identify any edge cases that are failing.

To do this, we added an add_recipient call to our DKIM routine for signature. Perhaps some others might like to do the same so we can identify more edge cases.

We then run the emails through a small script that uses Mail::DKIM::Verifier to check the signature using procmail. Here's call to the script using procmail:

# RUN MESSAGES NOT DIRECTLY TO DKIM_CHECK THROUGH THE SCRIPT
:0 fw
* !^(To|Cc|Bcc|From): check_the_d...@pccc.com.*
| perl /usr/local/check_the_dkim.pl

# DISCARD ANY MESSAGES THAT SAY DISCARD FROM THE SCRIPT
:0:
* ^X-Status: D.*
/dev/null


And here's the small script:


#Written by PCCC to test edge cases of DKIM signing
#Released to Public Domain
use Mail::DKIM::Verifier;

our ($original_message);
&main();

sub main {
  my ($message, $result);

  $result = &get_result();

  if (uc($result) ne 'PASS') {

$message .= "A message signed by mimedefang has failed the DKIM verification.<br><br>";
    $message .= "<b>Result:</b> $result<br><br>";
    $message .= "<b>Original Message:</b><br><br>";
    $message .= "<pre>$original_message</pre>";

    # email message here

    # keep email in inbox for inspection
    print $original_message;

  } else {
    my $printed_delete = 0;

    # ADD X-Status: D TO MARK EMAIL DELETED
    foreach my $line (split("\n", $original_message)) {
      if ($printed_delete < 1 and $line =~ /^$/) {
        print "X-Status: D\n";
        $printed_delete++;
      }

      print $line."\n";
    }
  }

  # KEEP EMAIL IN INBOX FOR CHECKING LATER
  exit 0;
}

# USE THE VERIFIER TO CHECK THE DKIM SIGNATURE
sub get_result {
  my ($FORM, %params) = @_;
  my ($result, $dkim);

  # create a verifier object
  $dkim = Mail::DKIM::Verifier->new();

  while (<STDIN>)
  {
      # keep original message to be saved later
      $original_message .= $_;

      # remove local line terminators
      chomp;
      s/\015$//;

      # use SMTP line terminators
      $dkim->PRINT("$_\015\012");
  }
  $dkim->CLOSE;

  # what is the result of the verify?
  $result = $dkim->result_detail;

  return $result;
}


Regards,
KAM
_______________________________________________
NOTE: If there is a disclaimer or other legal boilerplate in the above
message, it is NULL AND VOID.  You may ignore it.

Visit http://www.mimedefang.org and http://www.roaringpenguin.com
MIMEDefang mailing list MIMEDefang@lists.roaringpenguin.com
http://lists.roaringpenguin.com/mailman/listinfo/mimedefang

Reply via email to