From dbcef0eae3a206924751465a5a5ab084a0f68a8b Mon Sep 17 00:00:00 2001 From: Philip Hazel Date: Fri, 30 Jun 2006 15:36:08 +0000 Subject: [PATCH] Indicate that duplicates shown in -bt output would not result in an additional delivery. --- doc/doc-txt/ChangeLog | 8 +++++++- src/src/deliver.c | 14 +++++++------- src/src/verify.c | 20 ++++++++++++++++++-- test/stdout/0104 | 4 ++-- test/stdout/0291 | 2 +- 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index ea9472d2b..79ce6d7d7 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -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 ----------------- diff --git a/src/src/deliver.c b/src/src/deliver.c index 4d3882520..d4051768e 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -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 diff --git a/src/src/verify.c b/src/src/verify.c index 93d9f582d..841285fdc 100644 --- a/src/src/verify.c +++ b/src/src/verify.c @@ -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); diff --git a/test/stdout/0104 b/test/stdout/0104 index ebb1e6310..d1759e014 100644 --- a/test/stdout/0104 +++ b/test/stdout/0104 @@ -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 diff --git a/test/stdout/0291 b/test/stdout/0291 index 8207fc398..92e9350bd 100644 --- a/test/stdout/0291 +++ b/test/stdout/0291 @@ -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 -- 2.30.2