summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Hazel <ph10@hermes.cam.ac.uk>2005-04-05 15:47:50 +0000
committerPhilip Hazel <ph10@hermes.cam.ac.uk>2005-04-05 15:47:50 +0000
commitc2c19e9d1770ce26d595d9300f1f2e8c68125ba4 (patch)
treee63f0ad1a4ac043163d5528880d6fc7ab0448dab
parentc5ddb310a1f89a0560eea67879921570b046b179 (diff)
Change 4.51/PH/05 wasn't implemented quite correctly. I think I've now
sorted it.
-rw-r--r--doc/doc-txt/ChangeLog4
-rw-r--r--src/src/deliver.c27
2 files changed, 17 insertions, 14 deletions
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index d5c658131..22e76ad56 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.110 2005/04/05 14:33:27 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.111 2005/04/05 15:47:50 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -38,7 +38,7 @@ PH/04 Change 4.11/85 fixed an obscure bug concerned with addresses that are
"previously delivered" was not happening when checking to see if an
address could be batched with a previous (undelivered) one; under
certain circumstances this could lead to multiple deliveries to the same
- address. A one-line patch to add the appropriate test fixes the bug.
+ address.
PH/05 Renamed the macro SOCKLEN_T as EXIM_SOCKLEN_T because AIX uses SOCKLEN_T
in its include files, and this causes problems building Exim.
diff --git a/src/src/deliver.c b/src/src/deliver.c
index 7dbb94fc6..cc9b8ee0f 100644
--- a/src/src/deliver.c
+++ b/src/src/deliver.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/deliver.c,v 1.9 2005/03/22 14:50:10 ph10 Exp $ */
+/* $Cambridge: exim/src/src/deliver.c,v 1.10 2005/04/05 15:47:50 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -1449,18 +1449,21 @@ return rc;
*************************************************/
/* Check that this base address hasn't previously been delivered to its routed
-transport. The check is necessary at delivery time in order to handle homonymic
-addresses correctly in cases where the pattern of redirection changes between
-delivery attempts (so the unique fields change). Non-homonymic previous
-delivery is detected earlier, at routing time (which saves unnecessary
-routing).
+transport. If it has been delivered, mark it done. The check is necessary at
+delivery time in order to handle homonymic addresses correctly in cases where
+the pattern of redirection changes between delivery attempts (so the unique
+fields change). Non-homonymic previous delivery is detected earlier, at routing
+time (which saves unnecessary routing).
+
+Arguments:
+ addr the address item
+ testing TRUE if testing wanted only, without side effects
-Argument: the address item
Returns: TRUE if previously delivered by the transport
*/
static BOOL
-previously_transported(address_item *addr)
+previously_transported(address_item *addr, BOOL testing)
{
(void)string_format(big_buffer, big_buffer_size, "%s/%s",
addr->unique + (testflag(addr, af_homonym)? 3:0), addr->transport->name);
@@ -1470,7 +1473,7 @@ if (tree_search(tree_nonrecipients, big_buffer) != 0)
DEBUG(D_deliver|D_route|D_transport)
debug_printf("%s was previously delivered (%s transport): discarded\n",
addr->address, addr->transport->name);
- child_done(addr, tod_stamp(tod_log));
+ if (!testing) child_done(addr, tod_stamp(tod_log));
return TRUE;
}
@@ -2057,7 +2060,7 @@ while (addr_local != NULL)
attempts. Non-homonymic previous delivery is detected earlier, at routing
time. */
- if (previously_transported(addr)) continue;
+ if (previously_transported(addr, FALSE)) continue;
/* There are weird cases where logging is disabled */
@@ -2112,7 +2115,7 @@ while (addr_local != NULL)
{
BOOL ok =
tp == next->transport &&
- !previously_transported(next) &&
+ !previously_transported(next, TRUE) &&
(!uses_lp || Ustrcmp(next->local_part, addr->local_part) == 0) &&
(!uses_dom || Ustrcmp(next->domain, addr->domain) == 0) &&
same_strings(next->p.errors_address, addr->p.errors_address) &&
@@ -3390,7 +3393,7 @@ for (delivery_count = 0; addr_remote != NULL; delivery_count++)
attempts. Non-homonymic previous delivery is detected earlier, at routing
time. */
- if (previously_transported(addr)) continue;
+ if (previously_transported(addr, FALSE)) continue;
/* Force failure if the message is too big. */