ph10 2005/04/05 16:47:51 BST
Modified files:
exim-doc/doc-txt ChangeLog
exim-src/src deliver.c
Log:
Change 4.51/PH/05 wasn't implemented quite correctly. I think I've now
sorted it.
Revision Changes Path
1.111 +1 -1 exim/exim-doc/doc-txt/ChangeLog
1.10 +14 -11 exim/exim-src/src/deliver.c
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -r1.110 -r1.111
--- ChangeLog 5 Apr 2005 14:33:27 -0000 1.110
+++ ChangeLog 5 Apr 2005 15:47:50 -0000 1.111
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.110 2005/04/05 14:33:27 ph10 Exp $
+$Cambridge: exim/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 @@
"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.
Index: deliver.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/deliver.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- deliver.c 22 Mar 2005 14:50:10 -0000 1.9
+++ deliver.c 5 Apr 2005 15:47:50 -0000 1.10
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/deliver.c,v 1.9 2005/03/22 14:50:10 ph10 Exp $ */
+/* $Cambridge: exim/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 @@
*************************************************/
/* 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 @@
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 @@
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 @@
{
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 @@
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. */