Gitweb:
https://git.exim.org/exim.git/commitdiff/5e0ccec4397bd2d21cc1473681a62e7c2fb6afbe
Commit: 5e0ccec4397bd2d21cc1473681a62e7c2fb6afbe
Parent: ad64ad24d66f32af7af302b625f7a7be0ac6b988
Author: Jeremy Harris <jgh146exb@???>
AuthorDate: Thu Apr 4 15:53:53 2024 +0100
Committer: Jeremy Harris <jgh146exb@???>
CommitDate: Thu Apr 4 23:00:58 2024 +0100
Retries: rework DB keys, and fix exinext IPv6. Bug 3086
---
doc/doc-txt/ChangeLog | 5 +++++
src/src/deliver.c | 8 +++----
src/src/exim_dbutil.c | 2 +-
src/src/exinext.src | 47 +++++++++------------------------------
src/src/functions.h | 9 +++++---
src/src/retry.c | 56 ++++++++++++++++++++++++++++++++++-------------
src/src/string.c | 2 +-
src/src/structs.h | 2 +-
src/src/transports/smtp.c | 16 +++++---------
src/src/tree.c | 10 ++++-----
test/runtest | 8 +++++--
test/stderr/0388 | 12 +++++-----
test/stderr/0450 | 4 ++--
test/stderr/0476 | 2 +-
test/stderr/0512 | 12 +++++-----
test/stderr/0623 | 4 ++--
test/stderr/0909 | 4 ++--
test/stdout/0213 | 2 +-
test/stdout/0343 | 4 ++--
test/stdout/0447 | 6 ++---
test/stdout/0450 | 4 ++--
test/stdout/0474 | 4 ++--
test/stdout/0497 | 2 +-
test/stdout/0498 | 2 +-
test/stdout/0610 | 4 ++--
test/stdout/1008 | 12 ++++------
26 files changed, 123 insertions(+), 120 deletions(-)
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index 611a2ee76..65da3cead 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -140,6 +140,11 @@ JH/27 Fix crash in logging. When a message with a large number of recipients
messages were created as a result.
Find and debug help by Mateusz Krawczyk
+JH/28 Bug 3086: Fix exinext for ipv6. Change the format of keys in the retry
+ DB, wrapping transport record bare-ip "host names" and ipv6
+ "host addresses" in square-brackets. This makes the parsing that
+ exinext does more reliable.
+
Exim version 4.97
-----------------
diff --git a/src/src/deliver.c b/src/src/deliver.c
index 70f44535f..0157743a1 100644
--- a/src/src/deliver.c
+++ b/src/src/deliver.c
@@ -2039,7 +2039,7 @@ static BOOL
previously_transported(address_item *addr, BOOL testing)
{
uschar * s = string_sprintf("%s/%s",
- addr->unique + (testflag(addr, af_homonym)? 3:0), addr->transport->name);
+ addr->unique + (testflag(addr, af_homonym) ? 3:0), addr->transport->name);
if (tree_search(tree_nonrecipients, s) != 0)
{
@@ -3142,7 +3142,7 @@ while (addr_local)
if (result == DEFER || testflag(addr2, af_lt_retry_exists))
{
int flags = result == DEFER ? 0 : rf_delete;
- uschar *retry_key = string_copy(tp->retry_use_local_part
+ uschar * retry_key = string_copy(tp->retry_use_local_part
? addr2->address_retry_key : addr2->domain_retry_key);
*retry_key = 'T';
retry_add_item(addr2, retry_key, flags);
@@ -7292,7 +7292,7 @@ while (addr_new) /* Loop until all addresses dealt with */
addr->unique =
string_sprintf("%s:%s", addr->address, addr->parent->unique +
- (testflag(addr->parent, af_homonym)? 3:0));
+ (testflag(addr->parent, af_homonym) ? 3:0));
addr->address_retry_key = addr->domain_retry_key =
string_sprintf("T:%s", addr->unique);
@@ -7729,7 +7729,7 @@ while (addr_new) /* Loop until all addresses dealt with */
else if (testflag(addr, af_dr_retry_exists))
{
- uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
+ uschar * altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
sender_address);
retry_add_item(addr, altkey, rf_delete);
retry_add_item(addr, addr->address_retry_key, rf_delete);
diff --git a/src/src/exim_dbutil.c b/src/src/exim_dbutil.c
index 4d213773b..c868832b1 100644
--- a/src/src/exim_dbutil.c
+++ b/src/src/exim_dbutil.c
@@ -628,7 +628,7 @@ for (uschar * key = dbfn_scan(dbm, TRUE, &cursor);
print_time(retry->first_failed));
printf("%s ", print_time(retry->last_try));
printf("%s %s\n", print_time(retry->next_try),
- (retry->expired)? "*" : "");
+ retry->expired ? "*" : "");
break;
case type_wait:
diff --git a/src/src/exinext.src b/src/src/exinext.src
index 882ad5f60..5724812c4 100644
--- a/src/src/exinext.src
+++ b/src/src/exinext.src
@@ -195,45 +195,18 @@ perl - $exim_path "$eximmacdef" $argone $spool_directory $qualify_domain $config
$printed = 1;
if (/^\s*T:[^:\s]*:/)
{
+ # We rely on non-space-containing strings, for parsing
+
($key,$error,$error2,$text) = /^\s*T:(\S+)\s+(\S+)\s+(\S+)\s*(.*)$/;
- # Parsing the keys is a nightmare because of IPv6. The design of the
- # format for the keys is a complete shambles. All my fault (PH). But
- # I don't want to change it just for this purpose. If they key
- # contains more than 3 colons, we have an IPv6 address, because
- # an IPv6 address must contain at least two colons.
-
- # Deal with IPv4 addresses (3 colons or fewer)
-
- if ($key !~ /:([^:]*?:){3}/)
- {
- ($host,$ip,$port,$msgid) = $key =~
- /^([^:]*):([^:]*)(?::([^:]*)(?::(\S*)|)|)/;
- }
-
- # Deal with IPv6 addresses; sorting out the colons is a complete
- # mess. We should be able to find the host name and IP address from
- # further in the message. That seems the easiest escape plan here. We
- # can use those to match the rest of the key.
-
- else
- {
- ($host,$ip) = $text =~ /host\s(\S+)\s\[([^]]+)\]/;
- if (defined $host)
- {
- ($port,$msgid) = $key =~
- /^$host:$ip(?::([^:]*)(?::(\S*)|)|)/;
- }
-
- # This will probably be wrong...
-
- else
- {
- ($host,$ip) = $key =~ /([^:]*):(.*)/;
- }
- }
-
- printf("Transport: %s [%s]", $host, $ip);
+ ($host,$ip,$port,$msgid) = $key =~
+ /^([^:[]*|\[[^]]*\]) # host (could be an ip)
+ :([^:[]*|\[[^]]*\]) # ip
+ (?::(\d{1,5}))? # maybe port
+ (?::(\S{23}))? # maybe msgid
+ $/x;
+
+ printf("Transport: %s %s", $host, $ip);
print ":$port" if defined $port;
print " $msgid" if defined $msgid;
print " error $error: $text\n";
diff --git a/src/src/functions.h b/src/src/functions.h
index b2f948650..9f6396a17 100644
--- a/src/src/functions.h
+++ b/src/src/functions.h
@@ -454,11 +454,14 @@ extern BOOL regex_match_and_setup(const pcre2_code *, const uschar *, int, in
extern const pcre2_code *regex_compile(const uschar *, mcs_flags, uschar **,
pcre2_compile_context *);
extern const pcre2_code *regex_must_compile(const uschar *, mcs_flags, BOOL);
-extern void retry_add_item(address_item *, uschar *, int);
+
+extern void retry_add_item(address_item *, const uschar *, int);
extern BOOL retry_check_address(const uschar *, host_item *, uschar *, BOOL,
- uschar **, uschar **);
+ const uschar **, const uschar **);
extern retry_config *retry_find_config(const uschar *, const uschar *, int, int);
-extern BOOL retry_ultimate_address_timeout(uschar *, const uschar *,
+extern const uschar *retry_host_key_build(const host_item *, BOOL,
+ const uschar *);
+extern BOOL retry_ultimate_address_timeout(const uschar *, const uschar *,
dbdata_retry *, time_t);
extern void retry_update(address_item **, address_item **, address_item **);
extern const uschar *rewrite_address(const uschar *, BOOL, BOOL, rewrite_rule *, int);
diff --git a/src/src/retry.c b/src/src/retry.c
index 42393d424..6b977dd58 100644
--- a/src/src/retry.c
+++ b/src/src/retry.c
@@ -31,7 +31,7 @@ Returns: TRUE if the ultimate timeout has been reached
*/
BOOL
-retry_ultimate_address_timeout(uschar *retry_key, const uschar *domain,
+retry_ultimate_address_timeout(const uschar * retry_key, const uschar *domain,
dbdata_retry *retry_record, time_t now)
{
BOOL address_timeout;
@@ -75,6 +75,29 @@ return address_timeout;
+const uschar *
+retry_host_key_build(const host_item * host, BOOL incl_ip,
+ const uschar * portstring)
+{
+const uschar * s = host->name;
+gstring * g = string_is_ip_address(s, NULL)
+ ? string_fmt_append(NULL, "T:[%s]", s) /* wrap a name which is a bare ip */
+ : string_fmt_append(NULL, "T:%s", s);
+
+s = host->address;
+if (incl_ip)
+ g = Ustrchr(s, ':')
+ ? string_fmt_append(g, ":[%s]", s) /* wrap an ipv6 */
+ : string_fmt_append(g, ":%s", s);
+
+if (portstring)
+ g = string_cat(g, portstring);
+
+gstring_release_unused(g);
+return string_from_gstring(g);
+}
+
+
/*************************************************
* Set status of a host+address item *
*************************************************/
@@ -124,11 +147,12 @@ Returns: TRUE if the host has expired but is usable because
BOOL
retry_check_address(const uschar *domain, host_item *host, uschar *portstring,
- BOOL include_ip_address, uschar **retry_host_key, uschar **retry_message_key)
+ BOOL include_ip_address,
+ const uschar **retry_host_key, const uschar **retry_message_key)
{
BOOL yield = FALSE;
time_t now = time(NULL);
-uschar * host_key, * message_key;
+const uschar * host_key, * message_key;
open_db dbblock, * dbm_file;
tree_node * node;
dbdata_retry * host_retry_record, * message_retry_record;
@@ -143,14 +167,11 @@ if (host->status != hstatus_unknown) return FALSE;
host->status = hstatus_usable;
/* Generate the host key for the unusable tree and the retry database. Ensure
-host names are lower cased (that's what %S does). */
-
-host_key = include_ip_address
- ? string_sprintf("T:%S:%s%s", host->name, host->address, portstring)
- : string_sprintf("T:%S%s", host->name, portstring);
-
-/* Generate the message-specific key */
+host names are lower cased (that's what %S does).
+Generate the message-specific key too.
+Be sure to maintain lack-of-spaces in retry keys; exinext depends on it. */
+host_key = retry_host_key_build(host, include_ip_address, portstring);
message_key = string_sprintf("%s:%s", host_key, message_id);
/* Search the tree of unusable IP addresses. This is filled in when deliveries
@@ -290,7 +311,7 @@ Returns: nothing
*/
void
-retry_add_item(address_item *addr, uschar *key, int flags)
+retry_add_item(address_item * addr, const uschar * key, int flags)
{
retry_item * rti = store_get(sizeof(retry_item), GET_UNTAINTED);
host_item * host = addr->host_used;
@@ -343,11 +364,11 @@ Returns: pointer to retry rule, or NULL
*/
retry_config *
-retry_find_config(const uschar *key, const uschar *alternate, int basic_errno,
+retry_find_config(const uschar * key, const uschar * alternate, int basic_errno,
int more_errno)
{
-const uschar *colon = Ustrchr(key, ':');
-retry_config *yield;
+const uschar * colon = Ustrchr(key, ':');
+retry_config * yield;
/* If there's a colon in the key, there are two possibilities:
@@ -355,7 +376,8 @@ retry_config *yield;
hostname:ip+port
- In this case, we copy the host name.
+ In this case, we copy the host name (which could be an [ip], including
+ being an [ipv6], and we drop the []).
(2) This is a key for a pipe, file, or autoreply delivery, in the format
@@ -369,6 +391,8 @@ retry_config *yield;
if (colon)
key = isalnum(*key)
? string_copyn(key, colon-key) /* the hostname */
+ : *key == '['
+ ? string_copyn(key+1, Ustrchr(key, ']')-1-key) /* the ip */
: Ustrrchr(key, ':') + 1; /* Take from the last colon */
/* Sort out the keys */
@@ -932,3 +956,5 @@ DEBUG(D_retry) debug_printf("end of retry processing\n");
}
/* End of retry.c */
+/* vi: aw ai sw=2
+*/
diff --git a/src/src/string.c b/src/src/string.c
index cd76e1f1c..a627611af 100644
--- a/src/src/string.c
+++ b/src/src/string.c
@@ -1698,7 +1698,7 @@ while (*fp)
}
/* If a width is not specified and the precision is specified, set
- the width to the precision, or the string length if shorted. */
+ the width to the precision, or the string length if shorter. */
else if (precision >= 0)
width = precision < slen ? precision : slen;
diff --git a/src/src/structs.h b/src/src/structs.h
index b16a8a3f2..8aab54055 100644
--- a/src/src/structs.h
+++ b/src/src/structs.h
@@ -480,7 +480,7 @@ can be tried. */
typedef struct retry_item {
struct retry_item *next; /* for chaining */
- uschar *key; /* string identifying host/address/message */
+ const uschar *key; /* string identifying host/address/message */
int basic_errno; /* error code for this destination */
int more_errno; /* additional error information */
uschar *message; /* local error message */
diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c
index ed5994241..a5f99edaa 100644
--- a/src/src/transports/smtp.c
+++ b/src/src/transports/smtp.c
@@ -1306,7 +1306,7 @@ while (count-- > 0)
if (testflag(addr, af_dr_retry_exists))
{
- uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
+ uschar * altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
sender_address);
retry_add_item(addr, altkey, rf_delete);
retry_add_item(addr, addr->address_retry_key, rf_delete);
@@ -1322,7 +1322,7 @@ while (count-- > 0)
else if (errno == ETIMEDOUT)
{
- uschar *message = string_sprintf("SMTP timeout after RCPT TO:<%s>",
+ uschar * message = string_sprintf("SMTP timeout after RCPT TO:<%s>",
transport_rcpt_address(addr, sx->conn_args.tblock->rcpt_include_affixes));
set_errno_nohost(sx->first_addr, ETIMEDOUT, message, DEFER, FALSE, &sx->delivery_start);
retry_add_item(addr, addr->address_retry_key, 0);
@@ -5376,7 +5376,7 @@ retry_non_continued:
BOOL host_is_expired = FALSE, message_defer = FALSE, some_deferred = FALSE;
address_item * first_addr = NULL;
uschar * interface = NULL;
- uschar * retry_host_key = NULL, * retry_message_key = NULL;
+ const uschar * retry_host_key = NULL, * retry_message_key = NULL;
uschar * serialize_key = NULL;
/* Deal slightly better with a possible Linux kernel bug that results
@@ -5873,9 +5873,7 @@ retry_non_continued:
ob->expand_retry_include_ip_address, &incl_ip) != OK)
incl_ip = TRUE; /* error; use most-specific retry record */
- retry_host_key = incl_ip
- ? string_sprintf("T:%S:%s%s", host->name, host->address, pistring)
- : string_sprintf("T:%S%s", host->name, pistring);
+ retry_host_key = retry_host_key_build(host, incl_ip, pistring);
}
/* If a delivery of another message over an existing SMTP connection
@@ -5921,10 +5919,8 @@ retry_non_continued:
ob->expand_retry_include_ip_address, &incl_ip) != OK)
incl_ip = TRUE; /* error; use most-specific retry record */
- retry_message_key = incl_ip
- ? string_sprintf("T:%S:%s%s:%s", host->name, host->address, pistring,
- message_id)
- : string_sprintf("T:%S%s:%s", host->name, pistring, message_id);
+ retry_message_key = string_sprintf("%s:%s",
+ retry_host_key_build(host, incl_ip, pistring), message_id);
}
retry_add_item(addrlist, retry_message_key,
rf_message | rf_host | delete_flag);
diff --git a/src/src/tree.c b/src/src/tree.c
index eb54829db..2c703583e 100644
--- a/src/src/tree.c
+++ b/src/src/tree.c
@@ -65,6 +65,7 @@ if (!tree_insertnode(&tree_duplicates, node)) store_reset(rpoint);
+#ifndef COMPILE_UTILITY
/*************************************************
* Add entry to unusable addresses tree *
*************************************************/
@@ -76,12 +77,11 @@ Returns: nothing
*/
void
-tree_add_unusable(const host_item *h)
+tree_add_unusable(const host_item * h)
{
rmark rpoint = store_mark();
-tree_node *node;
-uschar s[256];
-sprintf(CS s, "T:%.200s:%s", h->name, h->address);
+tree_node * node;
+const uschar * s = retry_host_key_build(h, TRUE, NULL);
node = store_get(sizeof(tree_node) + Ustrlen(s),
is_tainted(h->name) || is_tainted(h->address) ? GET_TAINTED : GET_UNTAINTED);
Ustrcpy(node->name, s);
@@ -89,7 +89,7 @@ node->data.val = h->why;
if (h->status == hstatus_unusable_expired) node->data.val += 256;
if (!tree_insertnode(&tree_unusable, node)) store_reset(rpoint);
}
-
+#endif
/*************************************************
diff --git a/test/runtest b/test/runtest
index 98914d171..e8f1933f2 100755
--- a/test/runtest
+++ b/test/runtest
@@ -500,7 +500,10 @@ RESET_AFTER_EXTRA_LINE_READ:
s/T:(\S+)\s-22\s(\S+)\s/T:$1 -22 xxxx /;
# port numbers in dumpdb output
- s/T:([a-z.]+(:[0-9.]+)?):$parm_port_n /T:$1:PORT_N /;
+ s/T:([a-z0-9.]+(:[0-9.]+|:\[[^]]+])?):$parm_port_n /T:$1:PORT_N /;
+ s/T:([a-z0-9.[\]]+(:[0-9.]+|:\[[^]]+])?):$parm_port_s /T:$1:PORT_S /;
+ # and exinext
+ s/Transport: (?:[a-z0-9.]+|\[[^\]]+]) (?:[0-9.]+|\[[^\]]+]):\K$parm_port_s /PORT_S /;
# port numbers in stderr
s/^set_process_info: .*\]:\K$parm_port_d /PORT_D /;
@@ -821,7 +824,8 @@ RESET_AFTER_EXTRA_LINE_READ:
# This handles "connection from" and the like, when the port is given
if (!/listening for SMTP on/ && !/Connecting to/ && !/=>/ && !/->/
- && !/\*>/&& !/==/ && !/\*\*/ && !/Connection refused/ && !/in response to/)
+ && !/\*>/&& !/==/ && !/\*\*/ && !/Connection refused/ && !/in response to/
+ && !/T(?:ransport)?:/)
{
s/\[([a-z\d:]+|\d+(?:\.\d+){3})\]:(\d+)/"[".$1."]:".new_value($2,"%s",\$next_port)/ie;
}
diff --git a/test/stderr/0388 b/test/stderr/0388
index 784cc3913..92b85e558 100644
--- a/test/stderr/0388
+++ b/test/stderr/0388
@@ -132,11 +132,11 @@ Connecting to V4NET.0.0.0 [V4NET.0.0.0]:PORT_S ... V4NET.0.0.0 in hosts_try_fast
LOG: MAIN
H=V4NET.0.0.0 [V4NET.0.0.0] Network Error
set_process_info: pppp delivering 10HmaX-000000005vi-0000: just tried V4NET.0.0.0 [V4NET.0.0.0]:PORT_S for x@y: result DEFER
-added retry item for T:V4NET.0.0.0:V4NET.0.0.0:PORT_S: errno=dd more_errno=dd,A flags=2
+added retry item for T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S: errno=dd more_errno=dd,A flags=2
set_process_info: pppp delivering 10HmaX-000000005vi-0000: waiting for a remote delivery subprocess to finish
set_process_info: pppp delivering 10HmaX-000000005vi-0000 (just run smtp for x@y in subprocess)
search_tidyup called
-reading retry information for T:V4NET.0.0.0:V4NET.0.0.0:PORT_S from subprocess
+reading retry information for T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S from subprocess
added retry item
reading retry information for R:x@y from subprocess
added retry item
@@ -177,14 +177,14 @@ Writing retry data for R:x@y
list element: *
V4NET.0.0.0 in "*"? yes (matched "*")
*@V4NET.0.0.0 in "*"? yes (matched "*")
-retry for T:V4NET.0.0.0:V4NET.0.0.0:PORT_S (y) = * 0 0
- dbfn_read: key=T:V4NET.0.0.0:V4NET.0.0.0:PORT_S
+retry for T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S (y) = * 0 0
+ dbfn_read: key=T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S
failing_interval=ttt message_age=ttt
on queue longer than maximum retry
-Writing retry data for T:V4NET.0.0.0:V4NET.0.0.0:PORT_S
+Writing retry data for T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S
first failed=dddd last try=dddd next try=+0 expired=0
errno=dd more_errno=dd,A Network Error
- dbfn_write: key=T:V4NET.0.0.0:V4NET.0.0.0:PORT_S
+ dbfn_write: key=T:[V4NET.0.0.0]:V4NET.0.0.0:PORT_S
timed out: all retries expired
LOG: MAIN
** x@y: retry timeout exceeded
diff --git a/test/stderr/0450 b/test/stderr/0450
index 997954187..1364d55a2 100644
--- a/test/stderr/0450
+++ b/test/stderr/0450
@@ -21,7 +21,7 @@ delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@???)
Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
-added retry item for T:127.0.0.1:127.0.0.1:PORT_D: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D: errno=dd more_errno=dd,A flags=2
all IP addresses skipped or deferred at least one address
updating wait-t1 database
added 10HmaX-000000005vi-0000 to queue for 127.0.0.1
@@ -50,7 +50,7 @@ delivering 10HmaX-000000005vi-0000 to 127.0.0.1 [127.0.0.1] (userx@???)
Connecting to 127.0.0.1 [127.0.0.1]:PORT_D2 ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
-added retry item for T:127.0.0.1:127.0.0.1:PORT_D2: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D2: errno=dd more_errno=dd,A flags=2
all IP addresses skipped or deferred at least one address
updating wait-t1 database
already listed for 127.0.0.1
diff --git a/test/stderr/0476 b/test/stderr/0476
index 86070390d..d14e2dbd2 100644
--- a/test/stderr/0476
+++ b/test/stderr/0476
@@ -89,7 +89,7 @@ Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
set_process_info: pppp delivering 10HmaZ-000000005vi-0000: just tried 127.0.0.1 [127.0.0.1]:PORT_S for CALLER@???: result DEFER
-added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
all IP addresses skipped or deferred at least one address
updating wait-t1 database
added 10HmaZ-000000005vi-0000 to queue for 127.0.0.1
diff --git a/test/stderr/0512 b/test/stderr/0512
index 18ebdc002..7bb550c81 100644
--- a/test/stderr/0512
+++ b/test/stderr/0512
@@ -18,7 +18,7 @@ hosts_max_try limit reached with this host
Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
-added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
temporary delivery error(s) override hosts_max_try (message older than host's retry time)
Clearing TFO as not first host for message
getting address for 127.0.0.1
@@ -30,7 +30,7 @@ hosts_max_try limit reached with this host
Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
-added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
temporary delivery error(s) override hosts_max_try (message older than host's retry time)
Clearing TFO as not first host for message
getting address for 127.0.0.1
@@ -42,7 +42,7 @@ hosts_max_try limit reached with this host
Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
-added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
temporary delivery error(s) override hosts_max_try (message older than host's retry time)
Clearing TFO as not first host for message
getting address for 127.0.0.1
@@ -54,7 +54,7 @@ hosts_max_try limit reached with this host
Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
-added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
reached transport hosts_max_try limit 1
all IP addresses skipped or deferred at least one address
updating wait-t1 database
@@ -109,7 +109,7 @@ hosts_max_try limit reached with this host
Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
-added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
temporary delivery error(s) override hosts_max_try (message older than host's retry time)
Clearing TFO as not first host for message
getting address for 127.0.0.1
@@ -121,7 +121,7 @@ hosts_max_try limit reached with this host
Connecting to 127.0.0.1 [127.0.0.1]:PORT_S ... failed: Connection refused
LOG: MAIN
H=127.0.0.1 [127.0.0.1] Connection refused
-added retry item for T:127.0.0.1:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_S: errno=dd more_errno=dd,A flags=2
temporary delivery error(s) override hosts_max_try (message older than host's retry time)
reached transport hosts_max_try_hardlimit limit 2
all IP addresses skipped or deferred at least one address
diff --git a/test/stderr/0623 b/test/stderr/0623
index ce3804c13..bb517b859 100644
--- a/test/stderr/0623
+++ b/test/stderr/0623
@@ -55,7 +55,7 @@ ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
SMTP<< 221 Closing connection
SMTP(close)>>
cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:300:.:QUIT+:451:221'
-added retry item for T:127.0.0.1:127.0.0.1:PORT_D:10HmaZ-000000005vi-0000: errno=-46 more_errno=dd,A flags=6
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D:10HmaZ-000000005vi-0000: errno=-46 more_errno=dd,A flags=6
all IP addresses skipped or deferred at least one address
Leaving send_to_server transport
LOG: MAIN
@@ -187,7 +187,7 @@ ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
SMTP(closed)<<
SMTP(close)>>
cmdlog: '220:EHLO:250-:MAIL|:RCPT|:DATA:250:250:300:.:QUIT+'
-added retry item for T:127.0.0.1:127.0.0.1:PORT_D:10HmbB-000000005vi-0000: errno=-18 more_errno=dd,A flags=6
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D:10HmbB-000000005vi-0000: errno=-18 more_errno=dd,A flags=6
all IP addresses skipped or deferred at least one address
Leaving send_to_server transport
LOG: MAIN
diff --git a/test/stderr/0909 b/test/stderr/0909
index 4d744afd0..730dc2c0a 100644
--- a/test/stderr/0909
+++ b/test/stderr/0909
@@ -189,7 +189,7 @@ ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
SMTP<< 221 Closing connection
SMTP(close)>>
cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT+:QUIT+:250:250:451:221'
-added retry item for T:127.0.0.1:127.0.0.1:PORT_D:10HmaZ-000000005vi-0000: errno=-46 more_errno=dd,A flags=6
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D:10HmaZ-000000005vi-0000: errno=-46 more_errno=dd,A flags=6
all IP addresses skipped or deferred at least one address
Leaving send_to_server transport
LOG: MAIN
@@ -329,7 +329,7 @@ ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
SMTP(closed)<<
SMTP(close)>>
cmdlog: '220:EHLO:250-:MAIL|:RCPT|:BDAT+:QUIT+:250:250'
-added retry item for T:127.0.0.1:127.0.0.1:PORT_D:10HmbB-000000005vi-0000: errno=-18 more_errno=dd,A flags=6
+added retry item for T:[127.0.0.1]:127.0.0.1:PORT_D:10HmbB-000000005vi-0000: errno=-18 more_errno=dd,A flags=6
all IP addresses skipped or deferred at least one address
Leaving send_to_server transport
LOG: MAIN
diff --git a/test/stdout/0213 b/test/stdout/0213
index d3dd7cffc..4647ccbed 100644
--- a/test/stdout/0213
+++ b/test/stdout/0213
@@ -1,5 +1,5 @@
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224 -19 65 H=127.0.0.1 [127.0.0.1]: Malformed SMTP reply in response to RCPT TO:<userx@domain1>: 550 The answer is no, but I am going to make sure it is a very l
+ T:[127.0.0.1]:127.0.0.1:PORT_S -19 65 H=127.0.0.1 [127.0.0.1]: Malformed SMTP reply in response to RCPT TO:<userx@domain1>: 550 The answer is no, but I am going to make sure it is a very l
first failed = time last try = time2 next try = time2 + 3600
******** SERVER ********
diff --git a/test/stdout/0343 b/test/stdout/0343
index dbcd79079..37752fc5f 100644
--- a/test/stdout/0343
+++ b/test/stdout/0343
@@ -1,6 +1,6 @@
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1223 dd 65 Connection refused
+ T:[127.0.0.1]:127.0.0.1:1223 dd 65 Connection refused
first failed = time last try = time2 next try = time2 + 600
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1223 dd 65 Connection refused
+ T:[127.0.0.1]:127.0.0.1:1223 dd 65 Connection refused
first failed = time last try = time2 next try = time2 + 600
diff --git a/test/stdout/0447 b/test/stdout/0447
index caecaea8a..9b4f1785d 100644
--- a/test/stdout/0447
+++ b/test/stdout/0447
@@ -4,13 +4,13 @@ Retry rule: * timeout_connect F,1d,1m;
Retry rule: * timeout_A F,1d,30s;
Retry rule: * timeout_connect_A F,1d,29s;
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224 dd 321 Connection timed out
+ T:[127.0.0.1]:127.0.0.1:PORT_S dd 321 Connection timed out
first failed = time last try = time2 next try = time2 + 60
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224 dd 321 Connection timed out
+ T:[127.0.0.1]:127.0.0.1:PORT_S dd 321 Connection timed out
first failed = time last try = time2 next try = time2 + 30
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224 dd 321 Connection timed out
+ T:[127.0.0.1]:127.0.0.1:PORT_S dd 321 Connection timed out
first failed = time last try = time2 next try = time2 + 30
+++++++++++++++++++++++++++
R:xx.test.again.dns -1 0 host lookup did not complete
diff --git a/test/stdout/0450 b/test/stdout/0450
index 2da7c051e..640292415 100644
--- a/test/stdout/0450
+++ b/test/stdout/0450
@@ -1,5 +1,5 @@
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1225 dd 65 Connection refused
+ T:[127.0.0.1]:127.0.0.1:1225 dd 65 Connection refused
first failed = time last try = time2 next try = time2 + 600
- T:127.0.0.1:127.0.0.1:1226 dd 65 Connection refused
+ T:[127.0.0.1]:127.0.0.1:1226 dd 65 Connection refused
first failed = time last try = time2 next try = time2 + 600
diff --git a/test/stdout/0474 b/test/stdout/0474
index b4ae3cce2..4491500a7 100644
--- a/test/stdout/0474
+++ b/test/stdout/0474
@@ -1,8 +1,8 @@
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 850 NONSENSE
+ T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 850 NONSENSE
first failed = time last try = time2 next try = time2 + 10
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 850 RUBBISH
+ T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 850 RUBBISH
first failed = time last try = time2 next try = time2 + 10
+++++++++++++++++++++++++++
R:abcd@xyz:<CALLER@???> -44 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<abcd@xyz>: 850 RUBBISH
diff --git a/test/stdout/0497 b/test/stdout/0497
index ac02261ac..acba7c8db 100644
--- a/test/stdout/0497
+++ b/test/stdout/0497
@@ -1,5 +1,5 @@
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 13377 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 452 temporary error
+ T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 13377 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 452 temporary error
first failed = time last try = time2 next try = time2 + 0 *
+++++++++++++++++++++++++++
R:userx@???:<CALLER@???> -44 13377 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<userx@???>: 452 temporary error
diff --git a/test/stdout/0498 b/test/stdout/0498
index 727e2a2fb..635730dc9 100644
--- a/test/stdout/0498
+++ b/test/stdout/0498
@@ -1,5 +1,5 @@
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 450 DELAY
+ T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 450 DELAY
first failed = time last try = time2 next try = time2 + 10
******** SERVER ********
diff --git a/test/stdout/0610 b/test/stdout/0610
index 48ce1dee0..5fc87bef2 100644
--- a/test/stdout/0610
+++ b/test/stdout/0610
@@ -11,9 +11,9 @@
250 OK id=10HmaY-000000005vi-0000
221 the.local.host.name closing connection
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1225/127.0.0.1 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after initial connection: 451 Temporary local problem - please try later
+ T:[127.0.0.1]:127.0.0.1:1225/127.0.0.1 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after initial connection: 451 Temporary local problem - please try later
first failed = time last try = time2 next try = time2 + 2
- T:127.0.0.1:127.0.0.1:1225/ip4.ip4.ip4.ip4 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after initial connection: 451 Temporary local problem - please try later
+ T:[127.0.0.1]:127.0.0.1:1225/ip4.ip4.ip4.ip4 0 65 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after initial connection: 451 Temporary local problem - please try later
first failed = time last try = time2 next try = time2 + 2
+++++++++++++++++++++++++++
+++++++++++++++++++++++++++
diff --git a/test/stdout/1008 b/test/stdout/1008
index 0fb622a03..42485be93 100644
--- a/test/stdout/1008
+++ b/test/stdout/1008
@@ -1,18 +1,14 @@
+++++++++++++++++++++++++++
- T:127.0.0.1:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 450 Temporary error
+ T:[127.0.0.1]:127.0.0.1:1224:10HmaX-000000005vi-0000 -45 12865 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 450 Temporary error
first failed = time last try = time2 next try = time2 + 7200
- T:::1:::1:1224:10HmaX-000000005vi-0000 -45 12865 H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 450 Temporary error
+ T:[::1]:[::1]:1224:10HmaX-000000005vi-0000 -45 12865 H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 450 Temporary error
first failed = time last try = time2 next try = time2 + 7200
-Transport: 127.0.0.1 [127.0.0.1]:1111 10HmaX-000000005vi-0000 error -45: H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 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:1224:10HmaX-000000005vi-0000]:1224 10HmaX-000000005vi-0000 error -45: H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 450 Temporary error
+Transport: [127.0.0.1] 127.0.0.1:PORT_S 10HmaX-000000005vi-0000 error -45: H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 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:1224:10HmaX-000000005vi-0000] error -45: H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 450 Temporary error
+Transport: [::1] [::1]:PORT_S 10HmaX-000000005vi-0000 error -45: H=::1 [::1]: SMTP error from remote mail server after MAIL FROM:<CALLER@???>: 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
--
## subscription configuration (requires account):
##
https://lists.exim.org/mailman3/postorius/lists/exim-cvs.lists.exim.org/
## unsubscribe (doesn't require an account):
## exim-cvs-unsubscribe@???
## Exim details at
http://www.exim.org/
## Please use the Wiki with this list -
http://wiki.exim.org/