> > This made me think, shouldn't the DENY code log the deny reason,
> > instead of modifying every plugin to log the reason?
>
> Only if you can make it consistent and change all the different
> handlers to DTRT. (IMO).
Like this patch?
Index: Qpsmtpd/SMTP.pm
===================================================================
RCS file: /cvs/public/qpsmtpd/lib/Qpsmtpd/SMTP.pm,v
retrieving revision 1.47
diff -u -u -2 -r1.47 SMTP.pm
--- Qpsmtpd/SMTP.pm 27 Nov 2004 06:38:32 -0000 1.47
+++ Qpsmtpd/SMTP.pm 28 Nov 2004 06:10:57 -0000
@@ -56,4 +56,5 @@
my ($rc, $msg) = $self->run_hooks("unrecognized_command", $cmd);
if ($rc == DENY) {
+ $self->log(LOGINFO, "DENY (unrecognized_command): $msg");
$self->respond(521, $msg);
$self->disconnect;
@@ -93,9 +94,13 @@
my ($rc, $msg) = $self->run_hooks("connect");
if ($rc == DENY) {
- $self->respond(550, ($msg || 'Connection from you denied, bye bye.'));
+ $msg ||= 'Connection from you denied, bye bye.';
+ $self->log(LOGINFO, "DENY (connect): $msg");
+ $self->respond(550, $msg);
return $rc;
}
elsif ($rc == DENYSOFT) {
- $self->respond(450, ($msg || 'Connection from you temporarily denied,
bye bye.'));
+ $msg ||= 'Connection from you temporarily denied, bye bye.';
+ $self->log(LOGINFO, "DENYSOFT (connect): $msg");
+ $self->respond(450, $msg);
return $rc;
}
@@ -137,6 +142,8 @@
# do nothing
} elsif ($rc == DENY) {
+ $self->log(LOGINFO, "DENY (helo): $msg");
$self->respond(550, $msg);
} elsif ($rc == DENYSOFT) {
+ $self->log(LOGINFO, "DENYSOFT (helo): $msg");
$self->respond(450, $msg);
} else {
@@ -157,6 +164,8 @@
# do nothing
} elsif ($rc == DENY) {
+ $self->log(LOGINFO, "DENY (ehlo): $msg");
$self->respond(550, $msg);
} elsif ($rc == DENYSOFT) {
+ $self->log(LOGINFO, "DENYSOFT (ehlo): $msg");
$self->respond(450, $msg);
} else {
@@ -250,22 +259,26 @@
}
elsif ($rc == DENY) {
+ $msg && $msg .= "(" . $from->format . ")";
$msg ||= $from->format . ', denied';
- $self->log(LOGINFO, "deny mail from " . $from->format . " ($msg)");
+ $self->log(LOGINFO, "DENY (mail): $msg");
$self->respond(550, $msg);
}
elsif ($rc == DENYSOFT) {
+ $msg && $msg .= "(" . $from->format . ")";
$msg ||= $from->format . ', temporarily denied';
- $self->log(LOGINFO, "denysoft mail from " . $from->format . " ($msg)");
+ $self->log(LOGINFO, "DENYSOFT (mail): $msg");
$self->respond(450, $msg);
}
elsif ($rc == DENY_DISCONNECT) {
+ $msg && $msg .= "(" . $from->format . ")";
$msg ||= $from->format . ', denied';
- $self->log(LOGINFO, "deny mail from " . $from->format . " ($msg)");
+ $self->log(LOGINFO, "DENY_DISCONNECT (mail): $msg");
$self->respond(550, $msg);
$self->disconnect;
}
elsif ($rc == DENYSOFT_DISCONNECT) {
+ $msg && $msg .= "(" . $from->format . ")";
$msg ||= $from->format . ', temporarily denied';
- $self->log(LOGINFO, "denysoft mail from " . $from->format . " ($msg)");
+ $self->log(LOGINFO, "DENYSOFT_DISCONNECT (mail): $msg");
$self->respond(450, $msg);
$self->disconnect;
@@ -297,13 +310,15 @@
elsif ($rc == DENY) {
$msg ||= 'relaying denied';
+ $self->log(LOGINFO, "DENY (rcpt): $msg");
$self->respond(550, $msg);
}
elsif ($rc == DENYSOFT) {
$msg ||= 'relaying denied';
+ $self->log(LOGINFO, "DENYSOFT (rcpt): $msg");
return $self->respond(450, $msg);
}
elsif ($rc == DENY_DISCONNECT) {
- $msg ||= 'delivery denied';
- $self->log(LOGINFO, "delivery denied ($msg)");
+ $msg ||= 'relaying denied';
+ $self->log(LOGINFO, "DENY_DISCONNECT (rcpt): $msg");
$self->respond(550, $msg);
$self->disconnect;
@@ -311,5 +326,5 @@
elsif ($rc == DENYSOFT_DISCONNECT) {
$msg ||= 'relaying denied';
- $self->log(LOGINFO, "delivery denied ($msg)");
+ $self->log(LOGINFO, "DENYSOFT_DISCONNECT (rcpt): $msg");
$self->respond(450, $msg);
$self->disconnect;
@@ -352,5 +367,7 @@
}
elsif ($rc == DENY) {
- $self->respond(554, $msg || "Access Denied");
+ $msg ||= "Access Denied";
+ $self->log(LOGINFO, "DENY (vrfy): $msg");
+ $self->respond(554, $msg);
$self->reset_transaction();
return 1;
@@ -397,20 +414,28 @@
}
elsif ($rc == DENY) {
- $self->respond(554, $msg || "Message denied");
+ $msg ||= "Message denied";
+ $self->log(LOGINFO, "DENY (data): $msg");
+ $self->respond(554, $msg);
$self->reset_transaction();
return 1;
}
elsif ($rc == DENYSOFT) {
- $self->respond(451, $msg || "Message denied temporarily");
+ $msg ||= "Message denied temporarily";
+ $self->log(LOGINFO, "DENYSOFT (data): $msg");
+ $self->respond(451, $msg);
$self->reset_transaction();
return 1;
}
elsif ($rc == DENY_DISCONNECT) {
- $self->respond(554, $msg || "Message denied");
+ $msg ||= "Message denied";
+ $self->log(LOGINFO, "DENY_DISCONNECT (data): $msg");
+ $self->respond(554, $msg);
$self->disconnect;
return 1;
}
elsif ($rc == DENYSOFT_DISCONNECT) {
- $self->respond(451, $msg || "Message denied temporarily");
+ $msg ||= "Message denied temporarily";
+ $self->log(LOGINFO, "DENYSOFT_DISCONNECT (data): $msg");
+ $self->respond(451, $msg);
$self->disconnect;
return 1;
@@ -513,8 +538,12 @@
}
elsif ($rc == DENY) {
- $self->respond(552, $msg || "Message denied");
+ $msg ||= "Message denied";
+ $self->log(LOGINFO, "DENY (data_post): $msg");
+ $self->respond(552, $msg);
}
elsif ($rc == DENYSOFT) {
- $self->respond(452, $msg || "Message denied temporarily");
+ $msg ||= "Message denied temporarily";
+ $self->log(LOGINFO, "DENYSOFT (data_post): $msg");
+ $self->respond(452, $msg);
}
else {
@@ -547,8 +576,12 @@
}
elsif ($rc == DENY) {
- $self->respond(552, $msg || "Message denied");
+ $msg ||= "Message denied";
+ $self->log(LOGINFO, "DENY (queue): $msg");
+ $self->respond(552, $msg);
}
elsif ($rc == DENYSOFT) {
- $self->respond(452, $msg || "Message denied temporarily");
+ $msg ||= "Message denied temporarily";
+ $self->log(LOGINFO, "DENYSOFT (queue): $msg");
+ $self->respond(452, $msg);
}
else {