Better RFC conformance. (Reset transactions after the DATA command and
when the MAIL command is being done). git-svn-id: https://svn.perl.org/qpsmtpd/trunk@62 958fd67b-6ff1-0310-b445-bb7760255be9
This commit is contained in:
parent
6588ac300b
commit
f2bcad4da8
4
Changes
4
Changes
@ -1,3 +1,7 @@
|
|||||||
|
2002/09/10
|
||||||
|
Better RFC conformance. (Reset transactions after the DATA command and
|
||||||
|
when the MAIL command is being done)
|
||||||
|
|
||||||
|
|
||||||
2002/09/08 - v0.10 Released
|
2002/09/08 - v0.10 Released
|
||||||
|
|
||||||
|
@ -17,10 +17,11 @@ BEGIN{$^W=0;}
|
|||||||
use Net::DNS;
|
use Net::DNS;
|
||||||
BEGIN{$^W=1;}
|
BEGIN{$^W=1;}
|
||||||
|
|
||||||
$Qpsmtpd::VERSION = "0.10";
|
$Qpsmtpd::VERSION = "0.11-dev";
|
||||||
my $TRACE_LEVEL = 6;
|
my $TRACE_LEVEL = 6;
|
||||||
|
|
||||||
# $SIG{ALRM} = sub { respond(421, "Game over pal, game over. You got a timeout; I just can't wait that long..."); exit };
|
# $SIG{ALRM} = sub { respond(421, "Game over pal, game over. You got a
|
||||||
|
# timeout; I just can't wait that long..."); exit };
|
||||||
|
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
@ -111,11 +112,15 @@ sub start_conversation {
|
|||||||
|
|
||||||
sub transaction {
|
sub transaction {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
use Data::Dumper;
|
return $self->{_transaction} || $self->reset_transaction();
|
||||||
#warn Data::Dumper->Dump([\$self], [qw(self)]);
|
|
||||||
return $self->{_transaction} || ($self->{_transaction} = Qpsmtpd::Transaction->new());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub reset_transaction {
|
||||||
|
my $self = shift;
|
||||||
|
return $self->{_transaction} = Qpsmtpd::Transaction->new();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub connection {
|
sub connection {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->{_connection} || ($self->{_connection} = Qpsmtpd::Connection->new());
|
return $self->{_connection} || ($self->{_connection} = Qpsmtpd::Connection->new());
|
||||||
@ -153,6 +158,27 @@ sub ehlo {
|
|||||||
sub mail {
|
sub mail {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->respond(501, "syntax error in parameters") if $_[0] !~ m/^from:/i;
|
return $self->respond(501, "syntax error in parameters") if $_[0] !~ m/^from:/i;
|
||||||
|
|
||||||
|
# -> from RFC2821
|
||||||
|
# The MAIL command (or the obsolete SEND, SOML, or SAML commands)
|
||||||
|
# begins a mail transaction. Once started, a mail transaction
|
||||||
|
# consists of a transaction beginning command, one or more RCPT
|
||||||
|
# commands, and a DATA command, in that order. A mail transaction
|
||||||
|
# may be aborted by the RSET (or a new EHLO) command. There may be
|
||||||
|
# zero or more transactions in a session. MAIL (or SEND, SOML, or
|
||||||
|
# SAML) MUST NOT be sent if a mail transaction is already open,
|
||||||
|
# i.e., it should be sent only if no mail transaction had been
|
||||||
|
# started in the session, or it the previous one successfully
|
||||||
|
# concluded with a successful DATA command, or if the previous one
|
||||||
|
# was aborted with a RSET.
|
||||||
|
|
||||||
|
# sendmail (8.11) rejects a second MAIL command.
|
||||||
|
|
||||||
|
# qmail-smtpd (1.03) accepts it and just starts a new transaction.
|
||||||
|
# Since we are a qmail-smtpd thing we will do the same.
|
||||||
|
|
||||||
|
$self->reset_transaction;
|
||||||
|
|
||||||
unless ($self->connection->hello) {
|
unless ($self->connection->hello) {
|
||||||
return $self->respond(503, "please say hello first ...");
|
return $self->respond(503, "please say hello first ...");
|
||||||
}
|
}
|
||||||
@ -269,8 +295,7 @@ sub vrfy {
|
|||||||
|
|
||||||
sub rset {
|
sub rset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
$self->{_transaction} = undef;
|
$self->reset_transaction;
|
||||||
$self->transaction->start();
|
|
||||||
$self->respond(250, "OK");
|
$self->respond(250, "OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -377,10 +402,11 @@ sub data {
|
|||||||
$self->respond(452, $msg || "Message denied temporarily");
|
$self->respond(452, $msg || "Message denied temporarily");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return $self->queue($self->transaction);
|
$self->queue($self->transaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# DATA is always the end of a "transaction"
|
||||||
|
return $self->reset_transaction;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user