[exim-cvs] cvs commit: exim/exim-doc/doc-misc WishList exim…

Kezdőlap
Üzenet törlése
Válasz az üzenetre
Szerző: Philip Hazel
Dátum:  
Címzett: exim-cvs
Tárgy: [exim-cvs] cvs commit: exim/exim-doc/doc-misc WishList exim/exim-doc/doc-txt ChangeLog NewStuff exim/exim-src/src exim.c macros.h readconf.c retry.c exim/exim-src/src/transports lmtp.c smtp.c exim
ph10 2006/03/09 15:10:18 GMT

  Modified files:
    exim-doc/doc-misc    WishList 
    exim-doc/doc-txt     ChangeLog NewStuff 
    exim-src/src         exim.c macros.h readconf.c retry.c 
    exim-src/src/transports lmtp.c smtp.c 
    exim-test/confs      0497 2010 2110 5100 
    exim-test/log        0217 0497 0498 1008 2010 2110 5100 5102 
                         5103 
    exim-test/scripts/0000-Basic 0497 
    exim-test/scripts/2000-GnuTLS 2010 
    exim-test/scripts/2100-OpenSSL 2110 
    exim-test/scripts/5100-lmtp-transport 5100 
    exim-test/stderr     0217 
    exim-test/stdout     0497 0498 1008 5100 
  Added files:
    exim-test/aux-fixed  5100.script.10 
  Log:
  Add new errors mail_4xx, data_4xx, lost_connection, tls_required.


  Revision  Changes    Path
  1.65      +0 -34     exim/exim-doc/doc-misc/WishList
  1.327     +3 -0      exim/exim-doc/doc-txt/ChangeLog
  1.96      +18 -0     exim/exim-doc/doc-txt/NewStuff
  1.37      +6 -4      exim/exim-src/src/exim.c
  1.24      +2 -0      exim/exim-src/src/macros.h
  1.22      +14 -6     exim/exim-src/src/readconf.c
  1.9       +17 -6     exim/exim-src/src/retry.c
  1.8       +25 -5     exim/exim-src/src/transports/lmtp.c
  1.25      +107 -54   exim/exim-src/src/transports/smtp.c
  1.1       +14 -0     exim/exim-test/aux-fixed/5100.script.10 (new)
  1.2       +8 -0      exim/exim-test/confs/0497
  1.2       +10 -1     exim/exim-test/confs/2010
  1.2       +10 -1     exim/exim-test/confs/2110
  1.2       +1 -0      exim/exim-test/confs/5100
  1.2       +5 -5      exim/exim-test/log/0217
  1.2       +60 -3     exim/exim-test/log/0497
  1.2       +1 -1      exim/exim-test/log/0498
  1.2       +1 -1      exim/exim-test/log/1008
  1.2       +7 -0      exim/exim-test/log/2010
  1.2       +7 -0      exim/exim-test/log/2110
  1.2       +72 -44    exim/exim-test/log/5100
  1.2       +1 -1      exim/exim-test/log/5102
  1.2       +1 -1      exim/exim-test/log/5103
  1.2       +142 -2    exim/exim-test/scripts/0000-Basic/0497
  1.2       +2 -0      exim/exim-test/scripts/2000-GnuTLS/2010
  1.2       +2 -0      exim/exim-test/scripts/2100-OpenSSL/2110
  1.2       +4 -0      exim/exim-test/scripts/5100-lmtp-transport/5100
  1.2       +1 -1      exim/exim-test/stderr/0217
  1.2       +133 -2    exim/exim-test/stdout/0497
  1.2       +1 -1      exim/exim-test/stdout/0498
  1.2       +5 -5      exim/exim-test/stdout/1008
  1.2       +1 -1      exim/exim-test/stdout/5100


  Index: WishList
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-misc/WishList,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- WishList    8 Mar 2006 09:43:10 -0000    1.64
  +++ WishList    9 Mar 2006 15:10:16 -0000    1.65
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-misc/WishList,v 1.64 2006/03/08 09:43:10 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-misc/WishList,v 1.65 2006/03/09 15:10:16 ph10 Exp $


EXIM 4 WISH LIST
----------------
@@ -295,16 +295,6 @@
So several warnings could be generated as the mailbox got bigger and bigger.
------------------------------------------------------------------------------

-(146) 15-May-2000 M Allow SMTP error codes in retry rules
-
-This would allow special handling of certain errors from certain hosts. In
-particular, it would allow failing of certain 4xx codes.
-
-This is now available for 4xx responses to RCPT commands. Is anything more
-needed? Apparently, yes; there's been a request for a similar feature for MAIL
-commands.
-------------------------------------------------------------------------------
-
(148) 15-May-2000 S Warn recipient if message rejected for quota excession.
Heinz Ekker

@@ -1255,11 +1245,6 @@
that it can be used as a safety-net while testing configurations. Instead of a
local bounce, the message stays on the queue; instead of 5xx SMTP responses,
4xx ones are given.
-
-The ability to do the opposite - turn 4xx into 5xx under certain circumstances
-might also be useful (e.g. after a certain time). This might best be done by
-extending the retry logic to recognize 4xx as a special error. (This is now
-done.)
------------------------------------------------------------------------------

(202) 10-Oct-03 S -bvsomething to do a callout after the verify
@@ -1297,7 +1282,6 @@
------------------------------------------------------------------------------

(209) 31-Oct-03 S a way of making crashes in pipe commands temporary errors
-
------------------------------------------------------------------------------

(210) 31-Oct-03 S runtime option to change the daemon name used for tcprwappers
@@ -1330,13 +1314,6 @@
changed.)
------------------------------------------------------------------------------

-(216) 27-Nov-03 S Option to bounce if required TLS doesn't happen
-
-This is for the smtp transport with hosts_require_tls set. Currently, it
-defers. Possibly the best approach is to make the error one that can be seen by
-the retry logic.
-------------------------------------------------------------------------------
-
(217) 27-Nov-03 M A function to pass back variables from Perl

This is a function that can be called from Perl, to take a name and a value and
@@ -1602,12 +1579,6 @@
both of them.
------------------------------------------------------------------------------

-(286) 21-Jul-04 M Distinguishing a larger number of errors
-
-For instance, detecting "connection reset by peer" (ENETRESET or ECONNRESET)
-might be useful.
-------------------------------------------------------------------------------
-
(288) 10-Aug-04 M Option for verify to require MX

e.g. verify=sender/require_mx
@@ -2017,11 +1988,6 @@
variables that are included in the data. This has to be done inside the lookup
code, because of caching. Probably means we have to invent ewildlsearch and
enwildlsearch.
-------------------------------------------------------------------------------
-
-(350) 28-Feb-06 S Additional errors for retry rules
-
-(i) Unexpected connection close; (ii) mail_4xx.
------------------------------------------------------------------------------
--- HWM 350 ------------------------------------------------------------------
---------------------------- End of WishList ---------------------------------

  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
  retrieving revision 1.326
  retrieving revision 1.327
  diff -u -r1.326 -r1.327
  --- ChangeLog    8 Mar 2006 11:13:07 -0000    1.326
  +++ ChangeLog    9 Mar 2006 15:10:16 -0000    1.327
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.326 2006/03/08 11:13:07 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.327 2006/03/09 15:10:16 ph10 Exp $


   Change log file for Exim from version 4.21
   -------------------------------------------
  @@ -299,6 +299,9 @@
   PH/58 Allow for the insertion of a newline as well as a space when a string
         is turned into more than one encoded-word during RFC 2047 encoding. The
         Sieve code now uses this.
  +
  +PH/59 Added the following errors that can be detected in retry rules: mail_4xx,
  +      data_4xx, lost_connection, tls_required.



Exim version 4.60

  Index: NewStuff
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
  retrieving revision 1.95
  retrieving revision 1.96
  diff -u -r1.95 -r1.96
  --- NewStuff    6 Mar 2006 16:05:12 -0000    1.95
  +++ NewStuff    9 Mar 2006 15:10:16 -0000    1.96
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.95 2006/03/06 16:05:12 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.96 2006/03/09 15:10:16 ph10 Exp $


   New Features in Exim
   --------------------
  @@ -164,6 +164,24 @@
         The facility for specifying where the new header is to be inserted, as
         described for WARN with "message" in section 39.19 of the 4.60 manual, is
         supported.
  +
  +PH/19 The following errors can now be detected in retry rules:
  +
  +      mail_4xx   This is like rcpt_4xx, but applies to MAIL commands
  +
  +      data_4xx   This is like rcpt_4xx, but applies to DATA commands and the
  +                 response code after the end of the data
  +
  +      lost_connection  This error occurs when the server unexpectedly closes
  +                 the SMTP connection. There may, of course, legitmate reasons
  +                 for this (host died, network died), but if it repeats a lot
  +                 for the same host, it indicates something odd.
  +
  +      tls_required  The server was required to use TLS (hosts_require_tls),
  +                 but either did not offer it, or responded with 4xx to
  +                 STARTTLS, or there was a problem setting up the TLS connection
  +
  +      Note that a 5xx response to STARTTLS is a permanent error.





  Index: exim.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/exim.c,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- exim.c    23 Feb 2006 10:25:01 -0000    1.36
  +++ exim.c    9 Mar 2006 15:10:16 -0000    1.37
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/exim.c,v 1.36 2006/02/23 10:25:01 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/exim.c,v 1.37 2006/03/09 15:10:16 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -3725,11 +3725,13 @@
         return EXIT_FAILURE;
         }


  -    /* For the rcpt_4xx errors, a value of 255 means "any", and a code > 100 as
  -    an error is for matching codes to the decade. Turn them into a real error
  -    code, off the decade. */
  -
  -    if (basic_errno == ERRNO_RCPT4XX)
  +    /* For the {MAIL,RCPT,DATA}_4xx errors, a value of 255 means "any", and a
  +    code > 100 as an error is for matching codes to the decade. Turn them into
  +    a real error code, off the decade. */
  +
  +    if (basic_errno == ERRNO_MAIL4XX ||
  +        basic_errno == ERRNO_RCPT4XX ||
  +        basic_errno == ERRNO_DATA4XX)
         {
         int code = (more_errno >> 8) & 255;
         if (code == 255)


  Index: macros.h
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/macros.h,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- macros.h    14 Feb 2006 14:55:37 -0000    1.23
  +++ macros.h    9 Mar 2006 15:10:16 -0000    1.24
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/macros.h,v 1.23 2006/02/14 14:55:37 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/macros.h,v 1.24 2006/03/09 15:10:16 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -452,6 +452,8 @@
   #define ERRNO_AUTHFAIL       (-42)   /* When required by client */
   #define ERRNO_CONNECTTIMEOUT (-43)   /* Used internally in smtp transport */
   #define ERRNO_RCPT4XX        (-44)   /* RCPT gave 4xx error */
  +#define ERRNO_MAIL4XX        (-45)   /* MAIL gave 4xx error */
  +#define ERRNO_DATA4XX        (-46)   /* DATA gave 4xx error */


/* These must be last, so all retry deferments can easily be identified */


  Index: readconf.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/readconf.c,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- readconf.c    22 Feb 2006 15:08:20 -0000    1.21
  +++ readconf.c    9 Mar 2006 15:10:16 -0000    1.22
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/readconf.c,v 1.21 2006/02/22 15:08:20 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/readconf.c,v 1.22 2006/03/09 15:10:16 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -3421,7 +3421,9 @@
       }
     }


  -else if (strncmpic(pp, US"rcpt_4", 6) == 0)
  +else if (strncmpic(pp, US"mail_4", 6) == 0 ||
  +         strncmpic(pp, US"rcpt_4", 6) == 0 ||
  +         strncmpic(pp, US"data_4", 6) == 0)
     {
     BOOL bad = FALSE;
     int x = 255;                           /* means "any 4xx code" */
  @@ -3438,18 +3440,24 @@
       else if (a != 'x' || b != 'x') bad = TRUE;
       }


  -  if (bad) return US"rcpt_4 must be followed by xx, dx, or dd, where "
  -    "x is literal and d is any digit";
  +  if (bad)
  +    return string_sprintf("%.4s_4 must be followed by xx, dx, or dd, where "
  +      "x is literal and d is any digit", pp);


  -  *basic_errno = ERRNO_RCPT4XX;
  +  *basic_errno = (*pp == 'm')? ERRNO_MAIL4XX :
  +                 (*pp == 'r')? ERRNO_RCPT4XX : ERRNO_DATA4XX;
     *more_errno = x << 8;
     }


   else if (len == 4 && strncmpic(pp, US"auth", len) == 0 &&
            strncmpic(q+1, US"failed", p-q-1) == 0)
  -  {
     *basic_errno = ERRNO_AUTHFAIL;
  -  }
  +
  +else if (strcmpic(pp, US"lost_connection") == 0)
  +  *basic_errno = ERRNO_SMTPCLOSED;
  +
  +else if (strcmpic(pp, US"tls_required") == 0)
  +  *basic_errno = ERRNO_TLSREQUIRED;


   else if (len != 1 || Ustrncmp(pp, "*", 1) != 0)
     return string_sprintf("unknown or malformed retry error \"%.*s\"", p-pp, pp);


  Index: retry.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/retry.c,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- retry.c    16 Feb 2006 16:37:57 -0000    1.8
  +++ retry.c    9 Mar 2006 15:10:16 -0000    1.9
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/retry.c,v 1.8 2006/02/16 16:37:57 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/retry.c,v 1.9 2006/03/09 15:10:16 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -414,20 +414,31 @@
           continue;
         }


  -    /* Handle 4xx responses to RCPT. The code that was received is in the 2nd
  -    least significant byte of more_errno (with 400 subtracted). The required
  -    value is coded in the 2nd least significant byte of the yield->more_errno
  -    field as follows:
  +    /* The TLSREQUIRED error also covers TLSFAILURE. These are subtly different
  +    errors, but not worth separating at this level. */
  +
  +    else if (yield->basic_errno == ERRNO_TLSREQUIRED)
  +      {
  +      if (basic_errno != ERRNO_TLSREQUIRED && basic_errno != ERRNO_TLSFAILURE)
  +        continue;
  +      }
  +
  +    /* Handle 4xx responses to MAIL, RCPT, or DATA. The code that was received
  +    is in the 2nd least significant byte of more_errno (with 400 subtracted).
  +    The required value is coded in the 2nd least significant byte of the
  +    yield->more_errno field as follows:


         255     => any 4xx code
         >= 100  => the decade must match the value less 100
         < 100   => the exact value must match
       */


  -    else if (yield->basic_errno == ERRNO_RCPT4XX)
  +    else if (yield->basic_errno == ERRNO_MAIL4XX ||
  +             yield->basic_errno == ERRNO_RCPT4XX ||
  +             yield->basic_errno == ERRNO_DATA4XX)
         {
         int wanted;
  -      if (basic_errno != ERRNO_RCPT4XX) continue;
  +      if (basic_errno != yield->basic_errno) continue;
         wanted = (yield->more_errno >> 8) & 255;
         if (wanted != 255)
           {


  Index: lmtp.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/transports/lmtp.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- lmtp.c    7 Feb 2006 11:19:03 -0000    1.7
  +++ lmtp.c    9 Mar 2006 15:10:16 -0000    1.8
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/transports/lmtp.c,v 1.7 2006/02/07 11:19:03 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/transports/lmtp.c,v 1.8 2006/03/09 15:10:16 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -578,7 +578,14 @@
     goto WRITE_FAILED;


   if (!lmtp_read_response(out, buffer, sizeof(buffer), '2', timeout))
  +  {
  +  if (errno == 0 && buffer[0] == '4')
  +    {
  +    errno = ERRNO_MAIL4XX;
  +    addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
  +    }
     goto RESPONSE_FAILED;
  +  }


   /* Next, we hand over all the recipients. Some may be permanently or
   temporarily rejected; others may be accepted, for now. */
  @@ -601,9 +608,8 @@
         string_printing(buffer));
       if (buffer[0] == '5') addr->transport_return = FAIL; else
         {
  -      int bincode = (buffer[1] - '0')*10 + buffer[2] - '0';
         addr->basic_errno = ERRNO_RCPT4XX;
  -      addr->more_errno |= bincode << 8;
  +      addr->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
         }
       }
     }
  @@ -616,7 +622,14 @@


     if (!lmtp_write_command(fd_in, "DATA\r\n")) goto WRITE_FAILED;
     if (!lmtp_read_response(out, buffer, sizeof(buffer), '3', timeout))
  +    {
  +    if (errno == 0 && buffer[0] == '4')
  +      {
  +      errno = ERRNO_DATA4XX;
  +      addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
  +      }
       goto RESPONSE_FAILED;
  +    }


     sigalrm_seen = FALSE;
     transport_write_timeout = timeout;
  @@ -676,6 +689,11 @@


       else
         {
  +      if (buffer[0] == '4')
  +        {
  +        addr->basic_errno = ERRNO_DATA4XX;
  +        addr->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
  +        }
         addr->message = string_sprintf("LMTP error after %s: %s", big_buffer,
           string_printing(buffer));
         addr->transport_return = (buffer[0] == '5')? FAIL : DEFER;
  @@ -696,13 +714,15 @@


/* Come here if any call to read_response, other than a response after the data
phase, failed. Put the error in the top address - this will be replicated
-because the yield is still FALSE. Analyse the error, and if if isn't too bad,
-send a QUIT command. Wait for the response with a short timeout, so we don't
-wind up this process before the far end has had time to read the QUIT. */
+because the yield is still FALSE. (But omit ETIMEDOUT, as there will already be
+a suitable message.) Analyse the error, and if if isn't too bad, send a QUIT
+command. Wait for the response with a short timeout, so we don't wind up this
+process before the far end has had time to read the QUIT. */

RESPONSE_FAILED:

save_errno = errno;
+if (errno != ETIMEDOUT && errno != 0) addrlist->basic_errno = errno;
addrlist->message = NULL;

if (check_response(&save_errno, addrlist->more_errno,

  Index: smtp.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/transports/smtp.c,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- smtp.c    1 Mar 2006 16:07:16 -0000    1.24
  +++ smtp.c    9 Mar 2006 15:10:16 -0000    1.25
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/transports/smtp.c,v 1.24 2006/03/01 16:07:16 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/transports/smtp.c,v 1.25 2006/03/09 15:10:16 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -598,6 +598,12 @@
       if (errno == 0 && buffer[0] != 0)
         {
         uschar flushbuffer[4096];
  +      int save_errno = 0;
  +      if (buffer[0] == '4')
  +        {
  +        save_errno = ERRNO_MAIL4XX;
  +        addr->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
  +        }
         while (count-- > 0)
           {
           if (!smtp_read_response(inblock, flushbuffer, sizeof(flushbuffer),
  @@ -605,6 +611,7 @@
               && (errno != 0 || flushbuffer[0] == 0))
             break;
           }
  +      errno = save_errno;
         }
       return -3;
       }
  @@ -683,11 +690,9 @@


       else
         {
  -      int bincode = (buffer[1] - '0')*10 + buffer[2] - '0';
  -
         addr->transport_return = DEFER;
         addr->basic_errno = ERRNO_RCPT4XX;
  -      addr->more_errno |= bincode << 8;
  +      addr->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;


         /* Log temporary errors if there are more hosts to be tried. */


  @@ -720,7 +725,15 @@
     int code;
     uschar *msg;
     BOOL pass_message;
  -  if (pending_DATA > 0 || (yield & 1) != 0) return -3;
  +  if (pending_DATA > 0 || (yield & 1) != 0)
  +    {
  +    if (errno == 0 && buffer[0] == '4')
  +      {
  +      errno = ERRNO_DATA4XX;
  +      addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
  +      }
  +    return -3;
  +    }
     (void)check_response(host, &errno, 0, buffer, &code, &msg, &pass_message);
     DEBUG(D_transport) debug_printf("%s\nerror for DATA ignored: pipelining "
       "is in use and there were no good recipients\n", msg);
  @@ -1340,7 +1353,15 @@


     case +1:                /* Block was sent */
     if (!smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
  -    ob->command_timeout)) goto RESPONSE_FAILED;
  +       ob->command_timeout))
  +    {
  +    if (errno == 0 && buffer[0] == '4')
  +      {
  +      errno = ERRNO_MAIL4XX;
  +      addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
  +      }
  +    goto RESPONSE_FAILED;
  +    }
     pending_MAIL = FALSE;
     break;
     }
  @@ -1521,8 +1542,16 @@
     /* For SMTP, we now read a single response that applies to the whole message.
     If it is OK, then all the addresses have been delivered. */


  -  if (!lmtp) ok = smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
  -    ob->final_timeout);
  +  if (!lmtp)
  +    {
  +    ok = smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
  +      ob->final_timeout);
  +    if (!ok && errno == 0 && buffer[0] == '4')
  +      {
  +      errno = ERRNO_DATA4XX;
  +      addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
  +      }
  +    }


     /* For LMTP, we get back a response for every RCPT command that we sent;
     some may be accepted and some rejected. For those that get a response, their
  @@ -1590,6 +1619,8 @@
               addr->transport_return = FAIL;
             else
               {
  +            errno = ERRNO_DATA4XX;
  +            addr->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
               addr->transport_return = DEFER;
               retry_add_item(addr, addr->address_retry_key, 0);
               }
  @@ -1694,61 +1725,83 @@
         }
       }


  -  /* If there was an I/O error or timeout or other transportation error,
  -  indicated by errno being non-zero, defer all addresses and yield DEFER,
  -  except for the case of failed add_headers expansion, or a transport filter
  -  failure, when the yield should be ERROR, to stop it trying other hosts.
  -
  -  However, handle timeouts after MAIL FROM or "." and loss of connection after
  +  /* We want to handle timeouts after MAIL or "." and loss of connection after
     "." specially. They can indicate a problem with the sender address or with
  -  the contents of the message rather than a real error on the connection.
  -  Therefore, treat these cases in the same way as a 4xx response.
  -
  -  The following condition tests for NOT these special cases. */
  -
  -  else if (save_errno != 0 &&
  -           (save_errno != ETIMEDOUT ||
  -             (Ustrncmp(smtp_command,"MAIL",4) != 0 &&
  -              Ustrncmp(smtp_command,"end ",4) != 0)) &&
  -           (save_errno != ERRNO_SMTPCLOSED ||
  -              Ustrncmp(smtp_command,"end ",4) != 0))
  -    {
  -    yield = (save_errno == ERRNO_CHHEADER_FAIL ||
  -             save_errno == ERRNO_FILTER_FAIL)? ERROR : DEFER;
  -    set_errno(addrlist, save_errno, message, DEFER, pass_message);
  -    }
  -
  -  /* Otherwise we have a message-specific error response from the remote
  -  host. This is one of
  -    (a) negative response or timeout after "mail from"
  -    (b) negative response after "data"
  -    (c) negative response or timeout or dropped connection after "."
  -  It won't be a negative response or timeout after "rcpt to", as that is dealt
  -  with separately above. The action in all cases is to set an appropriate
  -  error code for all the addresses, but to leave yield set to OK because
  -  the host itself has not failed. [It might in practice have failed for a
  -  timeout after MAIL FROM, or "." but if so, we'll discover that at the next
  -  delivery attempt.] For a temporary error, set the message_defer flag, and
  -  write to the logs for information if this is not the last host. The error for
  -  the last host will be logged as part of the address's log line. */
  +  the contents of the message rather than a real error on the connection. These
  +  cases are treated in the same way as a 4xx response. This next bit of code
  +  does the classification. */


     else
       {
  -    if (mua_wrapper) code = '5';  /* Force hard failure in wrapper mode */
  +    BOOL message_error;
  +
  +    switch(save_errno)
  +      {
  +      case 0:
  +      case ERRNO_MAIL4XX:
  +      case ERRNO_DATA4XX:
  +      message_error = TRUE;
  +      break;
  +
  +      case ETIMEDOUT:
  +      message_error = Ustrncmp(smtp_command,"MAIL",4) == 0 ||
  +                      Ustrncmp(smtp_command,"end ",4) == 0;
  +      break;
  +
  +      case ERRNO_SMTPCLOSED:
  +      message_error = Ustrncmp(smtp_command,"end ",4) == 0;
  +      break;
  +
  +      default:
  +      message_error = FALSE;
  +      break;
  +      }


  -    set_errno(addrlist, save_errno, message, (code == '5')? FAIL : DEFER,
  -      pass_message);
  +    /* Handle the cases that are treated as message errors. These are:


  -    /* If there's an errno, the message contains just the identity of
  -    the host. */
  +      (a) negative response or timeout after MAIL
  +      (b) negative response after DATA
  +      (c) negative response or timeout or dropped connection after "."
  +
  +    It won't be a negative response or timeout after RCPT, as that is dealt
  +    with separately above. The action in all cases is to set an appropriate
  +    error code for all the addresses, but to leave yield set to OK because the
  +    host itself has not failed. Of course, it might in practice have failed
  +    when we've had a timeout, but if so, we'll discover that at the next
  +    delivery attempt. For a temporary error, set the message_defer flag, and
  +    write to the logs for information if this is not the last host. The error
  +    for the last host will be logged as part of the address's log line. */


  -    if (code != '5')     /* Anything other than 5 is treated as temporary */
  +    if (message_error)
         {
  -      if (save_errno > 0)
  -        message = US string_sprintf("%s: %s", message, strerror(save_errno));
  -      if (host->next != NULL) log_write(0, LOG_MAIN, "%s", message);
  -      deliver_msglog("%s %s\n", tod_stamp(tod_log), message);
  -      *message_defer = TRUE;
  +      if (mua_wrapper) code = '5';  /* Force hard failure in wrapper mode */
  +      set_errno(addrlist, save_errno, message, (code == '5')? FAIL : DEFER,
  +        pass_message);
  +
  +      /* If there's an errno, the message contains just the identity of
  +      the host. */
  +
  +      if (code != '5')     /* Anything other than 5 is treated as temporary */
  +        {
  +        if (save_errno > 0)
  +          message = US string_sprintf("%s: %s", message, strerror(save_errno));
  +        if (host->next != NULL) log_write(0, LOG_MAIN, "%s", message);
  +        deliver_msglog("%s %s\n", tod_stamp(tod_log), message);
  +        *message_defer = TRUE;
  +        }
  +      }
  +
  +    /* Otherwise, we have an I/O error or a timeout other than after MAIL or
  +    ".", or some other transportation error. We defer all addresses and yield
  +    DEFER, except for the case of failed add_headers expansion, or a transport
  +    filter failure, when the yield should be ERROR, to stop it trying other
  +    hosts. */
  +
  +    else
  +      {
  +      yield = (save_errno == ERRNO_CHHEADER_FAIL ||
  +               save_errno == ERRNO_FILTER_FAIL)? ERROR : DEFER;
  +      set_errno(addrlist, save_errno, message, DEFER, pass_message);
         }
       }
     }


Index: 5100.script.10
====================================================================
220 Welcome to this LMTP simulation
LHLO
250-Hello there
250 SIZE
MAIL FROM
250 OK
RCPT TO
250 OK
RCPT TO
250 OK
DATA
450 Temporary error
QUIT
220 OK

  Index: 0497
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/confs/0497,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0497    7 Feb 2006 10:34:26 -0000    1.1
  +++ 0497    9 Mar 2006 15:10:17 -0000    1.2
  @@ -17,6 +17,11 @@


begin routers

  +r0:
  +  driver = redirect
  +  senders = :
  +  data = :blackhole: discard bounces
  +
   r1:
     driver = accept
     transport = t1
  @@ -37,7 +42,10 @@


begin retry

  +*  lost_connection
  +*  mail_4xx
   *  rcpt_4xx
  +*  data_4xx
   *  *         F,1d,15m




  Index: 2010
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/confs/2010,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 2010    7 Feb 2006 10:34:26 -0000    1.1
  +++ 2010    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,6 +1,7 @@
   # Exim test configuration 2010


SERVER =
+HOSTS = 127.0.0.1 : HOSTIPV4

   exim_path = EXIM_PATH
   host_lookup_order = bydns
  @@ -44,8 +45,16 @@
   send_to_server:
     driver = smtp
     allow_localhost
  -  hosts = 127.0.0.1 : HOSTIPV4
  +  hosts = HOSTS
     hosts_require_tls = *
     port = PORT_D
  +
  +
  +# ----- Retry -----
  +
  +begin retry
  +
  +* tls_required
  +* *  F,1d,5m


# End

  Index: 2110
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/confs/2110,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 2110    7 Feb 2006 10:34:26 -0000    1.1
  +++ 2110    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,6 +1,7 @@
   # Exim test configuration 2110


SERVER =
+HOSTS = 127.0.0.1 : HOSTIPV4

   exim_path = EXIM_PATH
   host_lookup_order = bydns
  @@ -44,8 +45,16 @@
   send_to_server:
     driver = smtp
     allow_localhost
  -  hosts = 127.0.0.1 : HOSTIPV4
  +  hosts = HOSTS
     hosts_require_tls = *
     port = PORT_D
  +
  +
  +# ----- Retry -----
  +
  +begin retry
  +
  +* tls_required
  +* *  F,1d,5m


# End

  Index: 5100
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/confs/5100,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 5100    7 Feb 2006 10:34:26 -0000    1.1
  +++ 5100    9 Mar 2006 15:10:17 -0000    1.2
  @@ -51,6 +51,7 @@


begin retry

  +*  mail_4xx
   *  rcpt_4xx   F,1d,1m
   *  *          F,5d,1d



  Index: 0217
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/0217,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0217    7 Feb 2006 10:34:46 -0000    1.1
  +++ 0217    9 Mar 2006 15:10:17 -0000    1.2
  @@ -12,8 +12,8 @@
   1999-03-02 09:44:33 10HmaZ-0005vi-00 == b@??? R=client T=send_to_server defer (dd): Connection timed out: SMTP timeout while connected to 127.0.0.1 [127.0.0.1] after RCPT TO:<b@???>
   1999-03-02 09:44:33 10HmaZ-0005vi-00 == c@??? R=client T=send_to_server defer (dd): Connection timed out: SMTP timeout while connected to 127.0.0.1 [127.0.0.1] after RCPT TO:<b@???>
   1999-03-02 09:44:33 10HmbA-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  -1999-03-02 09:44:33 10HmbA-0005vi-00 == a@??? R=client T=send_to_server defer (0): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 451 Temp error
  -1999-03-02 09:44:33 10HmbA-0005vi-00 == b@??? R=client T=send_to_server defer (0): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 451 Temp error
  +1999-03-02 09:44:33 10HmbA-0005vi-00 == a@??? R=client T=send_to_server defer (-45): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 451 Temp error
  +1999-03-02 09:44:33 10HmbA-0005vi-00 == b@??? R=client T=send_to_server defer (-45): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 451 Temp error
   1999-03-02 09:44:33 10HmbB-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
   1999-03-02 09:44:33 10HmbB-0005vi-00 ** a@??? R=client T=send_to_server: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 550 Perm error
   1999-03-02 09:44:33 10HmbB-0005vi-00 ** b@??? R=client T=send_to_server: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 550 Perm error
  @@ -49,10 +49,10 @@
   1999-03-02 09:44:33 10HmbJ-0005vi-00 Completed
   1999-03-02 09:44:33 10HmbI-0005vi-00 Completed
   1999-03-02 09:44:33 10HmbK-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  -1999-03-02 09:44:33 10HmbK-0005vi-00 == a@??? R=client T=send_to_server defer (0): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 403 Sorry temp data error
  -1999-03-02 09:44:33 10HmbK-0005vi-00 == b@??? R=client T=send_to_server defer (0): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 403 Sorry temp data error
  +1999-03-02 09:44:33 10HmbK-0005vi-00 == a@??? R=client T=send_to_server defer (-46): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 403 Sorry temp data error
  +1999-03-02 09:44:33 10HmbK-0005vi-00 == b@??? R=client T=send_to_server defer (-46): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 403 Sorry temp data error
   1999-03-02 09:44:33 10HmbL-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  -1999-03-02 09:44:33 10HmbL-0005vi-00 == a@??? R=client T=send_to_server defer (0): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 403 Sorry temp data error
  +1999-03-02 09:44:33 10HmbL-0005vi-00 == a@??? R=client T=send_to_server defer (-46): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 403 Sorry temp data error
   1999-03-02 09:44:33 10HmbL-0005vi-00 ** b@??? R=client T=send_to_server: SMTP error from remote mail server after RCPT TO:<b@???>: host 127.0.0.1 [127.0.0.1]: 550 NO
   1999-03-02 09:44:33 10HmbL-0005vi-00 ** c@??? R=client T=send_to_server: SMTP error from remote mail server after RCPT TO:<c@???>: host 127.0.0.1 [127.0.0.1]: 550 NO
   1999-03-02 09:44:33 10HmbL-0005vi-00 ** d@??? R=client T=send_to_server: SMTP error from remote mail server after RCPT TO:<d@???>: host 127.0.0.1 [127.0.0.1]: 550 NO


  Index: 0497
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/0497,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0497    7 Feb 2006 10:34:46 -0000    1.1
  +++ 0497    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,7 +1,64 @@
   1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  -1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (-45): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
   1999-03-02 09:44:33 10HmaX-0005vi-00 ** userx@???: retry timeout exceeded
   1999-03-02 09:44:33 10HmaY-0005vi-00 <= <> R=10HmaX-0005vi-00 U=EXIMUSER P=local S=sss
  -1999-03-02 09:44:33 10HmaY-0005vi-00 127.0.0.1 [127.0.0.1] Connection refused
  -1999-03-02 09:44:33 10HmaY-0005vi-00 == CALLER@??? R=r1 T=t1 defer (dd): Connection refused
  +1999-03-02 09:44:33 10HmaY-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
   1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmaZ-0005vi-00 == userx@??? R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +1999-03-02 09:44:33 10HmaZ-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbA-0005vi-00 <= <> R=10HmaZ-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbA-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbB-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbB-0005vi-00 == userx@??? R=r1 T=t1 defer (-46): SMTP error from remote mail server after DATA: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +1999-03-02 09:44:33 10HmbB-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbC-0005vi-00 <= <> R=10HmbB-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbC-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbD-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbD-0005vi-00 == userx@??? R=r1 T=t1 defer (-46): SMTP error from remote mail server after end of data: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +1999-03-02 09:44:33 10HmbD-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbE-0005vi-00 <= <> R=10HmbD-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbE-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbD-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbF-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbF-0005vi-00 == userx@??? R=r1 T=t1 defer (-45): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +1999-03-02 09:44:33 10HmbF-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbG-0005vi-00 <= <> R=10HmbF-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbG-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmbG-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbF-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbH-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbH-0005vi-00 == userx@??? R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +1999-03-02 09:44:33 10HmbH-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbI-0005vi-00 <= <> R=10HmbH-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbI-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmbI-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbH-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbJ-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbJ-0005vi-00 == userx@??? R=r1 T=t1 defer (-46): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +1999-03-02 09:44:33 10HmbJ-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbK-0005vi-00 <= <> R=10HmbJ-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbK-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmbK-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbJ-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbL-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbL-0005vi-00 == userx@??? R=r1 T=t1 defer (-46): SMTP error from remote mail server after end of data: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +1999-03-02 09:44:33 10HmbL-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbM-0005vi-00 <= <> R=10HmbL-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbM-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmbM-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbL-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbN-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbN-0005vi-00 Remote host 127.0.0.1 [127.0.0.1] closed connection in response to RCPT TO:<userx@???>
  +1999-03-02 09:44:33 10HmbN-0005vi-00 == userx@??? R=r1 T=t1 defer (-18): Remote host 127.0.0.1 [127.0.0.1] closed connection in response to RCPT TO:<userx@???>
  +1999-03-02 09:44:33 10HmbN-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbO-0005vi-00 <= <> R=10HmbN-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbO-0005vi-00 => :blackhole: <CALLER@???> R=r0
  +1999-03-02 09:44:33 10HmbO-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbN-0005vi-00 Completed


  Index: 0498
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/0498,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0498    7 Feb 2006 10:34:46 -0000    1.1
  +++ 0498    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,5 +1,5 @@
   1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  -1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (0): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 450 DELAY
  +1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (-45): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 450 DELAY
   1999-03-02 09:44:33 Start queue run: pid=pppp
   1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (dd): Connection timed out: SMTP timeout while connected to 127.0.0.1 [127.0.0.1] after end of data (ddd bytes written)
   1999-03-02 09:44:33 10HmaX-0005vi-00 ** userx@???: retry timeout exceeded


  Index: 1008
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/1008,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 1008    7 Feb 2006 10:34:46 -0000    1.1
  +++ 1008    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,3 +1,3 @@
   1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
   1999-03-02 09:44:33 10HmaX-0005vi-00 SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 450 Temporary error
  -1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (0): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host ::1 [::1]: 450 Temporary error
  +1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (-45): SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host ::1 [::1]: 450 Temporary error


  Index: 2010
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/2010,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 2010    7 Feb 2006 10:34:46 -0000    1.1
  +++ 2010    9 Mar 2006 15:10:17 -0000    1.2
  @@ -4,6 +4,13 @@
   1999-03-02 09:44:33 10HmaX-0005vi-00 => userx@??? R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS-1.0:RSA_AES_256_CBC_SHA1:32
   1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
   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 10HmaY-0005vi-00 a TLS session is required for 127.0.0.1 [127.0.0.1], but the server did not offer TLS support
  +1999-03-02 09:44:33 10HmaY-0005vi-00 == userx@??? R=client T=send_to_server defer (-38): a TLS session is required for 127.0.0.1 [127.0.0.1], but the server did not offer TLS support
  +1999-03-02 09:44:33 10HmaY-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmaZ-0005vi-00 <= <> R=10HmaY-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
  +1999-03-02 09:44:33 End queue run: pid=pppp -qf


******** SERVER ********
1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port 1225

  Index: 2110
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/2110,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 2110    7 Feb 2006 10:34:46 -0000    1.1
  +++ 2110    9 Mar 2006 15:10:17 -0000    1.2
  @@ -4,6 +4,13 @@
   1999-03-02 09:44:33 10HmaX-0005vi-00 => userx@??? R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLSv1:AES256-SHA:256
   1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
   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 10HmaY-0005vi-00 a TLS session is required for 127.0.0.1 [127.0.0.1], but the server did not offer TLS support
  +1999-03-02 09:44:33 10HmaY-0005vi-00 == userx@??? R=client T=send_to_server defer (-38): a TLS session is required for 127.0.0.1 [127.0.0.1], but the server did not offer TLS support
  +1999-03-02 09:44:33 10HmaY-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmaZ-0005vi-00 <= <> R=10HmaY-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
  +1999-03-02 09:44:33 End queue run: pid=pppp -qf


******** SERVER ********
1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port 1225

  Index: 5100
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/5100,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 5100    7 Feb 2006 10:34:46 -0000    1.1
  +++ 5100    9 Mar 2006 15:10:17 -0000    1.2
  @@ -32,8 +32,13 @@
   QUIT
   <<< QUIT
   250 OK
  -1999-03-02 09:44:33 10HmbB-0005vi-00 == userx@??? R=smartuser T=lmtp defer (-1): LMTP error after MAIL FROM:<CALLER@???>: 450 Don't like that sender just at the moment
  -1999-03-02 09:44:33 10HmbC-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbB-0005vi-00 == userx@??? R=smartuser T=lmtp defer (-45): LMTP error after MAIL FROM:<CALLER@???>: 450 Don't like that sender just at the moment
  +1999-03-02 09:44:33 10HmbB-0005vi-00 ** userx@???: retry timeout exceeded
  +1999-03-02 09:44:33 10HmbC-0005vi-00 <= <> R=10HmbB-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbC-0005vi-00 => :blackhole: <CALLER@???> R=bounces
  +1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbD-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
   220 Welcome to this LMTP simulation
   LHLO
   <<< LHLO myhost.test.ex
  @@ -66,9 +71,9 @@
   .
   <<< Received: from CALLER by myhost.test.ex with local (Exim x.yz)
   <<<     (envelope-from <CALLER@???>)
  -<<<     id 10HmbC-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
  +<<<     id 10HmbD-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
   <<< script: 05
  -<<< Message-Id: <E10HmbC-0005vi-00@???>
  +<<< Message-Id: <E10HmbD-0005vi-00@???>
   <<< From: CALLER_NAME <CALLER@???>
   <<< Date: Tue, 2 Mar 1999 09:44:33 +0000
   <<< 
  @@ -81,16 +86,16 @@
   QUIT
   <<< QUIT
   250 OK
  -1999-03-02 09:44:33 10HmbC-0005vi-00 => userx <userx@???> R=smartuser T=lmtp
  -1999-03-02 09:44:33 10HmbC-0005vi-00 == jack@??? R=smartuser T=lmtp defer (-1): LMTP error after end of data: 450 Number 2 is now delayed
  -1999-03-02 09:44:33 10HmbC-0005vi-00 ** jill@??? R=smartuser T=lmtp: LMTP error after end of data: 550 Number 3 is now rejected
  -1999-03-02 09:44:33 10HmbC-0005vi-00 == tom@??? R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:<tom@???>: 450 This one is delayed on RCPT
  -1999-03-02 09:44:33 10HmbC-0005vi-00 ** dick@??? R=smartuser T=lmtp: LMTP error after RCPT TO:<dick@???>: 550 This one is unknown on RCPT
  -1999-03-02 09:44:33 10HmbC-0005vi-00 -> harry <harry@???> R=smartuser T=lmtp
  -1999-03-02 09:44:33 10HmbD-0005vi-00 <= <> R=10HmbC-0005vi-00 U=EXIMUSER P=local S=sss
  -1999-03-02 09:44:33 10HmbD-0005vi-00 => :blackhole: <CALLER@???> R=bounces
  -1999-03-02 09:44:33 10HmbD-0005vi-00 Completed
  -1999-03-02 09:44:33 10HmbE-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbD-0005vi-00 => userx <userx@???> R=smartuser T=lmtp
  +1999-03-02 09:44:33 10HmbD-0005vi-00 == jack@??? R=smartuser T=lmtp defer (-46): LMTP error after end of data: 450 Number 2 is now delayed
  +1999-03-02 09:44:33 10HmbD-0005vi-00 ** jill@??? R=smartuser T=lmtp: LMTP error after end of data: 550 Number 3 is now rejected
  +1999-03-02 09:44:33 10HmbD-0005vi-00 == tom@??? R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:<tom@???>: 450 This one is delayed on RCPT
  +1999-03-02 09:44:33 10HmbD-0005vi-00 ** dick@??? R=smartuser T=lmtp: LMTP error after RCPT TO:<dick@???>: 550 This one is unknown on RCPT
  +1999-03-02 09:44:33 10HmbD-0005vi-00 -> harry <harry@???> R=smartuser T=lmtp
  +1999-03-02 09:44:33 10HmbE-0005vi-00 <= <> R=10HmbD-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbE-0005vi-00 => :blackhole: <CALLER@???> R=bounces
  +1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbF-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
   220 Welcome to this LMTP simulation
   LHLO
   <<< LHLO myhost.test.ex
  @@ -123,25 +128,25 @@
   .
   <<< Received: from CALLER by myhost.test.ex with local (Exim x.yz)
   <<<     (envelope-from <CALLER@???>)
  -<<<     id 10HmbE-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
  +<<<     id 10HmbF-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
   <<< script: 06
  -<<< Message-Id: <E10HmbE-0005vi-00@???>
  +<<< Message-Id: <E10HmbF-0005vi-00@???>
   <<< From: CALLER_NAME <CALLER@???>
   <<< Date: Tue, 2 Mar 1999 09:44:33 +0000
   <<< 
   <<< This is a test message.
   <<< .
   250 Number 1 is OK
  -1999-03-02 09:44:33 10HmbE-0005vi-00 => userx <userx@???> R=smartuser T=lmtp
  -1999-03-02 09:44:33 10HmbE-0005vi-00 == jack@??? R=smartuser T=lmtp defer (-1): LMTP timeout after end of data (ddd bytes written)
  -1999-03-02 09:44:33 10HmbE-0005vi-00 == jill@??? R=smartuser T=lmtp defer (-1): LMTP timeout after end of data (ddd bytes written)
  -1999-03-02 09:44:33 10HmbE-0005vi-00 == tom@??? R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:<tom@???>: 450 This one is delayed on RCPT
  -1999-03-02 09:44:33 10HmbE-0005vi-00 ** dick@??? R=smartuser T=lmtp: LMTP error after RCPT TO:<dick@???>: 550 This one is unknown on RCPT
  -1999-03-02 09:44:33 10HmbE-0005vi-00 == harry@??? R=smartuser T=lmtp defer (-1): LMTP timeout after end of data (ddd bytes written)
  -1999-03-02 09:44:33 10HmbF-0005vi-00 <= <> R=10HmbE-0005vi-00 U=EXIMUSER P=local S=sss
  -1999-03-02 09:44:33 10HmbF-0005vi-00 => :blackhole: <CALLER@???> R=bounces
  -1999-03-02 09:44:33 10HmbF-0005vi-00 Completed
  -1999-03-02 09:44:33 10HmbG-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbF-0005vi-00 => userx <userx@???> R=smartuser T=lmtp
  +1999-03-02 09:44:33 10HmbF-0005vi-00 == jack@??? R=smartuser T=lmtp defer (-1): LMTP timeout after end of data (ddd bytes written)
  +1999-03-02 09:44:33 10HmbF-0005vi-00 == jill@??? R=smartuser T=lmtp defer (-1): LMTP timeout after end of data (ddd bytes written)
  +1999-03-02 09:44:33 10HmbF-0005vi-00 == tom@??? R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:<tom@???>: 450 This one is delayed on RCPT
  +1999-03-02 09:44:33 10HmbF-0005vi-00 ** dick@??? R=smartuser T=lmtp: LMTP error after RCPT TO:<dick@???>: 550 This one is unknown on RCPT
  +1999-03-02 09:44:33 10HmbF-0005vi-00 == harry@??? R=smartuser T=lmtp defer (-1): LMTP timeout after end of data (ddd bytes written)
  +1999-03-02 09:44:33 10HmbG-0005vi-00 <= <> R=10HmbF-0005vi-00 U=EXIMUSER P=local S=sss
  +1999-03-02 09:44:33 10HmbG-0005vi-00 => :blackhole: <CALLER@???> R=bounces
  +1999-03-02 09:44:33 10HmbG-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbH-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
   220 Welcome to this LMTP simulation
   LHLO
   <<< LHLO myhost.test.ex
  @@ -169,13 +174,13 @@
   <<< RCPT TO:<harry@???>
   250 OK
   DATA
  -1999-03-02 09:44:33 10HmbG-0005vi-00 == userx@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  -1999-03-02 09:44:33 10HmbG-0005vi-00 == jack@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  -1999-03-02 09:44:33 10HmbG-0005vi-00 == jill@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  -1999-03-02 09:44:33 10HmbG-0005vi-00 == tom@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  -1999-03-02 09:44:33 10HmbG-0005vi-00 == dick@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  -1999-03-02 09:44:33 10HmbG-0005vi-00 == harry@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  -1999-03-02 09:44:33 10HmbH-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbH-0005vi-00 == userx@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  +1999-03-02 09:44:33 10HmbH-0005vi-00 == jack@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  +1999-03-02 09:44:33 10HmbH-0005vi-00 == jill@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  +1999-03-02 09:44:33 10HmbH-0005vi-00 == tom@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  +1999-03-02 09:44:33 10HmbH-0005vi-00 == dick@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  +1999-03-02 09:44:33 10HmbH-0005vi-00 == harry@??? R=smartuser T=lmtp defer (-1): LMTP timeout after DATA
  +1999-03-02 09:44:33 10HmbI-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
   220 Welcome to this LMTP simulation
   LHLO
   <<< LHLO myhost.test.ex
  @@ -196,9 +201,9 @@
   .
   <<< Received: from CALLER by myhost.test.ex with local (Exim x.yz)
   <<<     (envelope-from <CALLER@???>)
  -<<<     id 10HmbH-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
  +<<<     id 10HmbI-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
   <<< script: 08
  -<<< Message-Id: <E10HmbH-0005vi-00@???>
  +<<< Message-Id: <E10HmbI-0005vi-00@???>
   <<< From: CALLER_NAME <CALLER@???>
   <<< Date: Tue, 2 Mar 1999 09:44:33 +0000
   <<< 
  @@ -209,10 +214,10 @@
   QUIT
   <<< QUIT
   220 OK
  -1999-03-02 09:44:33 10HmbH-0005vi-00 => jack <jack@???> R=smartuser T=lmtp
  -1999-03-02 09:44:33 10HmbH-0005vi-00 -> jill <jill@???> R=smartuser T=lmtp
  -1999-03-02 09:44:33 10HmbH-0005vi-00 Completed
  -1999-03-02 09:44:33 10HmbI-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +1999-03-02 09:44:33 10HmbI-0005vi-00 => jack <jack@???> R=smartuser T=lmtp
  +1999-03-02 09:44:33 10HmbI-0005vi-00 -> jill <jill@???> R=smartuser T=lmtp
  +1999-03-02 09:44:33 10HmbI-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbJ-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
   220 Welcome to this LMTP simulation
   LHLO
   <<< LHLO myhost.test.ex
  @@ -234,9 +239,9 @@
   .
   <<< Received: from CALLER by myhost.test.ex with local (Exim x.yz)
   <<<     (envelope-from <CALLER@???>)
  -<<<     id 10HmbI-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
  +<<<     id 10HmbJ-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
   <<< script: 09
  -<<< Message-Id: <E10HmbI-0005vi-00@???>
  +<<< Message-Id: <E10HmbJ-0005vi-00@???>
   <<< From: CALLER_NAME <CALLER@???>
   <<< Date: Tue, 2 Mar 1999 09:44:33 +0000
   <<< 
  @@ -247,6 +252,29 @@
   QUIT
   <<< QUIT
   220 OK
  -1999-03-02 09:44:33 10HmbI-0005vi-00 => jack <jack@???> R=smartuser T=lmtp
  -1999-03-02 09:44:33 10HmbI-0005vi-00 -> jill <jill@???> R=smartuser T=lmtp
  -1999-03-02 09:44:33 10HmbI-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbJ-0005vi-00 => jack <jack@???> R=smartuser T=lmtp
  +1999-03-02 09:44:33 10HmbJ-0005vi-00 -> jill <jill@???> R=smartuser T=lmtp
  +1999-03-02 09:44:33 10HmbJ-0005vi-00 Completed
  +1999-03-02 09:44:33 10HmbK-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
  +220 Welcome to this LMTP simulation
  +LHLO
  +<<< LHLO myhost.test.ex
  +250-Hello there
  +250 SIZE
  +MAIL FROM
  +<<< MAIL FROM:<CALLER@???>
  +250 OK
  +RCPT TO
  +<<< RCPT TO:<userx@???>
  +250 OK
  +RCPT TO
  +<<< RCPT TO:<usery@???>
  +250 OK
  +DATA
  +<<< DATA
  +450 Temporary error
  +QUIT
  +<<< QUIT
  +220 OK
  +1999-03-02 09:44:33 10HmbK-0005vi-00 == userx@??? R=smartuser T=lmtp defer (-46): LMTP error after DATA: 450 Temporary error
  +1999-03-02 09:44:33 10HmbK-0005vi-00 == usery@??? R=smartuser T=lmtp defer (-46): LMTP error after DATA: 450 Temporary error


  Index: 5102
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/5102,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 5102    7 Feb 2006 10:34:46 -0000    1.1
  +++ 5102    9 Mar 2006 15:10:17 -0000    1.2
  @@ -15,7 +15,7 @@
   1999-03-02 09:44:33 End queue run: pid=pppp -qf
   1999-03-02 09:44:33 10HmbA-0005vi-00 <= CALLER@??? U=CALLER P=local S=sss
   1999-03-02 09:44:33 10HmbA-0005vi-00 => lp1 <lp1@???> R=smartuser T=lmtp
  -1999-03-02 09:44:33 10HmbA-0005vi-00 == lp2@??? R=smartuser T=lmtp defer (-1): LMTP error after end of data: 450 Number 2 is now delayed
  +1999-03-02 09:44:33 10HmbA-0005vi-00 == lp2@??? R=smartuser T=lmtp defer (-46): LMTP error after end of data: 450 Number 2 is now delayed
   1999-03-02 09:44:33 10HmbA-0005vi-00 ** lp3@??? R=smartuser T=lmtp: LMTP error after end of data: 550 Number 3 is now rejected
   1999-03-02 09:44:33 10HmbA-0005vi-00 == lp4@??? R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:<lp4@???>: 450 This one is delayed on RCPT
   1999-03-02 09:44:33 10HmbA-0005vi-00 ** lp5@??? R=smartuser T=lmtp: LMTP error after RCPT TO:<lp5@???>: 550 This one is unknown on RCPT


  Index: 5103
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/log/5103,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 5103    7 Feb 2006 10:34:46 -0000    1.1
  +++ 5103    9 Mar 2006 15:10:17 -0000    1.2
  @@ -14,4 +14,4 @@
   <<< DATA
   354 Send it
   .
  -1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (-1): transport filter process failed (127): unable to execute command
  +1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@??? R=r1 T=t1 defer (-24): transport filter process failed (127): unable to execute command


  Index: 0497
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/scripts/0000-Basic/0497,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0497    7 Feb 2006 10:54:33 -0000    1.1
  +++ 0497    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,5 +1,22 @@
  -# rcpt_4xx from server with no retry
  +# mail_4xx, rcpt_4xx, data_4xx, lost_connection
   need_ipv4
  +# MAIL, no pipelining
  +#
  +server PORT_S
  +220 Server ready
  +EHLO
  +250-server id
  +250 OK
  +MAIL FROM
  +452 temporary error
  +QUIT
  +250 OK
  +****
  +exim -odi userx@???
  +****
  +dump retry
  +sudo rm DIR/spool/db/*
  +# RCPT, no pipelining
   #
   server PORT_S
   220 Server ready
  @@ -16,4 +33,127 @@
   exim -odi userx@???
   ****
   dump retry
  -no_message_check
  +# DATA start, no pipelining
  +#
  +server PORT_S
  +220 Server ready
  +EHLO
  +250-server id
  +250 OK
  +MAIL FROM
  +250 OK
  +RCPT TO
  +250 OK
  +DATA
  +452 temporary error
  +QUIT
  +250 OK
  +****
  +exim -odi userx@???
  +****
  +# DATA end, no pipelining
  +#
  +server PORT_S
  +220 Server ready
  +EHLO
  +250-server id
  +250 OK
  +MAIL FROM
  +250 OK
  +RCPT TO
  +250 OK
  +DATA
  +352 GO AHEAD
  +.
  +452 temporary error
  +QUIT
  +250 OK
  +****
  +exim -odi userx@???
  +****
  +# MAIL, pipelining
  +#
  +server PORT_S
  +220 Server ready
  +EHLO
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM
  +452 temporary error
  +QUIT
  +250 OK
  +****
  +exim -odi userx@???
  +****
  +# RCPT, pipelining
  +#
  +server PORT_S
  +220 Server ready
  +EHLO
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM
  +250 OK
  +RCPT TO
  +452 temporary error
  +QUIT
  +250 OK
  +****
  +exim -odi userx@???
  +****
  +# DATA start, pipelining
  +#
  +server PORT_S
  +220 Server ready
  +EHLO
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM
  +250 OK
  +RCPT TO
  +250 OK
  +DATA
  +452 temporary error
  +QUIT
  +250 OK
  +****
  +exim -odi userx@???
  +****
  +# DATA end, pipelining
  +#
  +server PORT_S
  +220 Server ready
  +EHLO
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM
  +250 OK
  +RCPT TO
  +250 OK
  +DATA
  +352 GO AHEAD
  +.
  +452 temporary error
  +QUIT
  +250 OK
  +****
  +exim -odi userx@???
  +****
  +# lost connection
  +#
  +server PORT_S
  +220 Server ready
  +EHLO
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM
  +250 OK
  +RCPT TO
  +****
  +exim -odi userx@???
  +****


  Index: 2010
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/scripts/2000-GnuTLS/2010,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 2010    7 Feb 2006 10:54:47 -0000    1.1
  +++ 2010    9 Mar 2006 15:10:17 -0000    1.2
  @@ -7,5 +7,7 @@
   ****
   exim -qf
   ****
  +exim -DHOSTS=127.0.0.1 -qf
  +****
   killdaemon
   no_msglog_check


  Index: 2110
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/scripts/2100-OpenSSL/2110,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 2110    7 Feb 2006 10:54:47 -0000    1.1
  +++ 2110    9 Mar 2006 15:10:17 -0000    1.2
  @@ -6,5 +6,7 @@
   ****
   exim -qf
   ****
  +exim -DHOSTS=127.0.0.1 -qf
  +****
   killdaemon
   no_msglog_check


  Index: 5100
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/scripts/5100-lmtp-transport/5100,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 5100    7 Feb 2006 10:54:50 -0000    1.1
  +++ 5100    9 Mar 2006 15:10:17 -0000    1.2
  @@ -36,4 +36,8 @@
   script: 09
   This is a test message.
   ****
  +exim -odi userx usery
  +script: 10
  +This is a test message.
  +****
   no_msglog_check


  Index: 0217
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stderr/0217,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0217    7 Feb 2006 10:47:31 -0000    1.1
  +++ 0217    9 Mar 2006 15:10:17 -0000    1.2
  @@ -116,7 +116,7 @@
     SMTP<< 403 Sorry temp data error
     SMTP>> QUIT
   LOG: MAIN
  -  == a@??? R=client T=send_to_server defer (0): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 403 Sorry temp data error
  +  == a@??? R=client T=send_to_server defer (-46): SMTP error from remote mail server after pipelined DATA: host 127.0.0.1 [127.0.0.1]: 403 Sorry temp data error
   LOG: MAIN
     ** b@??? R=client T=send_to_server: SMTP error from remote mail server after RCPT TO:<b@???>: host 127.0.0.1 [127.0.0.1]: 550 NO
   LOG: MAIN


  Index: 0497
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stdout/0497,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0497    7 Feb 2006 10:47:37 -0000    1.1
  +++ 0497    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,8 +1,9 @@
   +++++++++++++++++++++++++++
  +  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@???>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
  +first failed = time last try = time2 next try = time2 + 0 *
  ++++++++++++++++++++++++++++
     R:userx@??? -44 13377 SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 452 temporary error
   first failed = time last try = time2 next try = time2 + 0 *
  -  T:127.0.0.1:127.0.0.1:1224 dd 65 Connection refused
  -first failed = time last try = time2 next try = time2 + 900


   ******** SERVER ********
   Listening on port 1224 ... 
  @@ -12,9 +13,139 @@
   250-server id
   250 OK
   MAIL FROM:<CALLER@???>
  +452 temporary error
  +QUIT
  +250 OK
  +End of script
  +Listening on port 1224 ... 
  +Connection request from [127.0.0.1]
  +220 Server ready
  +EHLO myhost.test.ex
  +250-server id
  +250 OK
  +MAIL FROM:<CALLER@???>
  +250 OK
  +RCPT TO:<userx@???>
  +452 temporary error
  +QUIT
  +250 OK
  +End of script
  +Listening on port 1224 ... 
  +Connection request from [127.0.0.1]
  +220 Server ready
  +EHLO myhost.test.ex
  +250-server id
  +250 OK
  +MAIL FROM:<CALLER@???>
   250 OK
   RCPT TO:<userx@???>
  +250 OK
  +DATA
   452 temporary error
   QUIT
   250 OK
  +End of script
  +Listening on port 1224 ... 
  +Connection request from [127.0.0.1]
  +220 Server ready
  +EHLO myhost.test.ex
  +250-server id
  +250 OK
  +MAIL FROM:<CALLER@???>
  +250 OK
  +RCPT TO:<userx@???>
  +250 OK
  +DATA
  +352 GO AHEAD
  +Received: from CALLER by myhost.test.ex with local (Exim x.yz)
  +    (envelope-from <CALLER@???>)
  +    id 10HmbD-0005vi-00
  +    for userx@???; Tue, 2 Mar 1999 09:44:33 +0000
  +Message-Id: <E10HmbD-0005vi-00@???>
  +From: CALLER_NAME <CALLER@???>
  +Date: Tue, 2 Mar 1999 09:44:33 +0000
  +
  +.
  +452 temporary error
  +QUIT
  +250 OK
  +End of script
  +Listening on port 1224 ... 
  +Connection request from [127.0.0.1]
  +220 Server ready
  +EHLO myhost.test.ex
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM:<CALLER@???>
  +452 temporary error
  +RCPT TO:<userx@???>
  +Comparison failed - bailing out
  +Expected: QUIT
  +Listening on port 1224 ... 
  +Connection request from [127.0.0.1]
  +220 Server ready
  +EHLO myhost.test.ex
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM:<CALLER@???>
  +250 OK
  +RCPT TO:<userx@???>
  +452 temporary error
  +DATA
  +Comparison failed - bailing out
  +Expected: QUIT
  +Listening on port 1224 ... 
  +Connection request from [127.0.0.1]
  +220 Server ready
  +EHLO myhost.test.ex
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM:<CALLER@???>
  +250 OK
  +RCPT TO:<userx@???>
  +250 OK
  +DATA
  +452 temporary error
  +QUIT
  +250 OK
  +End of script
  +Listening on port 1224 ... 
  +Connection request from [127.0.0.1]
  +220 Server ready
  +EHLO myhost.test.ex
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM:<CALLER@???>
  +250 OK
  +RCPT TO:<userx@???>
  +250 OK
  +DATA
  +352 GO AHEAD
  +Received: from CALLER by myhost.test.ex with local (Exim x.yz)
  +    (envelope-from <CALLER@???>)
  +    id 10HmbL-0005vi-00
  +    for userx@???; Tue, 2 Mar 1999 09:44:33 +0000
  +Message-Id: <E10HmbL-0005vi-00@???>
  +From: CALLER_NAME <CALLER@???>
  +Date: Tue, 2 Mar 1999 09:44:33 +0000
  +
  +.
  +452 temporary error
  +QUIT
  +250 OK
  +End of script
  +Listening on port 1224 ... 
  +Connection request from [127.0.0.1]
  +220 Server ready
  +EHLO myhost.test.ex
  +250-server id
  +250-PIPELINING
  +250 OK
  +MAIL FROM:<CALLER@???>
  +250 OK
  +RCPT TO:<userx@???>
   End of script


  Index: 0498
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stdout/0498,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0498    7 Feb 2006 10:47:37 -0000    1.1
  +++ 0498    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,5 +1,5 @@
   +++++++++++++++++++++++++++
  -  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@???>: host 127.0.0.1 [127.0.0.1]: 450 DELAY
  +  T:127.0.0.1:127.0.0.1:1224:10HmaX-0005vi-00 -45 12865 SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 450 DELAY
   first failed = time last try = time2 next try = time2 + 10


******** SERVER ********

  Index: 1008
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stdout/1008,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 1008    7 Feb 2006 10:47:37 -0000    1.1
  +++ 1008    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,18 +1,18 @@
   +++++++++++++++++++++++++++
  -  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@???>: host 127.0.0.1 [127.0.0.1]: 450 Temporary error
  +  T:127.0.0.1:127.0.0.1:1224:10HmaX-0005vi-00 -45 12865 SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 450 Temporary error
   first failed = time last try = time2 next try = time2 + 7200
  -  T:::1:::1:1224:10HmaX-0005vi-00 0 65 SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host ::1 [::1]: 450 Temporary error
  +  T:::1:::1:1224:10HmaX-0005vi-00 -45 12865 SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host ::1 [::1]: 450 Temporary error
   first failed = time last try = time2 next try = time2 + 7200
  -Transport: 127.0.0.1 [127.0.0.1]:1111 10HmaX-0005vi-00 error 0: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 450 Temporary error
  +Transport: 127.0.0.1 [127.0.0.1]:1111 10HmaX-0005vi-00 error -45: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host 127.0.0.1 [127.0.0.1]: 450 Temporary error
     first failed: 07-Mar-2000 12:21:52
     last tried:   07-Mar-2000 12:21:52
     next try at:  07-Mar-2000 12:21:52
  -Transport: ::1 [::1]:1111 10HmaX-0005vi-00 error 0: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host ::1 [::1]: 450 Temporary error
  +Transport: ::1 [::1]:1111 10HmaX-0005vi-00 error -45: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host ::1 [::1]: 450 Temporary error
     first failed: 07-Mar-2000 12:21:52
     last tried:   07-Mar-2000 12:21:52
     next try at:  07-Mar-2000 12:21:52
   exinext exit code = 0
  -Transport: ::1 [::1]:1111 10HmaX-0005vi-00 error 0: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host ::1 [::1]: 450 Temporary error
  +Transport: ::1 [::1]:1111 10HmaX-0005vi-00 error -45: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: host ::1 [::1]: 450 Temporary error
     first failed: 07-Mar-2000 12:21:52
     last tried:   07-Mar-2000 12:21:52
     next try at:  07-Mar-2000 12:21:52


  Index: 5100
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stdout/5100,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 5100    7 Feb 2006 10:47:37 -0000    1.1
  +++ 5100    9 Mar 2006 15:10:17 -0000    1.2
  @@ -1,5 +1,5 @@
   +++++++++++++++++++++++++++
  -  T:jack@??? -1 0 LMTP error after end of data: 450 Number 2 is now delayed
  +  T:jack@??? -46 12800 LMTP error after end of data: 450 Number 2 is now delayed
   first failed = time last try = time2 next try = time2 + 0
     T:tom@??? -44 12800 LMTP error after RCPT TO:<tom@???>: 450 This one is delayed on RCPT
   first failed = time last try = time2 next try = time2 + 60