Hi,

thank you for the quick response and explanation.

> I also wonder if after 17 years this should get attention all.

I do understand that it is probably not really critical. I noticed the behavior with a non-standard case of having that colon as a delimiter within artificially constructed mailbox addresses and was able to work around by just choosing a different one.

AFAICS it does break recipient (or sender) address verification for any mailbox containing a ":", though. How many of those are practically encountered in the wild I cannot say, but probably not too many given that this has been in the code base for so long :)

Andreas

On 13.06.22 17:48, Wietse Venema wrote:
Andreas Weigel:
Hi,

I recently noticed some (for me) unexpected behavior with address
verification probes (reject_unverified_recipient in
smtpd_relay_restrictions). Given an envelope recipient with a local part
in Quoted-String format
(https://datatracker.ietf.org/doc/html/rfc5321#page-41) that contains a
colon, the verify daemon unconditionally replaces that colon by an
underscore; e.g., specifying the following recipient during the SMTP
conversation

RCPT TO: <"a:b"@example.org>

causes the verify daemon to initiate the sending of a probe to
<a...@example.org>. Using postfix's verbose debug output I verified that
the smtpd passes the address as a:b...@example.org to the verify daemon,
which then changes that.

In postfix/src/verify/verify.c --> static void verify_query_service(...)
I find

translit(STR(addr), ":", "_");

which I would deem the code responsible for the observed behavior.

I'd expect the verify daemon to re-quote the local part when sending out
a probe in that case, i.e. transmit a probe for <"a:b"@example.org>. Am
I overlooking some obvious issue here why this would be a bad idea?
This code was added 17 years ago, with a comment that it was neutering
(making harmless) the ':' in IPv6 address literals, but I do not
immediately recall

- what the problem was with localpart@[ipv6:address].

- why this simple substitution was considered adequate.

The email address is used as a cache storage/lookup key, and for
sending a probe request. The cache does not care if there is ':'
in a storage or lookup key. Still, if the problem was with the
cache, then the 'fix' could have neutered the ':' only for the cache
lookup key without changing the address used in a probe.

If it was a concern about the handling of probes, then perhaps that
was because a sender address it not validated as strongly as a
recipent address. A recipient address must resolve to an authorized
domain, and Postfix is paranoid about sender-specified routing to
circumvent policies. Such restrictions are rarely applied to a
sender address. And of course sender address verification was a big
use case of the verify daemon.

I'll have to think about this a bit more.

I also wonder if after 17 years this should get attention all.

        Wietse

Reply via email to