qpsmtpd Wiki


You are here: start » plugins » spam » domainkeys_sign


You are currently not logged in! Enter your authentication credentials below to log in. You need to have cookies enabled to log in.


You don't have an account yet? Just get one: Register

Forgotten your password? Get a new one: Set new password

Untested and core dumps on OpenBSD/sparc64. Work in progress!

=head1 NAME

domainkeys_sign: attach a DomainKeys signature to incoming mail before it is queued.
There must be a way to signal which e-mails to sign.

written by Johan Almqvist


require Mail::DomainKeys::Message;
require Mail::DomainKeys::Key::Private;

sub hook_data_post {
	my $self = shift;
	my $trns = shift;
	unless ($self->connection->notes('authuser')) {
		return DECLINED;	
	my @body;


	$trns->body_getline; # \r\n seperator is NOT part of the body

	while (my $line = $trns->body_getline) {
		push @body, $line;

    my $mail = load Mail::DomainKeys::Message(
				HeadString => $trns->header->as_string,
				BodyReference => \@body)	
		|| warn("$$ unable to load message\n")
		&& return DECLINED;

	# no sender domain means no verification 
	$mail->	senderdomain
		|| return DECLINED;

# load the private key, or die trying
my $priv = load Mail::DomainKeys::Key::Private(File => "config/domainkeys/".$mail->senderdomain.".private")
	|| warn "unable to load key for domain $mail->senderdomain";

# sign the message using the "simple" canonifier and selector "test"
$mail->sign(Method => "simple", Selector => "test", Private => $priv);

my $signature = $mail->signature->as_string;
	$trns->header->add('DomainKey-Signature', $signature, 0);