Chris Lewis wrote:
SMTP state and qpsmtpd/filtering state are not the same thing. The RFCs
talk about destroying SMTP state. It already does that without having
to destroy any notes() AFAICT. But it shouldn't blithely throwing away
qpsmtpd/filtering state - it's none of the RFC's business.
The current behavior throws away the entire transaction object and resets the
connection object to include only the fields at the top of Connection.pm:
# All of these parameters depend only on the physical connection,
# i.e. not on anything sent from the remote machine. Hence, they
# are an appropriate set to use for either start() or clone(). Do
# not add parameters here unless they also meet that criteria.
my @parameters = qw(
remote_host
remote_ip
remote_info
remote_port
local_ip
local_port
relay_client
);
All we are talking about at this point, really, is whether we should preserve
any connection notes as well [during clone], which I suggest is perfectly fine
from both a pragmatic and RFC standpoint.
It makes sense, for example, for a source-IP reputation checker
to launch its queries at connect time, and query the results at a later
phase (eg: rcpt/data) to make the decisions then, independent of whether
TLS was established or not.
Those are *connection* attributes, not *transaction* attributes. If a plugin is
storing them in the transaction object, that is a mistake. We can and probably
should maintain the connection notes from before the TLS reset, but I maintain
that we should not keep the transaction notes.
John