[Mimedefang] Debugging message modification

Philip Prindeville philipp_subx at redfish-solutions.com
Thu Mar 14 17:18:07 EDT 2024



> On Mar 14, 2024, at 12:57 PM, Dianne Skoll <dianne at skoll.ca> wrote:
> 
> On Thu, 14 Mar 2024 11:58:59 -0600
> Philip Prindeville <philipp_subx at redfish-solutions.com> wrote:
> 
>> Thanks for that.  So is there an easy way to snapshot the message
>> in-the-raw as the final version before it gets sent out?
> 
> MIMEDefang, no.  Mailmunge, yes, with:
> 
>            $ctx->mime_entity->stringify()
> 
> as the last thing in filter_wrapup.
> 
>> Also, action_add_header() doesn't say if, in the case of a multiline
>> value, should the lines be split with \n or \r\n?
> 
> \n.  There's another bug that was fixed in Mailmunge; don't know if it
> was fixed in MIMEDefang.
> 
> https://git.skoll.ca/Skollsoft-Public/mailmunge/commit/fc9d099a863725eac9ac6285416bc5cfd9c90471
> 
> Regards,
> 
> Dianne.


Looking at:

https://github.com/The-McGrail-Foundation/MIMEDefang/blob/master/modules/lib/Mail/MIMEDefang.pm#L735

Yeah, this probably doesn't handle things as well as it might.

It look like it takes multiple values because of the @_ to map, but if you look at how it's called:

https://github.com/The-McGrail-Foundation/MIMEDefang/blob/master/modules/lib/Mail/MIMEDefang/Actions.pm#L243-L244

Then $value is always going to be a scalar.

I also see from:

https://github.com/The-McGrail-Foundation/MIMEDefang/blob/master/mimedefang.pl.in#L1362

That the header value shouldn't a trailing newline, or that might confuse the Milter... but in fact that Mail::DKIM::Signer->as_string() does indeed embed \r\n between the continuation lines and add a trailing one as well.

This seems to be what has been biting me.

I've amended my code to:

        my ($header, $signature) = split(/:\s+/i, $dkim->signature()->as_string(), 2);
        $signature =~ s/\r\n/\n/g;
        chomp $signature;

        action_add_header($header, $signature);

instead and we'll see how that works.  I tried to follow the thread of where Mail::DKIM::Signer->as_string() actually did the work:

https://metacpan.org/dist/Mail-DKIM/source/lib/Mail/DKIM/KeyValueList.pm#L136

Since Mail::DKIM::Signer->signature() returns a Mail::DKIM::Signature object, and that's based on a Mail::DKIM::KeyValueList object.

And then the trail of {tags}->{raw} went cold.





More information about the MIMEDefang mailing list