Autor: Ross Boylan Data: Dla: exim-users CC: ross Temat: [exim] inappropriate result caching in router?
exim 4.69 reports it can't route lmtpbouncelong-ross@???,
despite this router:
lmtp_bounce_long:
debug_print = "R: lmtp_bounce_long for $local_part@$domain"
driver = accept
local_part_prefix = lmtpbouncelong-
local_parts = +imap_users
transport = cyrus_fail_long
If I comment out the local_parts test, routing succeeds. ross is in
+imap_users. Routing appears to fail because the result of a previous
local_parts test (with different affixes) is used.
Is this a bug? Is there anything I can do about it?
The larger scheme is that I'm trying to send myself a notice if the lmtp
delivery fails. To do that I plan to rewrite the envelope sender to,
e.g., lmtpbouncelong-xxx and then intercept the bounce with a special
router and autoreply transport. I don't want to use a regular bounce
because the notice needs to avoid having any of the potentially
problematic characters from the original message in it.
DETAILS
The debug log of the failure shows (in part)
--------> local_long router <--------
local_part=lmtpbouncelong-ross domain=betterworld.us
checking local_parts
lmtpbouncelong-ross in "ross:karen:kelsey"? no (end of list)
lmtpbouncelong-ross in "+imap_users"? no (end of list)
local_long router skipped: local_parts mismatch
--------> imap_long router <--------
local_part=lmtpbouncelong-ross domain=betterworld.us
checking local_parts
cached no match for +imap_users
cached lookup data = NULL
lmtpbouncelong-ross in "+imap_users"? no (end of list)
imap_long router skipped: local_parts mismatch
--------> imap_user router <--------
local_part=lmtpbouncelong-ross domain=betterworld.us
checking local_parts
cached no match for +imap_users
cached lookup data = NULL
lmtpbouncelong-ross in "+imap_users"? no (end of list)
imap_user router skipped: local_parts mismatch
--------> lmtp_bounce_long router <--------
local_part=lmtpbouncelong-ross domain=betterworld.us
stripped prefix lmtpbouncelong-
checking local_parts
cached no match for +imap_users
cached lookup data = NULL
ross in "+imap_users"? no (end of list)
lmtp_bounce_long router skipped: local_parts mismatch
One of those earlier routers is
imap_user:
debug_print = "R: imap_user for $local_part@$domain"
driver = accept
local_part_suffix_optional = true
local_part_suffix = +*
local_parts = +imap_users
transport = cyrus
imap_user has no trouble looking up ross even when the edress has a
suffix; the problem is not that such tests always use the local part
with affixes.
I speculate that the problem lies in this line for lmtp_bounce_long:
cached no match for +imap_users
Since the router specifies new affixes, it shouldn't be using the old
cached results (which did also involve tests with affixes). But
apparently it does.