From e97957bc478f60d32649b329659d4b72748745c1 Mon Sep 17 00:00:00 2001 From: Philip Hazel Date: Thu, 9 Mar 2006 15:10:16 +0000 Subject: [PATCH] Add new errors mail_4xx, data_4xx, lost_connection, tls_required. --- doc/doc-misc/WishList | 36 +----- doc/doc-txt/ChangeLog | 5 +- doc/doc-txt/NewStuff | 20 +++- src/src/exim.c | 12 +- src/src/macros.h | 4 +- src/src/readconf.c | 22 ++-- src/src/retry.c | 25 ++-- src/src/transports/lmtp.c | 32 ++++- src/src/transports/smtp.c | 161 +++++++++++++++++--------- test/aux-fixed/5100.script.10 | 14 +++ test/confs/0497 | 8 ++ test/confs/2010 | 11 +- test/confs/2110 | 11 +- test/confs/5100 | 1 + test/log/0217 | 10 +- test/log/0497 | 63 +++++++++- test/log/0498 | 2 +- test/log/1008 | 2 +- test/log/2010 | 7 ++ test/log/2110 | 7 ++ test/log/5100 | 116 ++++++++++++------- test/log/5102 | 2 +- test/log/5103 | 2 +- test/scripts/0000-Basic/0497 | 144 ++++++++++++++++++++++- test/scripts/2000-GnuTLS/2010 | 2 + test/scripts/2100-OpenSSL/2110 | 2 + test/scripts/5100-lmtp-transport/5100 | 4 + test/stderr/0217 | 2 +- test/stdout/0497 | 135 ++++++++++++++++++++- test/stdout/0498 | 2 +- test/stdout/1008 | 10 +- test/stdout/5100 | 2 +- 32 files changed, 689 insertions(+), 187 deletions(-) create mode 100644 test/aux-fixed/5100.script.10 diff --git a/doc/doc-misc/WishList b/doc/doc-misc/WishList index 3f70a9d64..fc5e0c126 100644 --- a/doc/doc-misc/WishList +++ b/doc/doc-misc/WishList @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-misc/WishList,v 1.64 2006/03/08 09:43:10 ph10 Exp $ +$Cambridge: exim/doc/doc-misc/WishList,v 1.65 2006/03/09 15:10:16 ph10 Exp $ EXIM 4 WISH LIST ---------------- @@ -295,16 +295,6 @@ David Carter 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 @@ This is an option that turns all hard bounces into soft bounces. The idea is 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 @@ permanent ones after some fixed time. ------------------------------------------------------------------------------ (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 @@ e.g. exigrep, eximstats, will be automatically handled if the logs are 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 @@ For example: mainlog_selector and rejectlog_selector, with log_selector setting 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 @@ -2018,10 +1989,5 @@ 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 --------------------------------- diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 29875590e..f28bb3286 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.326 2006/03/08 11:13:07 ph10 Exp $ +$Cambridge: 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 ------------------------------------------- @@ -300,6 +300,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 ----------------- diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff index 065ddd3d2..f3e34e773 100644 --- a/doc/doc-txt/NewStuff +++ b/doc/doc-txt/NewStuff @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/NewStuff,v 1.95 2006/03/06 16:05:12 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/NewStuff,v 1.96 2006/03/09 15:10:16 ph10 Exp $ New Features in Exim -------------------- @@ -165,6 +165,24 @@ PH/18 There is a new ACL modifier called "add_header" which does what its name 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. + Version 4.60 diff --git a/src/src/exim.c b/src/src/exim.c index ec36d4940..30ea05c41 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/exim.c,v 1.36 2006/02/23 10:25:01 ph10 Exp $ */ +/* $Cambridge: 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 @@ if (test_retry_arg >= 0) 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. */ + /* 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_RCPT4XX) + if (basic_errno == ERRNO_MAIL4XX || + basic_errno == ERRNO_RCPT4XX || + basic_errno == ERRNO_DATA4XX) { int code = (more_errno >> 8) & 255; if (code == 255) diff --git a/src/src/macros.h b/src/src/macros.h index 497589023..7de0c4bfc 100644 --- a/src/src/macros.h +++ b/src/src/macros.h @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/macros.h,v 1.23 2006/02/14 14:55:37 ph10 Exp $ */ +/* $Cambridge: 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 @@ to conflict with system errno values. */ #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 */ diff --git a/src/src/readconf.c b/src/src/readconf.c index 59e75d0a4..d1911a7b6 100644 --- a/src/src/readconf.c +++ b/src/src/readconf.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/readconf.c,v 1.21 2006/02/22 15:08:20 ph10 Exp $ */ +/* $Cambridge: 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 (len == 7 && strncmpic(pp, US"timeout", len) == 0) } } -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 (strncmpic(pp, US"rcpt_4", 6) == 0) 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); diff --git a/src/src/retry.c b/src/src/retry.c index dbfd3cee8..ca61e5c0c 100644 --- a/src/src/retry.c +++ b/src/src/retry.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/retry.c,v 1.8 2006/02/16 16:37:57 ph10 Exp $ */ +/* $Cambridge: 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 @@ for (yield = retries; yield != NULL; yield = yield->next) 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) { diff --git a/src/src/transports/lmtp.c b/src/src/transports/lmtp.c index 79ad67d01..969e45d60 100644 --- a/src/src/transports/lmtp.c +++ b/src/src/transports/lmtp.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/transports/lmtp.c,v 1.7 2006/02/07 11:19:03 ph10 Exp $ */ +/* $Cambridge: 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 @@ if (!lmtp_write_command(fd_in, "MAIL FROM:<%s>\r\n", return_path)) 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 @@ for (addr = addrlist; addr != NULL; addr = addr->next) 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 (send_data) 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 @@ if (send_data) 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 @@ goto RETURN; /* 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, diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c index 9b204e064..e223bb183 100644 --- a/src/src/transports/smtp.c +++ b/src/src/transports/smtp.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/transports/smtp.c,v 1.24 2006/03/01 16:07:16 ph10 Exp $ */ +/* $Cambridge: 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 (pending_MAIL) 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 @@ if (pending_MAIL) && (errno != 0 || flushbuffer[0] == 0)) break; } + errno = save_errno; } return -3; } @@ -683,11 +690,9 @@ while (count-- > 0) 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 @@ if (pending_DATA != 0 && 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 @@ switch(rc) 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 @@ if (!ok) ok = TRUE; else /* 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 @@ if (!ok) ok = TRUE; else 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 (!ok) } } - /* 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 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. */ - 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)) + else { - yield = (save_errno == ERRNO_CHHEADER_FAIL || - save_errno == ERRNO_FILTER_FAIL)? ERROR : DEFER; - set_errno(addrlist, save_errno, message, DEFER, pass_message); - } + BOOL message_error; - /* 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. */ + switch(save_errno) + { + case 0: + case ERRNO_MAIL4XX: + case ERRNO_DATA4XX: + message_error = TRUE; + break; - else - { - if (mua_wrapper) code = '5'; /* Force hard failure in wrapper mode */ + 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 "." - if (code != '5') /* Anything other than 5 is treated as temporary */ + 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 (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); } } } diff --git a/test/aux-fixed/5100.script.10 b/test/aux-fixed/5100.script.10 new file mode 100644 index 000000000..592cdd8a4 --- /dev/null +++ b/test/aux-fixed/5100.script.10 @@ -0,0 +1,14 @@ +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 diff --git a/test/confs/0497 b/test/confs/0497 index 4777bd20d..23748aedf 100644 --- a/test/confs/0497 +++ b/test/confs/0497 @@ -17,6 +17,11 @@ gecos_name = CALLER_NAME begin routers +r0: + driver = redirect + senders = : + data = :blackhole: discard bounces + r1: driver = accept transport = t1 @@ -37,7 +42,10 @@ t1: begin retry +* lost_connection +* mail_4xx * rcpt_4xx +* data_4xx * * F,1d,15m diff --git a/test/confs/2010 b/test/confs/2010 index bda63bb7a..c08d4ce49 100644 --- a/test/confs/2010 +++ b/test/confs/2010 @@ -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 @@ begin transports 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 diff --git a/test/confs/2110 b/test/confs/2110 index dc1656832..1eb7ecb11 100644 --- a/test/confs/2110 +++ b/test/confs/2110 @@ -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 @@ begin transports 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 diff --git a/test/confs/5100 b/test/confs/5100 index a1b5c67d0..09a3dc891 100644 --- a/test/confs/5100 +++ b/test/confs/5100 @@ -51,6 +51,7 @@ lmtp: begin retry +* mail_4xx * rcpt_4xx F,1d,1m * * F,5d,1d diff --git a/test/log/0217 b/test/log/0217 index 14321f459..4913cb03f 100644 --- a/test/log/0217 +++ b/test/log/0217 @@ -12,8 +12,8 @@ 1999-03-02 09:44:33 10HmaZ-0005vi-00 == b@test.ex 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: 1999-03-02 09:44:33 10HmaZ-0005vi-00 == c@test.ex 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: 1999-03-02 09:44:33 10HmbA-0005vi-00 <= CALLER@test.ex U=CALLER P=local S=sss -1999-03-02 09:44:33 10HmbA-0005vi-00 == a@test.ex R=client T=send_to_server defer (0): SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 451 Temp error -1999-03-02 09:44:33 10HmbA-0005vi-00 == b@test.ex R=client T=send_to_server defer (0): SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 451 Temp error +1999-03-02 09:44:33 10HmbA-0005vi-00 == a@test.ex R=client T=send_to_server defer (-45): SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 451 Temp error +1999-03-02 09:44:33 10HmbA-0005vi-00 == b@test.ex R=client T=send_to_server defer (-45): SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 451 Temp error 1999-03-02 09:44:33 10HmbB-0005vi-00 <= CALLER@test.ex U=CALLER P=local S=sss 1999-03-02 09:44:33 10HmbB-0005vi-00 ** a@test.ex R=client T=send_to_server: SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 550 Perm error 1999-03-02 09:44:33 10HmbB-0005vi-00 ** b@test.ex R=client T=send_to_server: SMTP error from remote mail server after MAIL FROM:: 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@test.ex U=CALLER P=local S=sss -1999-03-02 09:44:33 10HmbK-0005vi-00 == a@test.ex 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@test.ex 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@test.ex 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@test.ex 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@test.ex U=CALLER P=local S=sss -1999-03-02 09:44:33 10HmbL-0005vi-00 == a@test.ex 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@test.ex 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@test.ex R=client T=send_to_server: SMTP error from remote mail server after RCPT TO:: host 127.0.0.1 [127.0.0.1]: 550 NO 1999-03-02 09:44:33 10HmbL-0005vi-00 ** c@test.ex R=client T=send_to_server: SMTP error from remote mail server after RCPT TO:: host 127.0.0.1 [127.0.0.1]: 550 NO 1999-03-02 09:44:33 10HmbL-0005vi-00 ** d@test.ex R=client T=send_to_server: SMTP error from remote mail server after RCPT TO:: host 127.0.0.1 [127.0.0.1]: 550 NO diff --git a/test/log/0497 b/test/log/0497 index 8bd74c412..61f08ff1b 100644 --- a/test/log/0497 +++ b/test/log/0497 @@ -1,7 +1,64 @@ 1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss -1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@x.y R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:: host 127.0.0.1 [127.0.0.1]: 452 temporary error +1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@x.y R=r1 T=t1 defer (-45): SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 452 temporary error 1999-03-02 09:44:33 10HmaX-0005vi-00 ** userx@x.y: 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@myhost.test.ex R=r1 T=t1 defer (dd): Connection refused +1999-03-02 09:44:33 10HmaY-0005vi-00 => :blackhole: 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@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmaZ-0005vi-00 == userx@x.y R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:: host 127.0.0.1 [127.0.0.1]: 452 temporary error +1999-03-02 09:44:33 10HmaZ-0005vi-00 ** userx@x.y: 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: 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@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbB-0005vi-00 == userx@x.y 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@x.y: 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: 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@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbD-0005vi-00 == userx@x.y 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@x.y: 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: 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@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbF-0005vi-00 == userx@x.y R=r1 T=t1 defer (-45): SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 452 temporary error +1999-03-02 09:44:33 10HmbF-0005vi-00 ** userx@x.y: 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: 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@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbH-0005vi-00 == userx@x.y R=r1 T=t1 defer (-44): SMTP error from remote mail server after RCPT TO:: host 127.0.0.1 [127.0.0.1]: 452 temporary error +1999-03-02 09:44:33 10HmbH-0005vi-00 ** userx@x.y: 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: 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@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbJ-0005vi-00 == userx@x.y 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@x.y: 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: 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@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbL-0005vi-00 == userx@x.y 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@x.y: 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: 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@myhost.test.ex 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: +1999-03-02 09:44:33 10HmbN-0005vi-00 == userx@x.y R=r1 T=t1 defer (-18): Remote host 127.0.0.1 [127.0.0.1] closed connection in response to RCPT TO: +1999-03-02 09:44:33 10HmbN-0005vi-00 ** userx@x.y: 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: R=r0 +1999-03-02 09:44:33 10HmbO-0005vi-00 Completed +1999-03-02 09:44:33 10HmbN-0005vi-00 Completed diff --git a/test/log/0498 b/test/log/0498 index 62178dbab..ae2dd0f27 100644 --- a/test/log/0498 +++ b/test/log/0498 @@ -1,5 +1,5 @@ 1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss -1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@x.y R=r1 T=t1 defer (0): SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 450 DELAY +1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@x.y R=r1 T=t1 defer (-45): SMTP error from remote mail server after MAIL FROM:: 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@x.y 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@x.y: retry timeout exceeded diff --git a/test/log/1008 b/test/log/1008 index e140c6e8e..1e5f075e9 100644 --- a/test/log/1008 +++ b/test/log/1008 @@ -1,3 +1,3 @@ 1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@the.local.host.name U=CALLER P=local S=sss 1999-03-02 09:44:33 10HmaX-0005vi-00 SMTP error from remote mail server after MAIL FROM:: host 127.0.0.1 [127.0.0.1]: 450 Temporary error -1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@test.ex R=r1 T=t1 defer (0): SMTP error from remote mail server after MAIL FROM:: host ::1 [::1]: 450 Temporary error +1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@test.ex R=r1 T=t1 defer (-45): SMTP error from remote mail server after MAIL FROM:: host ::1 [::1]: 450 Temporary error diff --git a/test/log/2010 b/test/log/2010 index 713adc452..134d5e7d1 100644 --- a/test/log/2010 +++ b/test/log/2010 @@ -4,6 +4,13 @@ 1999-03-02 09:44:33 10HmaX-0005vi-00 => userx@test.ex 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@test.ex 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@test.ex: 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 diff --git a/test/log/2110 b/test/log/2110 index 675b2b476..b863b37f5 100644 --- a/test/log/2110 +++ b/test/log/2110 @@ -4,6 +4,13 @@ 1999-03-02 09:44:33 10HmaX-0005vi-00 => userx@test.ex 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@test.ex 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@test.ex: 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 diff --git a/test/log/5100 b/test/log/5100 index 4c8fa3219..ec4a807ff 100644 --- a/test/log/5100 +++ b/test/log/5100 @@ -32,8 +32,13 @@ MAIL FROM QUIT <<< QUIT 250 OK -1999-03-02 09:44:33 10HmbB-0005vi-00 == userx@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP error after MAIL FROM:: 450 Don't like that sender just at the moment -1999-03-02 09:44:33 10HmbC-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbB-0005vi-00 == userx@myhost.test.ex R=smartuser T=lmtp defer (-45): LMTP error after MAIL FROM:: 450 Don't like that sender just at the moment +1999-03-02 09:44:33 10HmbB-0005vi-00 ** userx@myhost.test.ex: 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: 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@myhost.test.ex U=CALLER P=local S=sss 220 Welcome to this LMTP simulation LHLO <<< LHLO myhost.test.ex @@ -66,9 +71,9 @@ DATA . <<< Received: from CALLER by myhost.test.ex with local (Exim x.yz) <<< (envelope-from ) -<<< 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: +<<< Message-Id: <<< From: CALLER_NAME <<< Date: Tue, 2 Mar 1999 09:44:33 +0000 <<< @@ -81,16 +86,16 @@ DATA QUIT <<< QUIT 250 OK -1999-03-02 09:44:33 10HmbC-0005vi-00 => userx R=smartuser T=lmtp -1999-03-02 09:44:33 10HmbC-0005vi-00 == jack@myhost.test.ex 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@myhost.test.ex 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@myhost.test.ex R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:: 450 This one is delayed on RCPT -1999-03-02 09:44:33 10HmbC-0005vi-00 ** dick@myhost.test.ex R=smartuser T=lmtp: LMTP error after RCPT TO:: 550 This one is unknown on RCPT -1999-03-02 09:44:33 10HmbC-0005vi-00 -> 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: R=bounces -1999-03-02 09:44:33 10HmbD-0005vi-00 Completed -1999-03-02 09:44:33 10HmbE-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbD-0005vi-00 => userx R=smartuser T=lmtp +1999-03-02 09:44:33 10HmbD-0005vi-00 == jack@myhost.test.ex 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@myhost.test.ex 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@myhost.test.ex R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:: 450 This one is delayed on RCPT +1999-03-02 09:44:33 10HmbD-0005vi-00 ** dick@myhost.test.ex R=smartuser T=lmtp: LMTP error after RCPT TO:: 550 This one is unknown on RCPT +1999-03-02 09:44:33 10HmbD-0005vi-00 -> 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: R=bounces +1999-03-02 09:44:33 10HmbE-0005vi-00 Completed +1999-03-02 09:44:33 10HmbF-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss 220 Welcome to this LMTP simulation LHLO <<< LHLO myhost.test.ex @@ -123,25 +128,25 @@ DATA . <<< Received: from CALLER by myhost.test.ex with local (Exim x.yz) <<< (envelope-from ) -<<< 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: +<<< Message-Id: <<< From: CALLER_NAME <<< 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 R=smartuser T=lmtp -1999-03-02 09:44:33 10HmbE-0005vi-00 == jack@myhost.test.ex 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@myhost.test.ex 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@myhost.test.ex R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:: 450 This one is delayed on RCPT -1999-03-02 09:44:33 10HmbE-0005vi-00 ** dick@myhost.test.ex R=smartuser T=lmtp: LMTP error after RCPT TO:: 550 This one is unknown on RCPT -1999-03-02 09:44:33 10HmbE-0005vi-00 == harry@myhost.test.ex 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: R=bounces -1999-03-02 09:44:33 10HmbF-0005vi-00 Completed -1999-03-02 09:44:33 10HmbG-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbF-0005vi-00 => userx R=smartuser T=lmtp +1999-03-02 09:44:33 10HmbF-0005vi-00 == jack@myhost.test.ex 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@myhost.test.ex 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@myhost.test.ex R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:: 450 This one is delayed on RCPT +1999-03-02 09:44:33 10HmbF-0005vi-00 ** dick@myhost.test.ex R=smartuser T=lmtp: LMTP error after RCPT TO:: 550 This one is unknown on RCPT +1999-03-02 09:44:33 10HmbF-0005vi-00 == harry@myhost.test.ex 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: R=bounces +1999-03-02 09:44:33 10HmbG-0005vi-00 Completed +1999-03-02 09:44:33 10HmbH-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss 220 Welcome to this LMTP simulation LHLO <<< LHLO myhost.test.ex @@ -169,13 +174,13 @@ RCPT TO <<< RCPT TO: 250 OK DATA -1999-03-02 09:44:33 10HmbG-0005vi-00 == userx@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA -1999-03-02 09:44:33 10HmbG-0005vi-00 == jack@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA -1999-03-02 09:44:33 10HmbG-0005vi-00 == jill@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA -1999-03-02 09:44:33 10HmbG-0005vi-00 == tom@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA -1999-03-02 09:44:33 10HmbG-0005vi-00 == dick@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA -1999-03-02 09:44:33 10HmbG-0005vi-00 == harry@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA -1999-03-02 09:44:33 10HmbH-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbH-0005vi-00 == userx@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA +1999-03-02 09:44:33 10HmbH-0005vi-00 == jack@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA +1999-03-02 09:44:33 10HmbH-0005vi-00 == jill@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA +1999-03-02 09:44:33 10HmbH-0005vi-00 == tom@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA +1999-03-02 09:44:33 10HmbH-0005vi-00 == dick@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA +1999-03-02 09:44:33 10HmbH-0005vi-00 == harry@myhost.test.ex R=smartuser T=lmtp defer (-1): LMTP timeout after DATA +1999-03-02 09:44:33 10HmbI-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss 220 Welcome to this LMTP simulation LHLO <<< LHLO myhost.test.ex @@ -196,9 +201,9 @@ DATA . <<< Received: from CALLER by myhost.test.ex with local (Exim x.yz) <<< (envelope-from ) -<<< 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: +<<< Message-Id: <<< From: CALLER_NAME <<< Date: Tue, 2 Mar 1999 09:44:33 +0000 <<< @@ -209,10 +214,10 @@ DATA QUIT <<< QUIT 220 OK -1999-03-02 09:44:33 10HmbH-0005vi-00 => jack R=smartuser T=lmtp -1999-03-02 09:44:33 10HmbH-0005vi-00 -> 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@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmbI-0005vi-00 => jack R=smartuser T=lmtp +1999-03-02 09:44:33 10HmbI-0005vi-00 -> 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@myhost.test.ex U=CALLER P=local S=sss 220 Welcome to this LMTP simulation LHLO <<< LHLO myhost.test.ex @@ -234,9 +239,9 @@ DATA . <<< Received: from CALLER by myhost.test.ex with local (Exim x.yz) <<< (envelope-from ) -<<< 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: +<<< Message-Id: <<< From: CALLER_NAME <<< Date: Tue, 2 Mar 1999 09:44:33 +0000 <<< @@ -247,6 +252,29 @@ DATA QUIT <<< QUIT 220 OK -1999-03-02 09:44:33 10HmbI-0005vi-00 => jack R=smartuser T=lmtp -1999-03-02 09:44:33 10HmbI-0005vi-00 -> 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 R=smartuser T=lmtp +1999-03-02 09:44:33 10HmbJ-0005vi-00 -> 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@myhost.test.ex 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: +250 OK +RCPT TO +<<< RCPT TO: +250 OK +RCPT TO +<<< RCPT TO: +250 OK +DATA +<<< DATA +450 Temporary error +QUIT +<<< QUIT +220 OK +1999-03-02 09:44:33 10HmbK-0005vi-00 == userx@myhost.test.ex R=smartuser T=lmtp defer (-46): LMTP error after DATA: 450 Temporary error +1999-03-02 09:44:33 10HmbK-0005vi-00 == usery@myhost.test.ex R=smartuser T=lmtp defer (-46): LMTP error after DATA: 450 Temporary error diff --git a/test/log/5102 b/test/log/5102 index 4d4bc3fa4..66076a0b0 100644 --- a/test/log/5102 +++ b/test/log/5102 @@ -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@myhost.test.ex U=CALLER P=local S=sss 1999-03-02 09:44:33 10HmbA-0005vi-00 => lp1 R=smartuser T=lmtp -1999-03-02 09:44:33 10HmbA-0005vi-00 == lp2@myhost.test.ex 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@myhost.test.ex 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@myhost.test.ex 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@myhost.test.ex R=smartuser T=lmtp defer (-44): LMTP error after RCPT TO:: 450 This one is delayed on RCPT 1999-03-02 09:44:33 10HmbA-0005vi-00 ** lp5@myhost.test.ex R=smartuser T=lmtp: LMTP error after RCPT TO:: 550 This one is unknown on RCPT diff --git a/test/log/5103 b/test/log/5103 index 288fa3e4b..43549c140 100644 --- a/test/log/5103 +++ b/test/log/5103 @@ -14,4 +14,4 @@ DATA <<< DATA 354 Send it . -1999-03-02 09:44:33 10HmaX-0005vi-00 == userx@myhost.test.ex 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@myhost.test.ex R=r1 T=t1 defer (-24): transport filter process failed (127): unable to execute command diff --git a/test/scripts/0000-Basic/0497 b/test/scripts/0000-Basic/0497 index 1465afec4..8e7e54967 100644 --- a/test/scripts/0000-Basic/0497 +++ b/test/scripts/0000-Basic/0497 @@ -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@x.y +**** +dump retry +sudo rm DIR/spool/db/* +# RCPT, no pipelining # server PORT_S 220 Server ready @@ -16,4 +33,127 @@ QUIT exim -odi userx@x.y **** 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@x.y +**** +# 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@x.y +**** +# 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@x.y +**** +# 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@x.y +**** +# 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@x.y +**** +# 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@x.y +**** +# 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@x.y +**** diff --git a/test/scripts/2000-GnuTLS/2010 b/test/scripts/2000-GnuTLS/2010 index 06e259567..02c82ea79 100644 --- a/test/scripts/2000-GnuTLS/2010 +++ b/test/scripts/2000-GnuTLS/2010 @@ -7,5 +7,7 @@ Test message **** exim -qf **** +exim -DHOSTS=127.0.0.1 -qf +**** killdaemon no_msglog_check diff --git a/test/scripts/2100-OpenSSL/2110 b/test/scripts/2100-OpenSSL/2110 index fe197fabd..e8a55353a 100644 --- a/test/scripts/2100-OpenSSL/2110 +++ b/test/scripts/2100-OpenSSL/2110 @@ -6,5 +6,7 @@ Test message **** exim -qf **** +exim -DHOSTS=127.0.0.1 -qf +**** killdaemon no_msglog_check diff --git a/test/scripts/5100-lmtp-transport/5100 b/test/scripts/5100-lmtp-transport/5100 index 224943d44..36f45e1ab 100644 --- a/test/scripts/5100-lmtp-transport/5100 +++ b/test/scripts/5100-lmtp-transport/5100 @@ -36,4 +36,8 @@ exim -odi -DIGNORE_QUOTA=true jack jill script: 09 This is a test message. **** +exim -odi userx usery +script: 10 +This is a test message. +**** no_msglog_check diff --git a/test/stderr/0217 b/test/stderr/0217 index 442906ef7..30ab686c2 100644 --- a/test/stderr/0217 +++ b/test/stderr/0217 @@ -116,7 +116,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ... connected SMTP<< 403 Sorry temp data error SMTP>> QUIT LOG: MAIN - == a@test.ex 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@test.ex 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@test.ex R=client T=send_to_server: SMTP error from remote mail server after RCPT TO:: host 127.0.0.1 [127.0.0.1]: 550 NO LOG: MAIN diff --git a/test/stdout/0497 b/test/stdout/0497 index 1b0cdbcea..6755d429e 100644 --- a/test/stdout/0497 +++ b/test/stdout/0497 @@ -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:: 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:: 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 @@ EHLO myhost.test.ex 250-server id 250 OK MAIL FROM: +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: +250 OK +RCPT TO: +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: +250 OK +RCPT TO: +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: +250 OK +RCPT TO: +250 OK +DATA +352 GO AHEAD +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmbD-0005vi-00 + for userx@x.y; Tue, 2 Mar 1999 09:44:33 +0000 +Message-Id: +From: CALLER_NAME +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: +452 temporary error +RCPT TO: +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: +250 OK +RCPT TO: +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: +250 OK +RCPT TO: +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: 250 OK RCPT TO: +250 OK +DATA +352 GO AHEAD +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmbL-0005vi-00 + for userx@x.y; Tue, 2 Mar 1999 09:44:33 +0000 +Message-Id: +From: CALLER_NAME +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: +250 OK +RCPT TO: +End of script diff --git a/test/stdout/0498 b/test/stdout/0498 index d3811ad0f..f1448ba45 100644 --- a/test/stdout/0498 +++ b/test/stdout/0498 @@ -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:: 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:: host 127.0.0.1 [127.0.0.1]: 450 DELAY first failed = time last try = time2 next try = time2 + 10 ******** SERVER ******** diff --git a/test/stdout/1008 b/test/stdout/1008 index 76982ea22..e2c79135d 100644 --- a/test/stdout/1008 +++ b/test/stdout/1008 @@ -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:: 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:: 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:: host ::1 [::1]: 450 Temporary error + T:::1:::1:1224:10HmaX-0005vi-00 -45 12865 SMTP error from remote mail server after MAIL FROM:: 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:: 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:: 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:: host ::1 [::1]: 450 Temporary error +Transport: ::1 [::1]:1111 10HmaX-0005vi-00 error -45: SMTP error from remote mail server after MAIL FROM:: 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:: host ::1 [::1]: 450 Temporary error +Transport: ::1 [::1]:1111 10HmaX-0005vi-00 error -45: SMTP error from remote mail server after MAIL FROM:: 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 diff --git a/test/stdout/5100 b/test/stdout/5100 index b7255ca2e..cf3412153 100644 --- a/test/stdout/5100 +++ b/test/stdout/5100 @@ -1,5 +1,5 @@ +++++++++++++++++++++++++++ - T:jack@myhost.test.ex -1 0 LMTP error after end of data: 450 Number 2 is now delayed + T:jack@myhost.test.ex -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@myhost.test.ex -44 12800 LMTP error after RCPT TO:: 450 This one is delayed on RCPT first failed = time last try = time2 next try = time2 + 60 -- 2.25.1