cvs commit: qpsmtpd/plugins sender_permitted_from
[email protected] (Matt Sergeant)
| Newsgroups | perl.cvs.qpsmtpd |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 03/06/27 10:27:35
Modified: plugins sender_permitted_from
Log:
Right names are "fail" and "softfail" (bad docs, bad)
Add headers by default instead of issuing DENY
Revision Changes Path
1.2 +38 -14 qpsmtpd/plugins/sender_permitted_from
Index: sender_permitted_from
===================================================================
RCS file: /cvs/public/qpsmtpd/plugins/sender_permitted_from,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -r1.1 -r1.2
--- sender_permitted_from 27 Jun 2003 12:25:52 -0000 1.1
+++ sender_permitted_from 27 Jun 2003 17:27:35 -0000 1.2
@@ -8,14 +8,20 @@
# in config/plugins
sender_permitted_from
+Or if you wish to issue 5xx on SPF fail:
+
+ sender_permitted_from spf_deny 1
+
=cut
use Mail::SPF::Query;
sub register {
- my ($self, $qp) = @_;
+ my ($self, $qp, @args) = @_;
+ %{$self->{_args}} = @args;
$self->register_hook("mail", "mail_handler");
$self->register_hook("rcpt", "rcpt_handler");
+ $self->register_hook("data_post", "data_handler");
}
sub mail_handler {
@@ -40,22 +46,40 @@
my $query = $transaction->notes('spfquery');
my ($result, $comment) = $query->result();
- if ($result eq "pass") {
- # domain is not forged
- $self->qp->connection->notes('spf_ok', 1);
- }
- elsif ($result eq "deny") {
- # domain is forged
+ $self->qp->connection->notes('spf_result', $result);
+ $self->qp->connection->notes('spf_comment', $comment);
+
+ if ($result eq "fail" and $self->{_args}{spf_deny}) {
return (DENY, "SPF forgery ($comment)");
}
- elsif ($result eq "softdeny") {
- # domain may be forged
- $self->qp->connection->notes('spf_ok', 0);
+
+ return (DECLINED);
+}
+
+sub data_handler {
+ my ($self, $transaction) = @_;
+
+ my $spf = $self->qp->connection->notes('spf_result');
+
+ my $host = $self->qp->connection->remote_host;
+ my $ip = $self->qp->connection->remote_ip;
+ my $sender = $transaction->sender;
+
+ my $details = '';
+ if ($spf eq 'fail') {
+ $details = "fail (client $host[$ip] is not a designated mailer for domain of sender $sender)";
+ }
+ elsif ($spf eq 'softfail') {
+ $details = "error (temporary failure while resolving designated mailer status for domain of sender $sender)";
+ }
+ elsif ($spf eq 'pass') {
+ $details = "pass (client $host[$ip] is designated mailer for domain of sender $sender)";
}
else {
- # domain has not implemented SPF
+ $details = "unknown (domain of sender $sender does not designate mailers)";
}
+ $transaction->header->add('Received-SPF' => $details);
- return (DECLINED);
+ return DECLINED;
}