ph10 2005/03/15 12:27:55 GMT
Modified files:
exim-doc/doc-txt ChangeLog
exim-src ACKNOWLEDGMENTS
exim-src/src deliver.c
Added files:
exim-test-orig/AutoTest/confs 604
exim-test-orig/AutoTest/log 604
exim-test-orig/AutoTest/scripts 604
Log:
Fix obscure duplicate delivery bug caused by local transport batching
combined with certain patterns of homonymic redirection.
Revision Changes Path
1.90 +9 -0 exim/exim-doc/doc-txt/ChangeLog
1.15 +2 -1 exim/exim-src/ACKNOWLEDGMENTS
1.8 +2 -0 exim/exim-src/src/deliver.c
1.1 +61 -0 exim/exim-test-orig/AutoTest/confs/604 (new)
1.1 +12 -0 exim/exim-test-orig/AutoTest/log/604 (new)
1.1 +10 -0 exim/exim-test-orig/AutoTest/scripts/604 (new)
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -r1.89 -r1.90
--- ChangeLog 15 Mar 2005 11:37:21 -0000 1.89
+++ ChangeLog 15 Mar 2005 12:27:54 -0000 1.90
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.89 2005/03/15 11:37:21 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.90 2005/03/15 12:27:54 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -30,6 +30,15 @@
parent to be marked "delivered", so its unseen clone is never tried
again. For this reason, Exim now forbids the simultaneous setting of
these two options.
+
+PH/04. Change 4.11/85 fixed an obscure bug concerned with addresses that are
+ redirected to themselves ("homonym" addresses). Read the long ChangeLog
+ entry if you want to know the details. The fix, however, neglected to
+ consider the case when local delivery batching is involved. The test for
+ "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.
A note about Exim versions 4.44 and 4.50
Index: ACKNOWLEDGMENTS
===================================================================
RCS file: /home/cvs/exim/exim-src/ACKNOWLEDGMENTS,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- ACKNOWLEDGMENTS 8 Mar 2005 11:38:21 -0000 1.14
+++ ACKNOWLEDGMENTS 15 Mar 2005 12:27:54 -0000 1.15
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.14 2005/03/08 11:38:21 ph10 Exp $
+$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.15 2005/03/15 12:27:54 ph10 Exp $
EXIM ACKNOWLEDGEMENTS
@@ -20,7 +20,7 @@
Philip Hazel
Lists created: 20 November 2002
-Last updated: 08 March 2005
+Last updated: 15 March 2005
THE OLD LIST
@@ -197,6 +197,7 @@
Stephan Schulz Patch for $host_data caching error
Tony Sheen Log files with datestamped names and auto rollover
Martin Sluka Patch for exigrep to include non-message lines
+Russell Stuart Diagnosis of obscure batch multiple delivery bug
Tamas Tevesz Patch for crypt16() support
Johan Thelmen Support for the F-Secure virus scanner
William Thompson Suggested patch for acl_smtp_helo
Index: deliver.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/deliver.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- deliver.c 17 Feb 2005 11:58:25 -0000 1.7
+++ deliver.c 15 Mar 2005 12:27:54 -0000 1.8
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/deliver.c,v 1.7 2005/02/17 11:58:25 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/deliver.c,v 1.8 2005/03/15 12:27:54 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -2080,6 +2080,7 @@
same characteristics. These are:
same transport
+ not previously delivered (see comment about 50 lines above)
same local part if the transport's configuration contains $local_part
same domain if the transport's configuration contains $domain
same errors address
@@ -2093,6 +2094,7 @@
{
BOOL ok =
tp == next->transport &&
+ !previously_transported(next) &&
(!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) &&
Index: 604
====================================================================
# Exim test configuration 604
# Macros are set externally in order to get the path
# of the Exim that is being tested, and the directory
# in which the test data lives.
exim_path = EXIM_PATH
primary_hostname = myhost.test.ex
spool_directory = DIR/spool
# ----- Main settings -----
# ----- Routers -----
begin routers
r0:
driver = redirect
local_parts = alwaysdefer
allow_defer
data = :defer: Always
r1:
driver = redirect
local_parts = toplevel
data = deferfirsttime, second, third
r2:
driver = redirect
data = $local_part@$domain, alwaysdefer
r3:
driver = redirect
allow_defer
local_parts = deferfirsttime
condition = ${if first_delivery}
data = :defer: Defer the first time
r4:
driver = accept
transport = t1
# ----- Transports -----
begin transports
t1:
driver = appendfile
file = /dev/null
batch_max = 100
# ----- Retry -----
begin retry
* * F,1h,1s
# End
Index: 604
====================================================================
1999-03-02 09:44:33 10HmaX-0005vi-00 <= ph10@??? U=ph10 P=local S=271
1999-03-02 09:44:33 10HmaX-0005vi-00 == alwaysdefer@??? <toplevel@???> R=r0 defer (-1): Always
1999-03-02 09:44:33 10HmaX-0005vi-00 == deferfirsttime@??? <toplevel@???> R=r3 defer (-1): Defer the first time
1999-03-02 09:44:33 10HmaX-0005vi-00 => second <toplevel@???> R=r4 T=t1
1999-03-02 09:44:33 10HmaX-0005vi-00 -> third <toplevel@???> R=r4 T=t1
1999-03-02 09:44:33 Start queue run: pid=pppp -qf
1999-03-02 09:44:33 10HmaX-0005vi-00 == alwaysdefer@??? <toplevel@???> R=r0 defer (-1): Always
1999-03-02 09:44:33 10HmaX-0005vi-00 => deferfirsttime <toplevel@???> R=r4 T=t1
1999-03-02 09:44:33 End queue run: pid=pppp -qf
1999-03-02 09:44:33 Start queue run: pid=pppp -qf
1999-03-02 09:44:33 10HmaX-0005vi-00 == alwaysdefer@??? <toplevel@???> R=r0 defer (-1): Always
1999-03-02 09:44:33 End queue run: pid=pppp -qf
Index: 604
====================================================================
0 homonymic batched addresses with defer (stop duplicate delivery)
exim -odi toplevel
****
0
exim -qf
****
0
exim -qf
****
no_msglog_check