Include sender address in retry key for 4xx errors.
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Mon, 6 Nov 2006 15:50:12 +0000 (15:50 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Mon, 6 Nov 2006 15:50:12 +0000 (15:50 +0000)
18 files changed:
doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
doc/doc-txt/OptionLists.txt
src/src/deliver.c
src/src/transports/smtp.c
src/src/transports/smtp.h
test/confs/0247
test/confs/0388
test/log/0357
test/scripts/0000-Basic/0357
test/stderr/0357
test/stderr/0358
test/stderr/0388
test/stderr/5005
test/stdout/0357
test/stdout/0358
test/stdout/0474
test/stdout/0497

index c475c087733b0b942824949dafd75e5302fadf03..99e28d07ac4e2eb28ce4f763729b78f898d03fea 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.424 2006/11/06 11:27:54 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.425 2006/11/06 15:50:12 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -236,6 +236,17 @@ PH/35 The error "getsockname() failed: connection reset by peer" was being
       removed the panic log writing for the ECONNRESET error when getsockname()
       fails.
 
+PH/36 After a 4xx response to a RCPT error, that address was delayed (in queue
+      runs only) independently of the message's sender address. This meant
+      that, if the 4xx error was in fact related to the sender, a different
+      message to the same recipient with a different sender could confuse
+      things. In particualar, this can happen when sending to a greylisting
+      server, but other circumstances could also provoke similar problems.
+      I have changed the default so that the retry time for these errors is now
+      based a combination of the sender and recipient addresses. This change
+      can be overridden by setting address_retry_include_sender=false in the
+      smtp transport.
+
 
 Exim version 4.63
 -----------------
index 95a207516fd7666749a4b30d1ef519e2c6cb20f2..695acce86a30705439bf287d541c2adac0e59146 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.119 2006/10/24 12:56:06 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.120 2006/11/06 15:50:12 ph10 Exp $
 
 New Features in Exim
 --------------------
@@ -154,6 +154,15 @@ Version 4.64
    line, because further arguments are taken as strings to expand (just like
    -be).
 
+9. When an address is delayed because of a 4xx response to a RCPT command, it
+   is now the combination of sender and recipient that is delayed in subsequent
+   queue runs until its retry time is reached. You can revert to the previous
+   behavious, that is, delay the recipient independent of the sender, by
+   setting address_retry_include_sender=false in the smtp transport. However,
+   this can lead to problems with servers that regularly issue 4xx responses to
+   RCPT commands.
+
+
 
 Version 4.63
 ------------
index f0ef3c2f88814ba5fc6db525c4c7dc72fbf7a273..1b73b1e5ed6c62d57136c83b4f926a7bd7e5713a 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/OptionLists.txt,v 1.26 2006/10/24 12:56:06 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/OptionLists.txt,v 1.27 2006/11/06 15:50:12 ph10 Exp $
 
 LISTS OF EXIM OPTIONS
 ---------------------
@@ -68,6 +68,7 @@ acl_smtp_rcpt                        string*         unset         main
 acl_smtp_starttls                    string*         unset         main              4.11
 acl_smtp_vrfy                        string*         unset         main              4.00
 address_data                         string*         unset         routers           4.00
+address_retry_include_sender         boolean         true          smtp              4.64
 address_test                         boolean         true          routers           4.14
 admin_groups                         string list     unset         main              3.02
 allow_domain_literals                boolean         false         main              4.00 replacing forbid_domain_literals
index 81df0e0832187651fab01a3b29710ef0cf41b42a..02552317a5e0ce2083aa814026898facf32aa51f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/deliver.c,v 1.37 2006/10/30 16:41:04 ph10 Exp $ */
+/* $Cambridge: exim/src/src/deliver.c,v 1.38 2006/11/06 15:50:12 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -5452,8 +5452,10 @@ while (addr_new != NULL)           /* Loop until all addresses dealt with */
       }
 
     /* Get the routing retry status, saving the two retry keys (with and
-    without the local part) for subsequent use. Ignore retry records that
-    are too old. */
+    without the local part) for subsequent use. If there is no retry record for
+    the standard address routing retry key, we look for the same key with the
+    sender attached, because this form is used by the smtp transport after a
+    4xx response to RCPT when address_retry_include_sender is true. */
 
     addr->domain_retry_key = string_sprintf("R:%s", addr->domain);
     addr->address_retry_key = string_sprintf("R:%s@%s", addr->local_part,
@@ -5466,12 +5468,22 @@ while (addr_new != NULL)           /* Loop until all addresses dealt with */
       domain_retry_record = dbfn_read(dbm_file, addr->domain_retry_key);
       if (domain_retry_record != NULL &&
           now - domain_retry_record->time_stamp > retry_data_expire)
-        domain_retry_record = NULL;
+        domain_retry_record = NULL;    /* Ignore if too old */
 
       address_retry_record = dbfn_read(dbm_file, addr->address_retry_key);
       if (address_retry_record != NULL &&
           now - address_retry_record->time_stamp > retry_data_expire)
-        address_retry_record = NULL;
+        address_retry_record = NULL;   /* Ignore if too old */
+
+      if (address_retry_record == NULL)
+        {
+        uschar * altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
+          sender_address);
+        address_retry_record = dbfn_read(dbm_file, altkey);
+        if (address_retry_record != NULL &&
+            now - address_retry_record->time_stamp > retry_data_expire)
+          address_retry_record = NULL;   /* Ignore if too old */
+        }
       }
 
     DEBUG(D_deliver|D_retry)
index ac013470b22ab0963467d02688372e99504b2215..f9e56c2e1a35b07083439f68a2185a604b326b19 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/transports/smtp.c,v 1.28 2006/10/30 16:41:04 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/smtp.c,v 1.29 2006/11/06 15:50:12 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -21,6 +21,8 @@ before the lower case letters). Some live in the transport_instance block so as
 to be publicly visible; these are flagged with opt_public. */
 
 optionlist smtp_transport_options[] = {
+  { "address_retry_include_sender", opt_bool,
+      (void *)offsetof(smtp_transport_options_block, address_retry_include_sender) },
   { "allow_localhost",      opt_bool,
       (void *)offsetof(smtp_transport_options_block, allow_localhost) },
   { "authenticated_sender", opt_stringptr,
@@ -159,6 +161,7 @@ smtp_transport_options_block smtp_transport_option_defaults = {
   1024,                /* size_addition */
   5,                   /* hosts_max_try */
   50,                  /* hosts_max_try_hardlimit */
+  TRUE,                /* address_retry_include_sender */
   FALSE,               /* allow_localhost */
   FALSE,               /* authenticated_sender_force */
   FALSE,               /* gethostbyname */
@@ -555,19 +558,21 @@ subsequent general error, it will get reset accordingly. If not, it will get
 converted to OK at the end.
 
 Arguments:
-  addrlist         the complete address list
-  include_affixes  TRUE if affixes include in RCPT
-  sync_addr        ptr to the ptr of the one to start scanning at (updated)
-  host             the host we are connected to
-  count            the number of responses to read
-  pending_MAIL     true if the first response is for MAIL
-  pending_DATA     0 if last command sent was not DATA
-                  +1 if previously had a good recipient
-                  -1 if not previously had a good recipient
-  inblock          incoming SMTP block
-  timeout          timeout value
-  buffer           buffer for reading response
-  buffsize         size of buffer
+  addrlist          the complete address list
+  include_affixes   TRUE if affixes include in RCPT
+  sync_addr         ptr to the ptr of the one to start scanning at (updated)
+  host              the host we are connected to
+  count             the number of responses to read
+  address_retry_
+    include_sender  true if 4xx retry is to include the sender it its key
+  pending_MAIL      true if the first response is for MAIL
+  pending_DATA      0 if last command sent was not DATA
+                   +1 if previously had a good recipient
+                   -1 if not previously had a good recipient
+  inblock           incoming SMTP block
+  timeout           timeout value
+  buffer            buffer for reading response
+  buffsize          size of buffer
 
 Returns:      3 if at least one address had 2xx and one had 5xx
               2 if at least one address had 5xx but none had 2xx
@@ -580,7 +585,8 @@ Returns:      3 if at least one address had 2xx and one had 5xx
 
 static int
 sync_responses(address_item *addrlist, BOOL include_affixes,
-  address_item **sync_addr, host_item *host, int count, BOOL pending_MAIL,
+  address_item **sync_addr, host_item *host, int count,
+  BOOL address_retry_include_sender, BOOL pending_MAIL,
   int pending_DATA, smtp_inblock *inblock, int timeout, uschar *buffer,
   int buffsize)
 {
@@ -705,10 +711,17 @@ while (count-- > 0)
 
       update_waiting = FALSE;
 
-      /* Add a retry item for the address so that it doesn't get tried
-      again too soon. */
+      /* Add a retry item for the address so that it doesn't get tried again
+      too soon. If address_retry_include_sender is true, add the sender address
+      to the retry key. */
 
-      retry_add_item(addr, addr->address_retry_key, 0);
+      if (address_retry_include_sender)
+        {
+        uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
+          sender_address);
+        retry_add_item(addr, altkey, 0);
+        }
+      else retry_add_item(addr, addr->address_retry_key, 0);
       }
     }
   }       /* Loop for next RCPT response */
@@ -1404,8 +1417,9 @@ for (addr = first_addr;
   if (count > 0)
     {
     switch(sync_responses(first_addr, tblock->rcpt_include_affixes,
-             &sync_addr, host, count, pending_MAIL, 0, &inblock,
-             ob->command_timeout, buffer, sizeof(buffer)))
+             &sync_addr, host, count, ob->address_retry_include_sender,
+             pending_MAIL, 0, &inblock, ob->command_timeout, buffer,
+             sizeof(buffer)))
       {
       case 3: ok = TRUE;                   /* 2xx & 5xx => OK & progress made */
       case 2: completed_address = TRUE;    /* 5xx (only) => progress made */
@@ -1453,8 +1467,8 @@ if (ok || (smtp_use_pipelining && !mua_wrapper))
   int count = smtp_write_command(&outblock, FALSE, "DATA\r\n");
   if (count < 0) goto SEND_FAILED;
   switch(sync_responses(first_addr, tblock->rcpt_include_affixes, &sync_addr,
-           host, count, pending_MAIL, ok? +1 : -1, &inblock,
-           ob->command_timeout, buffer, sizeof(buffer)))
+           host, count, ob->address_retry_include_sender, pending_MAIL,
+           ok? +1 : -1, &inblock, ob->command_timeout, buffer, sizeof(buffer)))
     {
     case 3: ok = TRUE;                   /* 2xx & 5xx => OK & progress made */
     case 2: completed_address = TRUE;    /* 5xx (only) => progress made */
index 05f02bc00ed8c4ea817584f88d2371df23a4cb6d..107b91853f4585ab34e1e90a59dcbe02cfe31069 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/transports/smtp.h,v 1.8 2006/02/28 12:42:47 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/smtp.h,v 1.9 2006/11/06 15:50:12 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -33,6 +33,7 @@ typedef struct {
   int     size_addition;
   int     hosts_max_try;
   int     hosts_max_try_hardlimit;
+  BOOL    address_retry_include_sender;
   BOOL    allow_localhost;
   BOOL    authenticated_sender_force;
   BOOL    gethostbyname;
index 7de97edd1adb251385c9912a97edb4ec0e0a0b69..eb11b0939291870a742e87a4c8d4a7a964637552 100644 (file)
@@ -11,7 +11,6 @@ gecos_name = CALLER_NAME
 
 # ----- Main settings -----
 
-
 # ----- Routers -----
 
 begin routers
index ec41efcafa3fd8244cd5f3a58c356aec1645b22c..0252cbd9e6532184eba06caeb228acb8866b1134 100644 (file)
@@ -37,6 +37,7 @@ smtp:
   hosts_max_try = 1
   port = PORT_S
   connect_timeout = 2s
+  address_retry_include_sender = false
 
 # ----- Retry -----
 
index b89d3db340dcffb1b647804a7480b9f5ada3b143..0aa9fd78782ec134ca7b431552e0f901ac2025ef 100644 (file)
@@ -6,3 +6,6 @@
 1999-03-02 09:44:33 Start queue run: pid=pppp
 1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@test.ex R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 1999-03-02 09:44:33 End queue run: pid=pppp
+1999-03-02 09:44:33 Start queue run: pid=pppp
+1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@test.ex routing defer (-51): retry time not reached
+1999-03-02 09:44:33 End queue run: pid=pppp
index 1ca60b12db63dfe090a1d3a97e2e03ac55bdbf61..ba1f5fa4a45435a6bcf1741f4e9411fac54aaa93 100644 (file)
@@ -46,4 +46,6 @@ QUIT
 exim -q -d-all+retry
 ****
 dump retry
+exim -q -d-all+retry
+****
 no_msglog_check
index 7a6ee4d3bf1a1a310c15f755781717db951d563d..cae10d04f43c87f4d37ef94a1a724609e69b5981 100644 (file)
@@ -24,8 +24,8 @@ After routing:
 checking status of 127.0.0.1
 locking TESTSUITE/spool/db/retry.lockfile
 no retry data available
-added retry item for R:userx@test.ex: errno=-44 more_errno=dd,A flags=0
-reading retry information for R:userx@test.ex from subprocess
+added retry item for R:userx@test.ex:<CALLER@test.ex>: errno=-44 more_errno=dd,A flags=0
+reading retry information for R:userx@test.ex:<CALLER@test.ex> from subprocess
   added retry item
 LOG: MAIN
   == userx@test.ex R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
@@ -35,9 +35,9 @@ Failed addresses:
 Deferred addresses:
 userx@test.ex
 locking TESTSUITE/spool/db/retry.lockfile
-retry for R:userx@test.ex = * 0 0
+retry for R:userx@test.ex:<CALLER@test.ex> = * 0 0
 failing_interval=ttt message_age=ttt
-Writing retry data for R:userx@test.ex
+Writing retry data for R:userx@test.ex:<CALLER@test.ex>
   first failed=dddd last try=dddd next try=+1 expired=0
   errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 end of retry processing
@@ -65,15 +65,15 @@ checking status of 127.0.0.1
 locking TESTSUITE/spool/db/retry.lockfile
 no host retry record
 no message retry record
-added retry item for R:userx@test.ex: errno=-44 more_errno=dd,A flags=0
-reading retry information for R:userx@test.ex from subprocess
-  existing delete item dropped
+added retry item for R:userx@test.ex:<CALLER@test.ex>: errno=-44 more_errno=dd,A flags=0
+reading retry information for R:userx@test.ex:<CALLER@test.ex> from subprocess
   added retry item
 reading retry information for R:test.ex from subprocess
   existing delete item dropped
   added delete item
 reading retry information for R:userx@test.ex from subprocess
-  delete item not added: non-delete item exists
+  existing delete item dropped
+  added delete item
 LOG: MAIN
   == userx@test.ex R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 Processing retry items
@@ -82,10 +82,11 @@ Failed addresses:
 Deferred addresses:
 userx@test.ex
 locking TESTSUITE/spool/db/retry.lockfile
+deleted retry information for R:userx@test.ex
 deleted retry information for R:test.ex
-retry for R:userx@test.ex = * 0 0
+retry for R:userx@test.ex:<CALLER@test.ex> = * 0 0
 failing_interval=ttt message_age=ttt
-Writing retry data for R:userx@test.ex
+Writing retry data for R:userx@test.ex:<CALLER@test.ex>
   first failed=dddd last try=dddd next try=+1 expired=0
   errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 end of retry processing
@@ -114,15 +115,15 @@ checking status of 127.0.0.1
 locking TESTSUITE/spool/db/retry.lockfile
 no host retry record
 no message retry record
-added retry item for R:userx@test.ex: errno=-44 more_errno=dd,A flags=0
-reading retry information for R:userx@test.ex from subprocess
-  existing delete item dropped
+added retry item for R:userx@test.ex:<CALLER@test.ex>: errno=-44 more_errno=dd,A flags=0
+reading retry information for R:userx@test.ex:<CALLER@test.ex> from subprocess
   added retry item
 reading retry information for R:test.ex from subprocess
   existing delete item dropped
   added delete item
 reading retry information for R:userx@test.ex from subprocess
-  delete item not added: non-delete item exists
+  existing delete item dropped
+  added delete item
 LOG: MAIN
   == userx@test.ex R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 Processing retry items
@@ -131,13 +132,41 @@ Failed addresses:
 Deferred addresses:
 userx@test.ex
 locking TESTSUITE/spool/db/retry.lockfile
+deleted retry information for R:userx@test.ex
 deleted retry information for R:test.ex
-retry for R:userx@test.ex = * 0 0
+retry for R:userx@test.ex:<CALLER@test.ex> = * 0 0
 failing_interval=ttt message_age=ttt
-Writing retry data for R:userx@test.ex
+Writing retry data for R:userx@test.ex:<CALLER@test.ex>
   first failed=dddd last try=dddd next try=+2 expired=0
   errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 end of retry processing
 LOG: queue_run MAIN
   End queue run: pid=pppp
 >>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+admin user
+LOG: queue_run MAIN
+  Start queue run: pid=pppp
+locking TESTSUITE/spool/db/retry.lockfile
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+Considering: userx@test.ex
+no domain retry record
+LOG: retry_defer MAIN
+  == userx@test.ex routing defer (-51): retry time not reached
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+After routing:
+  Local deliveries:
+  Remote deliveries:
+  Failed addresses:
+  Deferred addresses:
+    userx@test.ex
+Processing retry items
+Succeeded addresses:
+Failed addresses:
+Deferred addresses:
+userx@test.ex: no retry items
+end of retry processing
+LOG: queue_run MAIN
+  End queue run: pid=pppp
+>>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
index 40e38ca127b440d1255a9fa339db19fe30a26352..c48a96e4b4f26e7f1b6730df80c27762f16517f5 100644 (file)
@@ -29,11 +29,11 @@ After routing:
 checking status of 127.0.0.1
 locking TESTSUITE/spool/db/retry.lockfile
 no retry data available
-added retry item for R:userx@test.ex: errno=-44 more_errno=dd,A flags=0
-added retry item for R:usery@test.ex: errno=-44 more_errno=dd,A flags=0
-reading retry information for R:userx@test.ex from subprocess
+added retry item for R:userx@test.ex:<CALLER@test.ex>: errno=-44 more_errno=dd,A flags=0
+added retry item for R:usery@test.ex:<CALLER@test.ex>: errno=-44 more_errno=dd,A flags=0
+reading retry information for R:userx@test.ex:<CALLER@test.ex> from subprocess
   added retry item
-reading retry information for R:usery@test.ex from subprocess
+reading retry information for R:usery@test.ex:<CALLER@test.ex> from subprocess
   added retry item
 LOG: MAIN
   == userx@test.ex R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
@@ -45,15 +45,15 @@ Failed addresses:
 Deferred addresses:
 usery@test.ex
 locking TESTSUITE/spool/db/retry.lockfile
-retry for R:usery@test.ex = * 0 0
+retry for R:usery@test.ex:<CALLER@test.ex> = * 0 0
 failing_interval=ttt message_age=ttt
-Writing retry data for R:usery@test.ex
+Writing retry data for R:usery@test.ex:<CALLER@test.ex>
   first failed=dddd last try=dddd next try=+1 expired=0
   errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<usery@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 userx@test.ex
-retry for R:userx@test.ex = * 0 0
+retry for R:userx@test.ex:<CALLER@test.ex> = * 0 0
 failing_interval=ttt message_age=ttt
-Writing retry data for R:userx@test.ex
+Writing retry data for R:userx@test.ex:<CALLER@test.ex>
   first failed=dddd last try=dddd next try=+1 expired=0
   errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 end of retry processing
@@ -87,24 +87,24 @@ checking status of 127.0.0.1
 locking TESTSUITE/spool/db/retry.lockfile
 no host retry record
 no message retry record
-added retry item for R:userx@test.ex: errno=-44 more_errno=dd,A flags=0
-added retry item for R:usery@test.ex: errno=-44 more_errno=dd,A flags=0
-reading retry information for R:userx@test.ex from subprocess
-  existing delete item dropped
+added retry item for R:userx@test.ex:<CALLER@test.ex>: errno=-44 more_errno=dd,A flags=0
+added retry item for R:usery@test.ex:<CALLER@test.ex>: errno=-44 more_errno=dd,A flags=0
+reading retry information for R:userx@test.ex:<CALLER@test.ex> from subprocess
   added retry item
 reading retry information for R:test.ex from subprocess
   existing delete item dropped
   added delete item
 reading retry information for R:userx@test.ex from subprocess
-  delete item not added: non-delete item exists
-reading retry information for R:usery@test.ex from subprocess
   existing delete item dropped
+  added delete item
+reading retry information for R:usery@test.ex:<CALLER@test.ex> from subprocess
   added retry item
 reading retry information for R:test.ex from subprocess
   existing delete item dropped
   added delete item
 reading retry information for R:usery@test.ex from subprocess
-  delete item not added: non-delete item exists
+  existing delete item dropped
+  added delete item
 LOG: MAIN
   == userx@test.ex R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 LOG: MAIN
@@ -115,17 +115,19 @@ Failed addresses:
 Deferred addresses:
 usery@test.ex
 locking TESTSUITE/spool/db/retry.lockfile
+deleted retry information for R:usery@test.ex
 deleted retry information for R:test.ex
-retry for R:usery@test.ex = * 0 0
+retry for R:usery@test.ex:<CALLER@test.ex> = * 0 0
 failing_interval=ttt message_age=ttt
-Writing retry data for R:usery@test.ex
+Writing retry data for R:usery@test.ex:<CALLER@test.ex>
   first failed=dddd last try=dddd next try=+2 expired=0
   errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<usery@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 userx@test.ex
+deleted retry information for R:userx@test.ex
 deleted retry information for R:test.ex
-retry for R:userx@test.ex = * 0 0
+retry for R:userx@test.ex:<CALLER@test.ex> = * 0 0
 failing_interval=ttt message_age=ttt
-Writing retry data for R:userx@test.ex
+Writing retry data for R:userx@test.ex:<CALLER@test.ex>
   first failed=dddd last try=dddd next try=+2 expired=0
   errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 end of retry processing
index dc12b27811d3d9b62ee27264866c850f5002e459..e4b6b413c740a30475ab42b95e5533f4bf4a9b26 100644 (file)
@@ -224,6 +224,7 @@ Considering: CALLER@myhost.test.ex
 unique = CALLER@myhost.test.ex
 dbfn_read: key=R:myhost.test.ex
 dbfn_read: key=R:CALLER@myhost.test.ex
+dbfn_read: key=R:CALLER@myhost.test.ex:<>
 no domain retry record
 no address retry record
 CALLER@myhost.test.ex: queued for routing
index 4a28a686ff2ff6dcafe20811a95c80839ca9c558..e27fbfaac195ade2145fd1eca56eeac0784d61c0 100644 (file)
@@ -583,6 +583,7 @@ Considering: userx@test.ex
 unique = userx@test.ex
 dbfn_read: key=R:test.ex
 dbfn_read: key=R:userx@test.ex
+dbfn_read: key=R:userx@test.ex:<CALLER@test.ex>
 no domain retry record
 no address retry record
 userx@test.ex: queued for routing
index 51545f157353ded416dbdf9715487ca6cae499c4..f7864bf4b9dfea999658868e8ff1e156341caab6 100644 (file)
@@ -1,11 +1,11 @@
 +++++++++++++++++++++++++++
-  R:userx@test.ex -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
+  R:userx@test.ex:<CALLER@test.ex> -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 first failed = time last try = time2 next try = time2 + 1
 +++++++++++++++++++++++++++
-  R:userx@test.ex -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
+  R:userx@test.ex:<CALLER@test.ex> -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 first failed = time last try = time2 next try = time2 + 1
 +++++++++++++++++++++++++++
-  R:userx@test.ex -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
+  R:userx@test.ex:<CALLER@test.ex> -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 first failed = time last try = time2 next try = time2 + 2
 
 ******** SERVER ********
index 314342dc6a96e9f386899a76d4b81ae1d0503e13..ab77a784ee57a649e9a06c9c14ef4d39438b81c8 100644 (file)
@@ -1,12 +1,12 @@
 +++++++++++++++++++++++++++
-  R:userx@test.ex -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
+  R:userx@test.ex:<CALLER@test.ex> -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 first failed = time last try = time2 next try = time2 + 1
-  R:usery@test.ex -44 13121 SMTP error from remote mail server after RCPT TO:<usery@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
+  R:usery@test.ex:<CALLER@test.ex> -44 13121 SMTP error from remote mail server after RCPT TO:<usery@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 first failed = time last try = time2 next try = time2 + 1
 +++++++++++++++++++++++++++
-  R:userx@test.ex -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
+  R:userx@test.ex:<CALLER@test.ex> -44 13121 SMTP error from remote mail server after RCPT TO:<userx@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 first failed = time last try = time2 next try = time2 + 2
-  R:usery@test.ex -44 13121 SMTP error from remote mail server after RCPT TO:<usery@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
+  R:usery@test.ex:<CALLER@test.ex> -44 13121 SMTP error from remote mail server after RCPT TO:<usery@test.ex>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
 first failed = time last try = time2 next try = time2 + 2
 
 ******** SERVER ********
index cd9c9c2813145f24fe2f56538d5b8f16bf503199..ee42c1e3262553ecd11b6563ffaddac93a9bbd2a 100644 (file)
@@ -5,7 +5,7 @@ first failed = time last try = time2 next try = time2 + 10
   T:127.0.0.1:127.0.0.1:1224:10HmaX-0005vi-00 0 65 SMTP error from remote mail server after MAIL FROM:<CALLER@the.local.host.name>: host 127.0.0.1 [127.0.0.1]: 850 RUBBISH
 first failed = time last try = time2 next try = time2 + 10
 +++++++++++++++++++++++++++
-  R:abcd@xyz -44 12865 SMTP error from remote mail server after RCPT TO:<abcd@xyz>: host 127.0.0.1 [127.0.0.1]: 850 RUBBISH
+  R:abcd@xyz:<CALLER@the.local.host.name> -44 12865 SMTP error from remote mail server after RCPT TO:<abcd@xyz>: host 127.0.0.1 [127.0.0.1]: 850 RUBBISH
 first failed = time last try = time2 next try = time2 + 10
 
 ******** SERVER ********
index 6755d429eeee3e755fadbee9ac0c5112d8bca84e..3462fd1b349e872d1d3a6a7405a729eb92c00bb3 100644 (file)
@@ -2,7 +2,7 @@
   T:127.0.0.1:127.0.0.1:1224:10HmaX-0005vi-00 -45 13377 SMTP error from remote mail server after MAIL FROM:<CALLER@myhost.test.ex>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
 first failed = time last try = time2 next try = time2 + 0 *
 +++++++++++++++++++++++++++
-  R:userx@x.y -44 13377 SMTP error from remote mail server after RCPT TO:<userx@x.y>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
+  R:userx@x.y:<CALLER@myhost.test.ex> -44 13377 SMTP error from remote mail server after RCPT TO:<userx@x.y>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
 first failed = time last try = time2 next try = time2 + 0 *
 
 ******** SERVER ********