Indicate that duplicates shown in -bt output would not result in an
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Fri, 30 Jun 2006 15:36:08 +0000 (15:36 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Fri, 30 Jun 2006 15:36:08 +0000 (15:36 +0000)
additional delivery.

doc/doc-txt/ChangeLog
src/src/deliver.c
src/src/verify.c
test/stdout/0104
test/stdout/0291

index ea9472d2b154a156e5089370a075ed076c9d8840..79ce6d7d7c69817e4618c97f9386a9e01febc030 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.364 2006/06/30 13:57:46 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.365 2006/06/30 15:36:08 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -61,6 +61,12 @@ PH/07 Changed ${quote_pgsql to quote ' as '' instead of \' because of a
       PQescapeStringConn() function, because it needs a PGconn value as one of
       its arguments.
 
+PH/08 When testing addresses using -bt, indicate those final addresses that
+      are duplicates that would not cause an additional delivery. At least one
+      person was confused, thinking that -bt output corresponded to deliveries.
+      (Suppressing duplicates isn't a good idea as you lose the information
+      about possibly different redirections that led to the duplicates.)
+
 
 Exim version 4.62
 -----------------
index 4d3882520f0c83c37df52ded5f188d5473e83307..d4051768ea67443f127cc0362aaab493b7c50416 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/deliver.c,v 1.33 2006/06/30 14:14:46 ph10 Exp $ */
+/* $Cambridge: exim/src/src/deliver.c,v 1.34 2006/06/30 15:36:08 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -4372,13 +4372,13 @@ while (*s != 0)
 /* This function was introduced when the test for duplicate addresses that are
 not pipes, files, or autoreplies was moved from the middle of routing to when
 routing was complete. That was to fix obscure cases when the routing history
-affects the subsequent routing of identical addresses.
+affects the subsequent routing of identical addresses. This function is called
+after routing, to check that the final routed addresses are not duplicates.
 
-This function is called after routing, to check that the final routed addresses
-are not duplicates. If we detect a duplicate, we remember what it is a
-duplicate of. Note that pipe, file, and autoreply de-duplication is handled
-during routing, so we must leave such "addresses" alone here, as otherwise they
-will incorrectly be discarded.
+If we detect a duplicate, we remember what it is a duplicate of. Note that
+pipe, file, and autoreply de-duplication is handled during routing, so we must
+leave such "addresses" alone here, as otherwise they will incorrectly be
+discarded.
 
 Argument:     address of list anchor
 Returns:      nothing
index 93d9f582d6e98857de01324790701b727dce9230..841285fdca72364d0ca5b2dac374abebf4b9e956 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/verify.c,v 1.36 2006/04/04 11:18:31 ph10 Exp $ */
+/* $Cambridge: exim/src/src/verify.c,v 1.37 2006/06/30 15:36:08 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -1262,9 +1262,12 @@ or autoreplies, and there were no errors or deferments, the message is to be
 discarded, usually because of the use of :blackhole: in an alias file. */
 
 if (allok && addr_local == NULL && addr_remote == NULL)
+  {
   fprintf(f, "mail to %s is discarded\n", address);
+  return yield;
+  }
 
-else for (addr_list = addr_local, i = 0; i < 2; addr_list = addr_remote, i++)
+for (addr_list = addr_local, i = 0; i < 2; addr_list = addr_remote, i++)
   {
   while (addr_list != NULL)
     {
@@ -1277,6 +1280,19 @@ else for (addr_list = addr_local, i = 0; i < 2; addr_list = addr_remote, i++)
     if(addr->p.srs_sender)
       fprintf(f, "    [srs = %s]", addr->p.srs_sender);
 #endif
+
+    /* If the address is a duplicate, show something about it. */
+
+    if (!testflag(addr, af_pfr))
+      {
+      tree_node *tnode;
+      if ((tnode = tree_search(tree_duplicates, addr->unique)) != NULL)
+        fprintf(f, "   [duplicate, would not be delivered]");
+      else tree_add_duplicate(addr->unique, addr);
+      }
+
+    /* Now show its parents */
+
     while (p != NULL)
       {
       fprintf(f, "\n    <-- %s", p->address);
index ebb1e63101874872c5fa765b5cc841c89b0124be..d1759e014e5cea02b26d450fa888275c1b2a8462 100644 (file)
@@ -1,6 +1,6 @@
 xxx@test.ex
   router = all, transport = appendfile
-xxx@test.ex
+xxx@test.ex   [duplicate, would not be delivered]
   router = all, transport = appendfile
-xxx@test.ex
+xxx@test.ex   [duplicate, would not be delivered]
   router = all, transport = appendfile
index 8207fc39824ad10a088d5f81997908f5a85a2e31..92e9350bdf6e2ef428bca5ad83d0315602669afe 100644 (file)
@@ -2,7 +2,7 @@ c@one
     <-- b@one
     <-- a@one
   router = accept, transport = unset
-c@one
+c@one   [duplicate, would not be delivered]
     <-- b@one
   router = accept, transport = unset
 b@two