Gitweb:
https://git.exim.org/exim.git/commitdiff/0e4b2a6e28fec7514397d4341c6c4e4190523e2c
Commit: 0e4b2a6e28fec7514397d4341c6c4e4190523e2c
Parent: 7482553d06b156505e38b4cb1b72324bcfb62b37
Author: Jeremy Harris <jgh146exb@???>
AuthorDate: Fri Jul 26 13:03:27 2024 +0100
Committer: Jeremy Harris <jgh146exb@???>
CommitDate: Fri Jul 26 19:07:52 2024 +0100
Debug: expansion conditions, hints deletes, retry deletes
---
src/src/dbfn.c | 7 +-
src/src/expand.c | 106 +++++++++--------
src/src/retry.c | 4 +-
test/stderr/0002 | 227 +++++++++++++++++++------------------
test/stderr/0092 | 21 ++--
test/stderr/0169 | 2 +-
test/stderr/0357 | 12 +-
test/stderr/0358 | 12 +-
test/stderr/0402 | 10 ++
test/stderr/0499 | 32 +++---
test/stderr/0544 | 115 ++++++++++---------
test/stderr/0554 | 10 +-
test/stderr/0632 | 210 +++++++++++++++++++---------------
test/stderr/3400 | 6 +-
test/stderr/5410 | 340 +++++++++++++++++++++++++++++++------------------------
test/stderr/5420 | 340 +++++++++++++++++++++++++++++++------------------------
16 files changed, 800 insertions(+), 654 deletions(-)
diff --git a/src/src/dbfn.c b/src/src/dbfn.c
index 1044611cc..b9eef503f 100644
--- a/src/src/dbfn.c
+++ b/src/src/dbfn.c
@@ -538,7 +538,7 @@ Returns: the yield of the underlying dbm or db "delete" function.
int
dbfn_delete(open_db *dbblock, const uschar *key)
{
-int klen = Ustrlen(key) + 1;
+int klen = Ustrlen(key) + 1, rc;
uschar * key_copy = store_get(klen, key);
EXIM_DATUM key_datum;
@@ -548,7 +548,10 @@ memcpy(key_copy, key, klen);
exim_datum_init(&key_datum); /* Some DBM libraries require clearing */
exim_datum_data_set(&key_datum, key_copy);
exim_datum_size_set(&key_datum, klen);
-return exim_dbdel(dbblock->dbptr, &key_datum);
+rc = exim_dbdel(dbblock->dbptr, &key_datum);
+DEBUG(D_hints_lookup) if (rc != EXIM_DBPUTB_OK)
+ debug_printf_indent(" exim_dbdel: fail\n");
+return rc;
}
diff --git a/src/src/expand.c b/src/src/expand.c
index ca9c7c3ac..cc8b12224 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -2487,6 +2487,7 @@ if (!name[0])
"but found \"%.16s\"", s);
return -1;
}
+DEBUG(D_expand) debug_printf_indent("cond: %s\n", name);
if (opname)
*opname = string_copy(name);
@@ -2639,19 +2640,18 @@ Returns: a pointer to the first character after the condition, or
static const uschar *
eval_condition(const uschar * s, BOOL * resetok, BOOL * yield)
{
-BOOL testfor = TRUE;
-BOOL tempcond, combined_cond;
+BOOL testfor = TRUE, tempcond, combined_cond;
BOOL * subcondptr;
-BOOL sub2_honour_dollar = TRUE;
-BOOL is_forany, is_json, is_jsons;
+BOOL sub2_honour_dollar = TRUE, is_forany, is_json, is_jsons;
int rc, cond_type;
int_eximarith_t num[2];
struct stat statbuf;
uschar * opname;
uschar name[256];
-const uschar * sub[10];
+const uschar * sub[10], * next;
unsigned sub_textonly = 0;
+expand_level++;
for (;;)
if (Uskip_whitespace(&s) == '!') { testfor = !testfor; s++; } else break;
@@ -2667,7 +2667,7 @@ switch(cond_type = identify_operator(&s, &opname))
if (*s != ':')
{
expand_string_message = US"\":\" expected after \"def\"";
- return NULL;
+ goto failout;
}
s = read_name(name, sizeof(name), s+1, US"_");
@@ -2701,12 +2701,12 @@ switch(cond_type = identify_operator(&s, &opname))
? string_sprintf("unknown variable \"%s\" after \"def:\"", name)
: US"variable name omitted after \"def:\"";
check_variable_error_message(name);
- return NULL;
+ goto failout;
}
if (yield) *yield = (t[0] != 0) == testfor;
}
- return s;
+ next = s; goto out;
}
@@ -2714,14 +2714,14 @@ switch(cond_type = identify_operator(&s, &opname))
case ECOND_FIRST_DELIVERY:
if (yield) *yield = f.deliver_firsttime == testfor;
- return s;
+ next = s; goto out;
/* queue_running tests for any process started by a queue runner */
case ECOND_QUEUE_RUNNING:
if (yield) *yield = (queue_run_pid != (pid_t)0) == testfor;
- return s;
+ next = s; goto out;
/* exists: tests for file existence
@@ -2750,13 +2750,13 @@ switch(cond_type = identify_operator(&s, &opname))
sub[0] = expand_string_internal(s+1,
ESI_BRACE_ENDS | ESI_HONOR_DOLLAR | (yield ? ESI_NOFLAGS : ESI_SKIPPING),
&s, resetok, &textonly);
- if (!sub[0]) return NULL;
+ if (!sub[0]) goto failout;
if (textonly) sub_textonly |= BIT(0);
}
/* {-for-text-editors */
if (*s++ != '}') goto COND_FAILED_CURLY_END;
- if (!yield) return s; /* No need to run the test if skipping */
+ if (!yield) { next = s; goto out; } /* No need to run the test if skipping */
switch(cond_type)
{
@@ -2764,7 +2764,7 @@ switch(cond_type = identify_operator(&s, &opname))
if ((expand_forbid & RDO_EXISTS) != 0)
{
expand_string_message = US"File existence tests are not permitted";
- return NULL;
+ goto failout;
}
*yield = (Ustat(sub[0], &statbuf) == 0) == testfor;
break;
@@ -2830,11 +2830,11 @@ switch(cond_type = identify_operator(&s, &opname))
#if defined(SUPPORT_PAM) || defined(RADIUS_CONFIG_FILE) || \
defined(LOOKUP_LDAP) || defined(CYRUS_PWCHECK_SOCKET)
END_AUTH:
- if (rc == ERROR || rc == DEFER) return NULL;
+ if (rc == ERROR || rc == DEFER) goto failout;
*yield = (rc == OK) == testfor;
#endif
}
- return s;
+ next = s; goto out;
/* call ACL (in a conditional context). Accept true, deny false.
@@ -2863,7 +2863,7 @@ switch(cond_type = identify_operator(&s, &opname))
case 1: expand_string_message = US"too few arguments or bracketing "
"error for acl";
case 2:
- case 3: return NULL;
+ case 3: goto failout;
}
if (yield)
@@ -2887,10 +2887,10 @@ switch(cond_type = identify_operator(&s, &opname))
default:
expand_string_message = string_sprintf("%s from acl \"%s\"",
rc_names[rc], sub[0]);
- return NULL;
+ goto failout;
}
}
- return s;
+ next = s; goto out;
}
@@ -2915,17 +2915,17 @@ switch(cond_type = identify_operator(&s, &opname))
case 1: expand_string_message = US"too few arguments or bracketing "
"error for saslauthd";
case 2:
- case 3: return NULL;
+ case 3: goto failout;
}
if (!sub[2]) sub[3] = NULL; /* realm if no service */
if (yield)
{
int rc = auth_call_saslauthd(sub[0], sub[1], sub[2], sub[3],
&expand_string_message);
- if (rc == ERROR || rc == DEFER) return NULL;
+ if (rc == ERROR || rc == DEFER) goto failout;
*yield = (rc == OK) == testfor;
}
- return s;
+ next = s; goto out;
}
#endif /* CYRUS_SASLAUTHD_SOCKET */
@@ -2994,10 +2994,10 @@ switch(cond_type = identify_operator(&s, &opname))
if (i == 0) goto COND_FAILED_CURLY_START;
expand_string_message = string_sprintf("missing 2nd string in {} "
"after \"%s\"", opname);
- return NULL;
+ goto failout;
}
if (!(sub[i] = expand_string_internal(s+1, flags, &s, resetok, &textonly)))
- return NULL;
+ goto failout;
if (textonly) sub_textonly |= BIT(i);
DEBUG(D_expand) if (i == 1 && !sub2_honour_dollar && Ustrchr(sub[1], '$'))
debug_printf_indent("WARNING: the second arg is NOT expanded,"
@@ -3018,13 +3018,13 @@ switch(cond_type = identify_operator(&s, &opname))
else
{
num[i] = expanded_string_integer(sub[i], FALSE);
- if (expand_string_message) return NULL;
+ if (expand_string_message) goto failout;
}
}
/* Result not required */
- if (!yield) return s;
+ if (!yield) { next = s; goto out; }
/* Do an appropriate comparison */
@@ -3082,7 +3082,7 @@ switch(cond_type = identify_operator(&s, &opname))
sub_textonly & BIT(1) ? MCS_CACHEABLE : MCS_NOFLAGS,
&expand_string_message, pcre_gen_cmp_ctx);
if (!re)
- return NULL;
+ goto failout;
tempcond = regex_match_and_setup(re, sub[0], 0, -1);
break;
@@ -3103,7 +3103,7 @@ switch(cond_type = identify_operator(&s, &opname))
{
expand_string_message = string_sprintf("\"%s\" is not an IP address",
sub[0]);
- return NULL;
+ goto failout;
}
else
{
@@ -3147,7 +3147,7 @@ switch(cond_type = identify_operator(&s, &opname))
case DEFER:
expand_string_message = string_sprintf("unable to complete match "
"against \"%s\": %s", sub[1], search_error_message);
- return NULL;
+ goto failout;
}
break;
@@ -3256,7 +3256,7 @@ switch(cond_type = identify_operator(&s, &opname))
{
expand_string_message = string_sprintf("unknown encryption mechanism "
"in \"%s\"", sub[1]);
- return NULL;
+ goto failout;
}
switch(which)
@@ -3287,7 +3287,7 @@ switch(cond_type = identify_operator(&s, &opname))
{
expand_string_message = string_sprintf("crypt error: %s\n",
US strerror(errno));
- return NULL;
+ goto failout;
}
}
break;
@@ -3323,7 +3323,7 @@ switch(cond_type = identify_operator(&s, &opname))
} /* Switch for comparison conditions */
*yield = tempcond == testfor;
- return s; /* End of comparison conditions */
+ next = s; goto out; /* End of comparison conditions */
/* and/or: computes logical and/or of several conditions */
@@ -3344,14 +3344,14 @@ switch(cond_type = identify_operator(&s, &opname))
{
expand_string_message = string_sprintf("each subcondition "
"inside an \"%s{...}\" condition must be in its own {}", opname);
- return NULL;
+ goto failout;
}
if (!(s = eval_condition(s+1, resetok, subcondptr)))
{
expand_string_message = string_sprintf("%s inside \"%s{...}\" condition",
expand_string_message, opname);
- return NULL;
+ goto failout;
}
Uskip_whitespace(&s);
@@ -3361,7 +3361,7 @@ switch(cond_type = identify_operator(&s, &opname))
/* {-for-text-editors */
expand_string_message = string_sprintf("missing } at end of condition "
"inside \"%s\" group", opname);
- return NULL;
+ goto failout;
}
if (yield)
@@ -3378,7 +3378,7 @@ switch(cond_type = identify_operator(&s, &opname))
}
if (yield) *yield = (combined_cond == testfor);
- return ++s;
+ next = ++s; goto out;
/* forall/forany: iterates a condition with different values */
@@ -3403,7 +3403,7 @@ switch(cond_type = identify_operator(&s, &opname))
if (!(sub[0] = expand_string_internal(s,
ESI_BRACE_ENDS | ESI_HONOR_DOLLAR | (yield ? ESI_NOFLAGS : ESI_SKIPPING),
&s, resetok, NULL)))
- return NULL;
+ goto failout;
/* {-for-text-editors */
if (*s++ != '}') goto COND_FAILED_CURLY_END;
@@ -3420,7 +3420,7 @@ switch(cond_type = identify_operator(&s, &opname))
{
expand_string_message = string_sprintf("%s inside \"%s\" condition",
expand_string_message, opname);
- return NULL;
+ goto failout;
}
Uskip_whitespace(&s);
@@ -3430,7 +3430,7 @@ switch(cond_type = identify_operator(&s, &opname))
/* {-for-text-editors */
expand_string_message = string_sprintf("missing } at end of condition "
"inside \"%s\"", opname);
- return NULL;
+ goto failout;
}
if (yield) *yield = !testfor;
@@ -3446,7 +3446,7 @@ switch(cond_type = identify_operator(&s, &opname))
string_sprintf("%s wrapping string result for extract jsons",
expand_string_message);
iterate_item = save_iterate_item;
- return NULL;
+ goto failout;
}
DEBUG(D_expand) debug_printf_indent("%s: $item = \"%s\"\n", opname, iterate_item);
@@ -3455,7 +3455,7 @@ switch(cond_type = identify_operator(&s, &opname))
expand_string_message = string_sprintf("%s inside \"%s\" condition",
expand_string_message, opname);
iterate_item = save_iterate_item;
- return NULL;
+ goto failout;
}
DEBUG(D_expand) debug_printf_indent("%s: condition evaluated to %s\n", opname,
tempcond? "true":"false");
@@ -3465,7 +3465,7 @@ switch(cond_type = identify_operator(&s, &opname))
}
iterate_item = save_iterate_item;
- return s;
+ next = s; goto out;
}
@@ -3498,7 +3498,7 @@ switch(cond_type = identify_operator(&s, &opname))
ourname);
/*FALLTHROUGH*/
case 2:
- case 3: return NULL;
+ case 3: goto failout;
}
t = sub_arg[0];
Uskip_whitespace(&t);
@@ -3539,12 +3539,12 @@ switch(cond_type = identify_operator(&s, &opname))
{
expand_string_message = string_sprintf("unrecognised boolean "
"value \"%s\"", t);
- return NULL;
+ goto failout;
}
DEBUG(D_expand) debug_printf_indent("%s: condition evaluated to %s\n", ourname,
boolvalue? "true":"false");
if (yield) *yield = (boolvalue == testfor);
- return s;
+ next = s; goto out;
}
#ifdef SUPPORT_SRS
@@ -3565,7 +3565,7 @@ switch(cond_type = identify_operator(&s, &opname))
case 1: expand_string_message = US"too few arguments or bracketing "
"error for inbound_srs";
case 2:
- case 3: return NULL;
+ case 3: goto failout;
}
/* Match the given local_part against the SRS-encoded pattern */
@@ -3650,7 +3650,7 @@ switch(cond_type = identify_operator(&s, &opname))
srs_result:
/* pcre2_match_data_free(md); gen ctx needs no free */
if (yield) *yield = (boolvalue == testfor);
- return s;
+ next = s; goto out;
}
#endif /*SUPPORT_SRS*/
@@ -3659,19 +3659,19 @@ srs_result:
default:
if (!expand_string_message || !*expand_string_message)
expand_string_message = string_sprintf("unknown condition \"%s\"", opname);
- return NULL;
+ goto failout;
} /* End switch on condition type */
/* Missing braces at start and end of data */
COND_FAILED_CURLY_START:
expand_string_message = string_sprintf("missing { after \"%s\"", opname);
-return NULL;
+goto failout;
COND_FAILED_CURLY_END:
expand_string_message = string_sprintf("missing } at end of \"%s\" condition",
opname);
-return NULL;
+goto failout;
/* A condition requires code that is not compiled */
@@ -3681,8 +3681,14 @@ return NULL;
COND_FAILED_NOT_COMPILED:
expand_string_message = string_sprintf("support for \"%s\" not compiled",
opname);
-return NULL;
+goto failout;
#endif
+
+failout:
+ next = NULL;
+out:
+ expand_level--;
+ return next;
}
diff --git a/src/src/retry.c b/src/src/retry.c
index c32bd85b7..6e4a3459d 100644
--- a/src/src/retry.c
+++ b/src/src/retry.c
@@ -351,7 +351,9 @@ rti->flags = flags;
DEBUG(D_transport|D_retry)
{
int letter = rti->more_errno & 255;
- debug_printf("added retry item for %s: errno=%d more_errno=", rti->key,
+ debug_printf("added retry %sitem for %s: errno=%d more_errno=",
+ flags & rf_delete ? "delete-" : "",
+ rti->key,
rti->basic_errno);
if (letter == 'A' || letter == 'M')
debug_printf("%d,%c", (rti->more_errno >> 8) & 255, letter);
diff --git a/test/stderr/0002 b/test/stderr/0002
index 2b8eed427..0632de146 100644
--- a/test/stderr/0002
+++ b/test/stderr/0002
@@ -25,19 +25,20 @@ try option unknown_login
╭considering: match:░░${if░match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
├───────text: match:░░
├considering: ${if░match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- ╭considering: abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- ├───────text: abcd
- ├considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- ├───expanded: abcd
- ╰─────result: abcd
- ╭considering: \N^([ab]+)(\w+)$\N}{$2$1}fail}
- ├──protected: ^([ab]+)(\w+)$
- ├considering: }{$2$1}fail}
- ├───expanded: \N^([ab]+)(\w+)$\N
- ╰─────result: ^([ab]+)(\w+)$
- compiled RE '^([ab]+)(\w+)$' not found in local cache
- compiling RE '^([ab]+)(\w+)$'
- compiled RE '^([ab]+)(\w+)$' saved in local cache
+ cond: match
+ ╭considering: abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
+ ├───────text: abcd
+ ├considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail}
+ ├───expanded: abcd
+ ╰─────result: abcd
+ ╭considering: \N^([ab]+)(\w+)$\N}{$2$1}fail}
+ ├──protected: ^([ab]+)(\w+)$
+ ├considering: }{$2$1}fail}
+ ├───expanded: \N^([ab]+)(\w+)$\N
+ ╰─────result: ^([ab]+)(\w+)$
+ compiled RE '^([ab]+)(\w+)$' not found in local cache
+ compiling RE '^([ab]+)(\w+)$'
+ compiled RE '^([ab]+)(\w+)$' saved in local cache
├──condition: match{abcd}{\N^([ab]+)(\w+)$\N}
├─────result: true
╭considering: $2$1}fail}
@@ -53,17 +54,18 @@ try option unknown_login
╭considering: match:░░${if░match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
├───────text: match:░░
├considering: ${if░match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- ╭considering: wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- ├───────text: wxyz
- ├considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- ├───expanded: wxyz
- ╰─────result: wxyz
- ╭considering: \N^([ab]+)(\w+)$\N}{$2$1}fail}
- ├──protected: ^([ab]+)(\w+)$
- ├considering: }{$2$1}fail}
- ├───expanded: \N^([ab]+)(\w+)$\N
- ╰─────result: ^([ab]+)(\w+)$
- compiled RE '^([ab]+)(\w+)$' found in local cache
+ cond: match
+ ╭considering: wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
+ ├───────text: wxyz
+ ├considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail}
+ ├───expanded: wxyz
+ ╰─────result: wxyz
+ ╭considering: \N^([ab]+)(\w+)$\N}{$2$1}fail}
+ ├──protected: ^([ab]+)(\w+)$
+ ├considering: }{$2$1}fail}
+ ├───expanded: \N^([ab]+)(\w+)$\N
+ ╰─────result: ^([ab]+)(\w+)$
+ compiled RE '^([ab]+)(\w+)$' found in local cache
├──condition: match{wxyz}{\N^([ab]+)(\w+)$\N}
├─────result: false
╭───scanning: $2$1}fail}
@@ -76,16 +78,17 @@ try option unknown_login
├───error message: "if" failed and "fail" requested
╰failure was forced
╭considering: ${if░eq░{1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
- ╭considering: 1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
- ├───────text: 1
- ├considering: }{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
- ├───expanded: 1
- ╰─────result: 1
- ╭considering: 1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
- ├───────text: 1
- ├considering: }{yes}{${lookup{xx}lsearch{/non/exist}}}}
- ├───expanded: 1
- ╰─────result: 1
+ cond: eq
+ ╭considering: 1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
+ ├───────text: 1
+ ├considering: }{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
+ ├───expanded: 1
+ ╰─────result: 1
+ ╭considering: 1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
+ ├───────text: 1
+ ├considering: }{yes}{${lookup{xx}lsearch{/non/exist}}}}
+ ├───expanded: 1
+ ╰─────result: 1
├──condition: eq░{1}{1}
├─────result: true
╭considering: yes}{${lookup{xx}lsearch{/non/exist}}}}
@@ -115,19 +118,20 @@ try option unknown_login
╭considering: match_address:░░░${if░match_address{a.b.c}{a.b.c}{yes}{no}}
├───────text: match_address:░░░
├considering: ${if░match_address{a.b.c}{a.b.c}{yes}{no}}
- ╭considering: a.b.c}{a.b.c}{yes}{no}}
- ├───────text: a.b.c
- ├considering: }{a.b.c}{yes}{no}}
- ├───expanded: a.b.c
- ╰─────result: a.b.c
- ╭considering: a.b.c}{yes}{no}}
- ├───────text: a.b.c
- ├considering: }{yes}{no}}
- ├───expanded: a.b.c
- ╰─────result: a.b.c
+ cond: match_address
+ ╭considering: a.b.c}{a.b.c}{yes}{no}}
+ ├───────text: a.b.c
+ ├considering: }{a.b.c}{yes}{no}}
+ ├───expanded: a.b.c
+ ╰─────result: a.b.c
+ ╭considering: a.b.c}{yes}{no}}
+ ├───────text: a.b.c
+ ├considering: }{yes}{no}}
+ ├───expanded: a.b.c
+ ╰─────result: a.b.c
LOG: MAIN PANIC
no @ found in the subject of an address list match: subject="a.b.c" pattern="a.b.c"
- a.b.c in "a.b.c"? no (end of list)
+ a.b.c in "a.b.c"? no (end of list)
├──condition: match_address{a.b.c}{a.b.c}
├─────result: false
╭───scanning: yes}{no}}
@@ -179,19 +183,20 @@ try option unknown_login
/considering: match: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
|-------text: match:
|considering: ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- /considering: abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- |-------text: abcd
- |considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- |---expanded: abcd
- \_____result: abcd
- /considering: \N^([ab]+)(\w+)$\N}{$2$1}fail}
- |--protected: ^([ab]+)(\w+)$
- |considering: }{$2$1}fail}
- |---expanded: \N^([ab]+)(\w+)$\N
- \_____result: ^([ab]+)(\w+)$
- compiled RE '^([ab]+)(\w+)$' not found in local cache
- compiling RE '^([ab]+)(\w+)$'
- compiled RE '^([ab]+)(\w+)$' saved in local cache
+ cond: match
+ /considering: abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
+ |-------text: abcd
+ |considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail}
+ |---expanded: abcd
+ \_____result: abcd
+ /considering: \N^([ab]+)(\w+)$\N}{$2$1}fail}
+ |--protected: ^([ab]+)(\w+)$
+ |considering: }{$2$1}fail}
+ |---expanded: \N^([ab]+)(\w+)$\N
+ \_____result: ^([ab]+)(\w+)$
+ compiled RE '^([ab]+)(\w+)$' not found in local cache
+ compiling RE '^([ab]+)(\w+)$'
+ compiled RE '^([ab]+)(\w+)$' saved in local cache
|--condition: match{abcd}{\N^([ab]+)(\w+)$\N}
|-----result: true
/considering: $2$1}fail}
@@ -207,17 +212,18 @@ try option unknown_login
/considering: match: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
|-------text: match:
|considering: ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- /considering: wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- |-------text: wxyz
- |considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail}
- |---expanded: wxyz
- \_____result: wxyz
- /considering: \N^([ab]+)(\w+)$\N}{$2$1}fail}
- |--protected: ^([ab]+)(\w+)$
- |considering: }{$2$1}fail}
- |---expanded: \N^([ab]+)(\w+)$\N
- \_____result: ^([ab]+)(\w+)$
- compiled RE '^([ab]+)(\w+)$' found in local cache
+ cond: match
+ /considering: wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
+ |-------text: wxyz
+ |considering: }{\N^([ab]+)(\w+)$\N}{$2$1}fail}
+ |---expanded: wxyz
+ \_____result: wxyz
+ /considering: \N^([ab]+)(\w+)$\N}{$2$1}fail}
+ |--protected: ^([ab]+)(\w+)$
+ |considering: }{$2$1}fail}
+ |---expanded: \N^([ab]+)(\w+)$\N
+ \_____result: ^([ab]+)(\w+)$
+ compiled RE '^([ab]+)(\w+)$' found in local cache
|--condition: match{wxyz}{\N^([ab]+)(\w+)$\N}
|-----result: false
/---scanning: $2$1}fail}
@@ -230,16 +236,17 @@ try option unknown_login
|---error message: "if" failed and "fail" requested
\failure was forced
/considering: ${if eq {1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
- /considering: 1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
- |-------text: 1
- |considering: }{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
- |---expanded: 1
- \_____result: 1
- /considering: 1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
- |-------text: 1
- |considering: }{yes}{${lookup{xx}lsearch{/non/exist}}}}
- |---expanded: 1
- \_____result: 1
+ cond: eq
+ /considering: 1}{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
+ |-------text: 1
+ |considering: }{1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
+ |---expanded: 1
+ \_____result: 1
+ /considering: 1}{yes}{${lookup{xx}lsearch{/non/exist}}}}
+ |-------text: 1
+ |considering: }{yes}{${lookup{xx}lsearch{/non/exist}}}}
+ |---expanded: 1
+ \_____result: 1
|--condition: eq {1}{1}
|-----result: true
/considering: yes}{${lookup{xx}lsearch{/non/exist}}}}
@@ -269,19 +276,20 @@ try option unknown_login
/considering: match_address: ${if match_address{a.b.c}{a.b.c}{yes}{no}}
|-------text: match_address:
|considering: ${if match_address{a.b.c}{a.b.c}{yes}{no}}
- /considering: a.b.c}{a.b.c}{yes}{no}}
- |-------text: a.b.c
- |considering: }{a.b.c}{yes}{no}}
- |---expanded: a.b.c
- \_____result: a.b.c
- /considering: a.b.c}{yes}{no}}
- |-------text: a.b.c
- |considering: }{yes}{no}}
- |---expanded: a.b.c
- \_____result: a.b.c
+ cond: match_address
+ /considering: a.b.c}{a.b.c}{yes}{no}}
+ |-------text: a.b.c
+ |considering: }{a.b.c}{yes}{no}}
+ |---expanded: a.b.c
+ \_____result: a.b.c
+ /considering: a.b.c}{yes}{no}}
+ |-------text: a.b.c
+ |considering: }{yes}{no}}
+ |---expanded: a.b.c
+ \_____result: a.b.c
LOG: MAIN PANIC
no @ found in the subject of an address list match: subject="a.b.c" pattern="a.b.c"
- a.b.c in "a.b.c"? no (end of list)
+ a.b.c in "a.b.c"? no (end of list)
|--condition: match_address{a.b.c}{a.b.c}
|-----result: false
/---scanning: yes}{no}}
@@ -467,16 +475,17 @@ try option unknown_login
╭considering: ---->░No░lookup░yet:░${if░eq{black}{white}{$sender_host_name}{No}}
├───────text: ---->░No░lookup░yet:░
├considering: ${if░eq{black}{white}{$sender_host_name}{No}}
- ╭considering: black}{white}{$sender_host_name}{No}}
- ├───────text: black
- ├considering: }{white}{$sender_host_name}{No}}
- ├───expanded: black
- ╰─────result: black
- ╭considering: white}{$sender_host_name}{No}}
- ├───────text: white
- ├considering: }{$sender_host_name}{No}}
- ├───expanded: white
- ╰─────result: white
+ cond: eq
+ ╭considering: black}{white}{$sender_host_name}{No}}
+ ├───────text: black
+ ├considering: }{white}{$sender_host_name}{No}}
+ ├───expanded: black
+ ╰─────result: black
+ ╭considering: white}{$sender_host_name}{No}}
+ ├───────text: white
+ ├considering: }{$sender_host_name}{No}}
+ ├───expanded: white
+ ╰─────result: white
├──condition: eq{black}{white}
├─────result: false
╭───scanning: $sender_host_name}{No}}
@@ -797,14 +806,14 @@ admin user
dropping to exim gid; retaining priv uid
originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
sender address = CALLER@???
- 1.2.3.4 in "1.2.3"?
- list element: 1.2.3
- 1.2.3.4 in "1.2.3"? no (malformed IPv4 address or address mask: 1.2.3)
- 1.2.3.4 in "1.2.3.4/abc"?
- list element: 1.2.3.4/abc
- 1.2.3.4 in "1.2.3.4/abc"? no (malformed IPv4 address or address mask: 1.2.3.4)
- ::1 in "<; aaaa:bbbb"?
- ╎list element: aaaa:bbbb
- ╎::1 in "<; aaaa:bbbb"? no (malformed IPv6 address or address mask: aaaa:bbbb)
+ 1.2.3.4 in "1.2.3"?
+ list element: 1.2.3
+ 1.2.3.4 in "1.2.3"? no (malformed IPv4 address or address mask: 1.2.3)
+ 1.2.3.4 in "1.2.3.4/abc"?
+ ╎list element: 1.2.3.4/abc
+ ╎1.2.3.4 in "1.2.3.4/abc"? no (malformed IPv4 address or address mask: 1.2.3.4)
+ ╎::1 in "<; aaaa:bbbb"?
+ ╎ list element: aaaa:bbbb
+ ╎ ::1 in "<; aaaa:bbbb"? no (malformed IPv6 address or address mask: aaaa:bbbb)
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
diff --git a/test/stderr/0092 b/test/stderr/0092
index 04e219a0e..ef51388cd 100644
--- a/test/stderr/0092
+++ b/test/stderr/0092
@@ -73,16 +73,17 @@ try option message_size_limit
host in host_lookup? no (option unset)
set_process_info: pppp handling incoming connection from [V4NET.0.0.1]
╭considering: ${if░eq░{V4NET.0.0.1}░{$sender_host_address}░{2}░{30}}s
- ╭considering: V4NET.0.0.1}░{$sender_host_address}░{2}░{30}}s
- ├───────text: V4NET.0.0.1
- ├considering: }░{$sender_host_address}░{2}░{30}}s
- ├───expanded: V4NET.0.0.1
- ╰─────result: V4NET.0.0.1
- ╭considering: $sender_host_address}░{2}░{30}}s
- ├──────value: V4NET.0.0.1
- ├considering: }░{2}░{30}}s
- ├───expanded: $sender_host_address
- ╰─────result: V4NET.0.0.1
+ cond: eq
+ ╭considering: V4NET.0.0.1}░{$sender_host_address}░{2}░{30}}s
+ ├───────text: V4NET.0.0.1
+ ├considering: }░{$sender_host_address}░{2}░{30}}s
+ ├───expanded: V4NET.0.0.1
+ ╰─────result: V4NET.0.0.1
+ ╭considering: $sender_host_address}░{2}░{30}}s
+ ├──────value: V4NET.0.0.1
+ ├considering: }░{2}░{30}}s
+ ├───expanded: $sender_host_address
+ ╰─────result: V4NET.0.0.1
├──condition: eq░{V4NET.0.0.1}░{$sender_host_address}
├─────result: true
╭considering: 2}░{30}}s
diff --git a/test/stderr/0169 b/test/stderr/0169
index 5d4eb6dc1..714c37e49 100644
--- a/test/stderr/0169
+++ b/test/stderr/0169
@@ -35,7 +35,7 @@ quota = 52428800 threshold = 21495808 old size = sssss message size = sss
appendfile yields 0 with errno=dd more_errno=dd
>>>>>>>>>>>>>>>> Exim pid=p1236 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>>
appendfile transport returned OK for userx@???
-added retry item for T:userx@???: errno=dd more_errno=dd flags=1
+added retry delete-item for T:userx@???: errno=dd more_errno=dd flags=1
LOG: MAIN
=> userx <userx@???> R=localuser T=appendfile
LOG: MAIN
diff --git a/test/stderr/0357 b/test/stderr/0357
index 4048d801f..6b347cef3 100644
--- a/test/stderr/0357
+++ b/test/stderr/0357
@@ -58,9 +58,9 @@ Considering: userx@???
checking router retry status
no domain retry record
have address retry record; next_try = now+0
-added retry item for R:userx@???:<CALLER@???>: errno=-1 more_errno=dd flags=1
-added retry item for R:userx@???: errno=-1 more_errno=dd flags=1
-added retry item for R:test.ex: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:userx@???:<CALLER@???>: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:userx@???: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:test.ex: errno=-1 more_errno=dd flags=1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
After routing:
Local deliveries:
@@ -116,9 +116,9 @@ Considering: userx@???
checking router retry status
no domain retry record
have address retry record; next_try = now+0
-added retry item for R:userx@???:<CALLER@???>: errno=-1 more_errno=dd flags=1
-added retry item for R:userx@???: errno=-1 more_errno=dd flags=1
-added retry item for R:test.ex: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:userx@???:<CALLER@???>: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:userx@???: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:test.ex: errno=-1 more_errno=dd flags=1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
After routing:
Local deliveries:
diff --git a/test/stderr/0358 b/test/stderr/0358
index d51bcf1a9..9dd2c514b 100644
--- a/test/stderr/0358
+++ b/test/stderr/0358
@@ -80,12 +80,12 @@ Considering: usery@???
checking router retry status
no domain retry record
have address retry record; next_try = now+0
-added retry item for R:usery@???:<CALLER@???>: errno=-1 more_errno=dd flags=1
-added retry item for R:usery@???: errno=-1 more_errno=dd flags=1
-added retry item for R:test.ex: errno=-1 more_errno=dd flags=1
-added retry item for R:userx@???:<CALLER@???>: errno=-1 more_errno=dd flags=1
-added retry item for R:userx@???: errno=-1 more_errno=dd flags=1
-added retry item for R:test.ex: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:usery@???:<CALLER@???>: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:usery@???: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:test.ex: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:userx@???:<CALLER@???>: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:userx@???: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:test.ex: errno=-1 more_errno=dd flags=1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
After routing:
Local deliveries:
diff --git a/test/stderr/0402 b/test/stderr/0402
index a9dab0cdc..8c4dda874 100644
--- a/test/stderr/0402
+++ b/test/stderr/0402
@@ -70,6 +70,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_rcvhost
├─────result: false
╭───scanning: from░$sender_rcvhost↩
@@ -113,6 +114,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_ident
├─────result: true
╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -166,6 +168,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_helo_name
├─────result: false
╭───scanning: (helo=$sender_helo_name)↩
@@ -232,6 +235,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_protocol
├─────result: true
╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -265,6 +269,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
@@ -277,6 +282,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:tls_in_cipher_std
├─────result: false
╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -326,6 +332,7 @@ try option received_header_text
├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_address
├─────result: true
╭considering: (envelope-from░<$sender_address>)↩
@@ -357,6 +364,7 @@ try option received_header_text
├──────value: 10HmaX-000000005vi-0000
├considering: ${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_for
├─────result: false
╭───scanning: ↩
@@ -789,6 +797,7 @@ try option message_prefix
├───────text: From░
├considering: ${if░def:return_path{$return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩
+ cond: def
├──condition: def:return_path
├─────result: true
╭considering: $return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩
@@ -877,6 +886,7 @@ try option message_prefix
├───────text: From░
├considering: ${if░def:return_path{$return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩
+ cond: def
├──condition: def:return_path
├─────result: true
╭considering: $return_path}{MAILER-DAEMON}}░${tod_bsdinbox}↩
diff --git a/test/stderr/0499 b/test/stderr/0499
index ebc043e8e..4d882260a 100644
--- a/test/stderr/0499
+++ b/test/stderr/0499
@@ -36,23 +36,23 @@ local host has lowest MX
data from lookup saved for cache for +anymx: key 'mxt1.test.ex' value '@mx_any'
mxt1.test.ex in domains? yes (matched "+anymx")
checking "condition" "${if match_domain{$domain}{+anymx}{yes}}"...
- mxt1.test.ex in "+anymx"?
- list element: +anymx
- start sublist anymx
- ╎mxt1.test.ex in "@mx_any"?
- ╎ list element: @mx_any
- ╎ check dnssec require list
- ╎ check dnssec request list
- ╎ DNS lookup of mxt1.test.ex (MX) using fakens
- ╎ DNS lookup of mxt1.test.ex (MX) succeeded
- ╎ DNS lookup of eximtesthost.test.ex (A) using fakens
- ╎ DNS lookup of eximtesthost.test.ex (A) succeeded
+ mxt1.test.ex in "+anymx"?
+ list element: +anymx
+ start sublist anymx
+ ╎ mxt1.test.ex in "@mx_any"?
+ ╎ list element: @mx_any
+ ╎ check dnssec require list
+ ╎ check dnssec request list
+ ╎ DNS lookup of mxt1.test.ex (MX) using fakens
+ ╎ DNS lookup of mxt1.test.ex (MX) succeeded
+ ╎ DNS lookup of eximtesthost.test.ex (A) using fakens
+ ╎ DNS lookup of eximtesthost.test.ex (A) succeeded
local host has lowest MX
- ╎ host_find_bydns yield = HOST_FOUND_LOCAL (4); returned hosts:
- ╎ eximtesthost.test.ex ip4.ip4.ip4.ip4 MX=5
- ╎ mxt1.test.ex in "@mx_any"? yes (matched "@mx_any")
- end sublist anymx
- mxt1.test.ex in "+anymx"? yes (matched "+anymx")
+ ╎ host_find_bydns yield = HOST_FOUND_LOCAL (4); returned hosts:
+ ╎ eximtesthost.test.ex ip4.ip4.ip4.ip4 MX=5
+ ╎ mxt1.test.ex in "@mx_any"? yes (matched "@mx_any")
+ end sublist anymx
+ mxt1.test.ex in "+anymx"? yes (matched "+anymx")
calling r1 router
r1 router called for ph@???
domain = mxt1.test.ex
diff --git a/test/stderr/0544 b/test/stderr/0544
index 091834313..de449b123 100644
--- a/test/stderr/0544
+++ b/test/stderr/0544
@@ -32,6 +32,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_rcvhost
├─────result: false
╭───scanning: from░$sender_rcvhost↩
@@ -75,6 +76,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_ident
├─────result: true
╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -128,6 +130,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_helo_name
├─────result: false
╭───scanning: (helo=$sender_helo_name)↩
@@ -194,6 +197,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_protocol
├─────result: true
╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -227,6 +231,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
@@ -239,6 +244,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:tls_in_cipher_std
├─────result: false
╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -288,6 +294,7 @@ try option received_header_text
├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_address
├─────result: true
╭considering: (envelope-from░<$sender_address>)↩
@@ -319,6 +326,7 @@ try option received_header_text
├──────value: 10HmaX-000000005vi-0000
├considering: ${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_for
├─────result: false
╭───scanning: ↩
@@ -385,39 +393,43 @@ LOG: MAIN
== userx@??? R=smarthost T=smtp defer (-1): first-pass only routing due to -odqs, queue_smtp_domains or control=queue
try option delay_warning_condition
╭considering: ${if░or░{{░!eq{$h_list-id:$h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ╭considering: $h_list-id:$h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├considering: $h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├considering: $h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├considering: }{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├───expanded: $h_list-id:$h_list-post:$h_list-subscribe:
- ╰─────result:
- ╭considering: }░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├───expanded:
- ╰─────result:
- ╭considering: $h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├considering: }{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├───expanded: $h_precedence:
- ╰─────result:
- ╭considering: (?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├───────text: (?i)bulk|list|junk
- ├considering: }░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├───expanded: (?i)bulk|list|junk
- ╰─────result: (?i)bulk|list|junk
- compiled RE '(?i)bulk|list|junk' not found in local cache
- compiling RE '(?i)bulk|list|junk'
- compiled RE '(?i)bulk|list|junk' saved in local cache
- ╭considering: $h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├considering: }{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├───expanded: $h_auto-submitted:
- ╰─────result:
- ╭considering: (?i)auto-generated|auto-replied}░}}░{no}{yes}}
- ├───────text: (?i)auto-generated|auto-replied
- ├considering: }░}}░{no}{yes}}
- ├───expanded: (?i)auto-generated|auto-replied
- ╰─────result: (?i)auto-generated|auto-replied
- compiled RE '(?i)auto-generated|auto-replied' not found in local cache
- compiling RE '(?i)auto-generated|auto-replied'
- compiled RE '(?i)auto-generated|auto-replied' saved in local cache
+ cond: or
+ cond: eq
+ ╎╭considering: $h_list-id:$h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├considering: $h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├considering: $h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├considering: }{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├───expanded: $h_list-id:$h_list-post:$h_list-subscribe:
+ ╎╰─────result:
+ ╎╭considering: }░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├───expanded:
+ ╎╰─────result:
+ cond: match
+ ╎╭considering: $h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├considering: }{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├───expanded: $h_precedence:
+ ╎╰─────result:
+ ╎╭considering: (?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├───────text: (?i)bulk|list|junk
+ ╎├considering: }░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├───expanded: (?i)bulk|list|junk
+ ╎╰─────result: (?i)bulk|list|junk
+ compiled RE '(?i)bulk|list|junk' not found in local cache
+ compiling RE '(?i)bulk|list|junk'
+ compiled RE '(?i)bulk|list|junk' saved in local cache
+ cond: match
+ ╎╭considering: $h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├considering: }{(?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├───expanded: $h_auto-submitted:
+ ╎╰─────result:
+ ╎╭considering: (?i)auto-generated|auto-replied}░}}░{no}{yes}}
+ ╎├───────text: (?i)auto-generated|auto-replied
+ ╎├considering: }░}}░{no}{yes}}
+ ╎├───expanded: (?i)auto-generated|auto-replied
+ ╎╰─────result: (?i)auto-generated|auto-replied
+ compiled RE '(?i)auto-generated|auto-replied' not found in local cache
+ compiling RE '(?i)auto-generated|auto-replied'
+ compiled RE '(?i)auto-generated|auto-replied' saved in local cache
├──condition: or░{{░!eq{$h_list-id:$h_list-post:$h_list-subscribe:}{}░}{░match{$h_precedence:}{(?i)bulk|list|junk}░}{░match{$h_auto-submitted:}{(?i)auto-generated|auto-replied}░}}
├─────result: false
╭───scanning: no}{yes}}
@@ -465,24 +477,25 @@ try option smtp_banner
╰─────result: the.local.host.name░ESMTP░Exim░x.yz░Tue,░2░Mar░1999░09:44:33░+0000
try option acl_smtp_helo
╭considering: ${if░match_domain░{$sender_helo_name}{+dlist}}
- ╭considering: $sender_helo_name}{+dlist}}
- ├──────value: ehlo.domain
- ╰──(tainted)
- ├considering: }{+dlist}}
- ├───expanded: $sender_helo_name
- ╰─────result: ehlo.domain
- ╰──(tainted)
- ╭considering: +dlist}}
- ├───────text: +dlist
- ├considering: }}
- ├───expanded: +dlist
- ╰─────result: +dlist
- ╭considering: $domain
- ├──────value: ehlo.domain
- ╰──(tainted)
- ├───expanded: $domain
- ╰─────result: ehlo.domain
- ╰──(tainted)
+ cond: match_domain
+ ╭considering: $sender_helo_name}{+dlist}}
+ ├──────value: ehlo.domain
+ ╰──(tainted)
+ ├considering: }{+dlist}}
+ ├───expanded: $sender_helo_name
+ ╰─────result: ehlo.domain
+ ╰──(tainted)
+ ╭considering: +dlist}}
+ ├───────text: +dlist
+ ├considering: }}
+ ├───expanded: +dlist
+ ╰─────result: +dlist
+ ╭considering: $domain
+ ├──────value: ehlo.domain
+ ╰──(tainted)
+ ├───expanded: $domain
+ ╰─────result: ehlo.domain
+ ╰──(tainted)
├──condition: match_domain░{$sender_helo_name}{+dlist}
├─────result: true
├───expanded: ${if░match_domain░{$sender_helo_name}{+dlist}}
diff --git a/test/stderr/0554 b/test/stderr/0554
index d8ee0171a..8e320f709 100644
--- a/test/stderr/0554
+++ b/test/stderr/0554
@@ -47,9 +47,9 @@ Considering: x@y
checking router retry status
no domain retry record
have address retry record; next_try = now+0
-added retry item for R:x@y:<CALLER@???>: errno=-1 more_errno=dd flags=1
-added retry item for R:x@y: errno=-1 more_errno=dd flags=1
-added retry item for R:y: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:x@y:<CALLER@???>: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:x@y: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:y: errno=-1 more_errno=dd flags=1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
After routing:
Local deliveries:
@@ -60,8 +60,8 @@ After routing:
checking retry status of 127.0.0.1
no host retry record
no message retry record
-added retry item for R:x@y:<CALLER@???>: errno=dd more_errno=dd,A flags=1
-added retry item for R:x@y: errno=dd more_errno=dd,A flags=1
+added retry delete-item for R:x@y:<CALLER@???>: errno=dd more_errno=dd,A flags=1
+added retry delete-item for R:x@y: errno=dd more_errno=dd,A flags=1
cmdlog: '220:EHLO:250:MAIL:250:RCPT:250:DATA:354:.:250:QUIT+:250'
>>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
reading retry information for R:x@y from subprocess
diff --git a/test/stderr/0632 b/test/stderr/0632
index d7fac294a..8855f4e38 100644
--- a/test/stderr/0632
+++ b/test/stderr/0632
@@ -66,74 +66,77 @@ p1235 ├───expanded: $spool_directory/exim_daemon_notify
p1235 ╰─────result: TESTSUITE/spool/exim_daemon_notify
p1235 test.ex in "^nomatch_list"? no (end of list)
p1235 ╭considering: ${if░match░{a_random_string}░{static_RE}}
-p1235 ╭considering: a_random_string}░{static_RE}}
-p1235 ├───────text: a_random_string
-p1235 ├considering: }░{static_RE}}
-p1235 ├───expanded: a_random_string
-p1235 ╰─────result: a_random_string
-p1235 ╭considering: static_RE}}
-p1235 ├───────text: static_RE
-p1235 ├considering: }}
-p1235 ├───expanded: static_RE
-p1235 ╰─────result: static_RE
-p1235 compiled RE 'static_RE' not found in local cache
-p1235 compiling RE 'static_RE'
-p1235 compiled RE 'static_RE' saved in local cache
-p1235 sending RE 'static_RE' to daemon
+p1235 cond: match
+p1235 ╭considering: a_random_string}░{static_RE}}
+p1235 ├───────text: a_random_string
+p1235 ├considering: }░{static_RE}}
+p1235 ├───expanded: a_random_string
+p1235 ╰─────result: a_random_string
+p1235 ╭considering: static_RE}}
+p1235 ├───────text: static_RE
+p1235 ├considering: }}
+p1235 ├───expanded: static_RE
+p1235 ╰─────result: static_RE
+p1235 compiled RE 'static_RE' not found in local cache
+p1235 compiling RE 'static_RE'
+p1235 compiled RE 'static_RE' saved in local cache
+p1235 sending RE 'static_RE' to daemon
p1235 try option notifier_socket
-p1235 ╭considering: $spool_directory/exim_daemon_notify
-p1235 ├──────value: TESTSUITE/spool
-p1235 ├considering: /exim_daemon_notify
-p1235 ├───────text: /exim_daemon_notify
-p1235 ├───expanded: $spool_directory/exim_daemon_notify
-p1235 ╰─────result: TESTSUITE/spool/exim_daemon_notify
+p1235 ╭considering: $spool_directory/exim_daemon_notify
+p1235 ├──────value: TESTSUITE/spool
+p1235 ├considering: /exim_daemon_notify
+p1235 ├───────text: /exim_daemon_notify
+p1235 ├───expanded: $spool_directory/exim_daemon_notify
+p1235 ╰─────result: TESTSUITE/spool/exim_daemon_notify
p1235 ├──condition: match░{a_random_string}░{static_RE}
p1235 ├─────result: false
p1235 ├───expanded: ${if░match░{a_random_string}░{static_RE}}
p1235 ╰─────result:
p1235 ╭considering: ${if░match░{a_random_string}░{tricky_static_RE\$}}
-p1235 ╭considering: a_random_string}░{tricky_static_RE\$}}
-p1235 ├───────text: a_random_string
-p1235 ├considering: }░{tricky_static_RE\$}}
-p1235 ├───expanded: a_random_string
-p1235 ╰─────result: a_random_string
-p1235 ╭considering: tricky_static_RE\$}}
-p1235 ├───────text: tricky_static_RE
-p1235 ├considering: \$}}
-p1235 ├backslashed: '\$'
-p1235 ├considering: }}
-p1235 ├───expanded: tricky_static_RE\$
-p1235 ╰─────result: tricky_static_RE$
-p1235 compiled RE 'tricky_static_RE$' not found in local cache
-p1235 compiling RE 'tricky_static_RE$'
-p1235 compiled RE 'tricky_static_RE$' saved in local cache
-p1235 sending RE 'tricky_static_RE$' to daemon
+p1235 cond: match
+p1235 ╭considering: a_random_string}░{tricky_static_RE\$}}
+p1235 ├───────text: a_random_string
+p1235 ├considering: }░{tricky_static_RE\$}}
+p1235 ├───expanded: a_random_string
+p1235 ╰─────result: a_random_string
+p1235 ╭considering: tricky_static_RE\$}}
+p1235 ├───────text: tricky_static_RE
+p1235 ├considering: \$}}
+p1235 ├backslashed: '\$'
+p1235 ├considering: }}
+p1235 ├───expanded: tricky_static_RE\$
+p1235 ╰─────result: tricky_static_RE$
+p1235 compiled RE 'tricky_static_RE$' not found in local cache
+p1235 compiling RE 'tricky_static_RE$'
+p1235 compiled RE 'tricky_static_RE$' saved in local cache
+p1235 sending RE 'tricky_static_RE$' to daemon
p1235 try option notifier_socket
-p1235 ╭considering: $spool_directory/exim_daemon_notify
-p1235 ├──────value: TESTSUITE/spool
-p1235 ├considering: /exim_daemon_notify
-p1235 ├───────text: /exim_daemon_notify
-p1235 ├───expanded: $spool_directory/exim_daemon_notify
-p1235 ╰─────result: TESTSUITE/spool/exim_daemon_notify
+p1235 ╭considering: $spool_directory/exim_daemon_notify
+p1235 ├──────value: TESTSUITE/spool
+p1235 ├considering: /exim_daemon_notify
+p1235 ├───────text: /exim_daemon_notify
+p1235 ├───expanded: $spool_directory/exim_daemon_notify
+p1235 ╰─────result: TESTSUITE/spool/exim_daemon_notify
p1235 ├──condition: match░{a_random_string}░{tricky_static_RE\$}
p1235 ├─────result: false
p1235 ├───expanded: ${if░match░{a_random_string}░{tricky_static_RE\$}}
p1235 ╰─────result:
p1235 ╭considering: ${if░match░{a_random_string}░{pid=${pid}░uncacheable_RE}}
-p1235 ╭considering: a_random_string}░{pid=${pid}░uncacheable_RE}}
-p1235 ├───────text: a_random_string
-p1235 ├considering: }░{pid=${pid}░uncacheable_RE}}
-p1235 ├───expanded: a_random_string
-p1235 ╰─────result: a_random_string
-p1235 ╭considering: pid=${pid}░uncacheable_RE}}
-p1235 ├───────text: pid=
-p1235 ├considering: ${pid}░uncacheable_RE}}
-p1235 ├considering: ░uncacheable_RE}}
-p1235 ├───────text: ░uncacheable_RE
-p1235 ├considering: }}
-p1235 ├───expanded: pid=${pid}░uncacheable_RE
-p1235 ╰─────result: pid=p1235░uncacheable_RE
-p1235 compiling RE 'pid=p1235 uncacheable_RE'
+p1235 cond: match
+p1235 ╭considering: a_random_string}░{pid=${pid}░uncacheable_RE}}
+p1235 ├───────text: a_random_string
+p1235 ├considering: }░{pid=${pid}░uncacheable_RE}}
+p1235 ├───expanded: a_random_string
+p1235 ╰─────result: a_random_string
+p1235 ╭considering: pid=${pid}░uncacheable_RE}}
+p1235 ├───────text: pid=
+p1235 ├considering: ${pid}░uncacheable_RE}}
+p1235 ├considering: ░uncacheable_RE}}
+p1235 ├───────text: ░uncacheable_RE
+p1235 ├considering: }}
+p1235 ├───expanded: pid=${pid}░uncacheable_RE
+p1235 ╰─────result: pid=p1235░uncacheable_RE
+p1235 compiling RE 'pid=p1235 uncacheable_RE'
p1235 ├──condition: match░{a_random_string}░{pid=${pid}░uncacheable_RE}
p1235 ├─────result: false
p1235 ├───expanded: ${if░match░{a_random_string}░{pid=${pid}░uncacheable_RE}}
@@ -160,6 +163,7 @@ p1235 ␉}}(Exim░$version_number)↩
p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1235 ␉for░$received_for}}
+p1235 cond: def
p1235 ├──condition: def:sender_rcvhost
p1235 ├─────result: true
p1235 ╭considering: from░$sender_rcvhost↩
@@ -205,6 +209,7 @@ p1235 ␉}}(Exim░$version_number)↩
p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1235 ␉for░$received_for}}
+p1235 cond: def
p1235 ├──condition: def:sender_ident
p1235 ├─────result: false
p1235 ╭───scanning: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -259,6 +264,7 @@ p1235 ␉}}(Exim░$version_number)↩
p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1235 ␉for░$received_for}}
+p1235 cond: def
p1235 ├──condition: def:sender_helo_name
p1235 ├─────result: false
p1235 ╭───scanning: (helo=$sender_helo_name)↩
@@ -328,6 +334,7 @@ p1235 ␉}}(Exim░$version_number)↩
p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1235 ␉for░$received_for}}
+p1235 cond: def
p1235 ├──condition: def:received_protocol
p1235 ├─────result: true
p1235 ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -362,6 +369,7 @@ p1235 ␉}}(Exim░$version_number)↩
p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1235 ␉for░$received_for}}
+p1235 cond: def
p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1235 ␉for░$received_for}}
@@ -375,6 +383,7 @@ p1235 ␉}}(Exim░$version_number)↩
p1235 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1235 ␉for░$received_for}}
+p1235 cond: def
p1235 ├──condition: def:tls_in_cipher_std
p1235 ├─────result: false
p1235 ╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -425,6 +434,7 @@ p1235 ␉
p1235 ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1235 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1235 ␉for░$received_for}}
+p1235 cond: def
p1235 ├──condition: def:sender_address
p1235 ├─────result: true
p1235 ╭considering: (envelope-from░<$sender_address>)↩
@@ -459,6 +469,7 @@ p1235 ␉for░$received_for}}
p1235 ├──────value: 10HmaX-000000005vi-0000
p1235 ├considering: ${if░def:received_for░{↩
p1235 ␉for░$received_for}}
+p1235 cond: def
p1235 ├──condition: def:received_for
p1235 ├─────result: true
p1235 ╭considering: ↩
@@ -552,54 +563,57 @@ p1236 try option acl_smtp_rcpt
p1236 compiled caseless RE '^nomatch_list' found in local cache
p1236 test.ex in "^nomatch_list"? no (end of list)
p1236 ╭considering: ${if░match░{a_random_string}░{static_RE}}
-p1236 ╭considering: a_random_string}░{static_RE}}
-p1236 ├───────text: a_random_string
-p1236 ├considering: }░{static_RE}}
-p1236 ├───expanded: a_random_string
-p1236 ╰─────result: a_random_string
-p1236 ╭considering: static_RE}}
-p1236 ├───────text: static_RE
-p1236 ├considering: }}
-p1236 ├───expanded: static_RE
-p1236 ╰─────result: static_RE
-p1236 compiled RE 'static_RE' found in local cache
+p1236 cond: match
+p1236 ╭considering: a_random_string}░{static_RE}}
+p1236 ├───────text: a_random_string
+p1236 ├considering: }░{static_RE}}
+p1236 ├───expanded: a_random_string
+p1236 ╰─────result: a_random_string
+p1236 ╭considering: static_RE}}
+p1236 ├───────text: static_RE
+p1236 ├considering: }}
+p1236 ├───expanded: static_RE
+p1236 ╰─────result: static_RE
+p1236 compiled RE 'static_RE' found in local cache
p1236 ├──condition: match░{a_random_string}░{static_RE}
p1236 ├─────result: false
p1236 ├───expanded: ${if░match░{a_random_string}░{static_RE}}
p1236 ╰─────result:
p1236 ╭considering: ${if░match░{a_random_string}░{tricky_static_RE\$}}
-p1236 ╭considering: a_random_string}░{tricky_static_RE\$}}
-p1236 ├───────text: a_random_string
-p1236 ├considering: }░{tricky_static_RE\$}}
-p1236 ├───expanded: a_random_string
-p1236 ╰─────result: a_random_string
-p1236 ╭considering: tricky_static_RE\$}}
-p1236 ├───────text: tricky_static_RE
-p1236 ├considering: \$}}
-p1236 ├backslashed: '\$'
-p1236 ├considering: }}
-p1236 ├───expanded: tricky_static_RE\$
-p1236 ╰─────result: tricky_static_RE$
-p1236 compiled RE 'tricky_static_RE$' found in local cache
+p1236 cond: match
+p1236 ╭considering: a_random_string}░{tricky_static_RE\$}}
+p1236 ├───────text: a_random_string
+p1236 ├considering: }░{tricky_static_RE\$}}
+p1236 ├───expanded: a_random_string
+p1236 ╰─────result: a_random_string
+p1236 ╭considering: tricky_static_RE\$}}
+p1236 ├───────text: tricky_static_RE
+p1236 ├considering: \$}}
+p1236 ├backslashed: '\$'
+p1236 ├considering: }}
+p1236 ├───expanded: tricky_static_RE\$
+p1236 ╰─────result: tricky_static_RE$
+p1236 compiled RE 'tricky_static_RE$' found in local cache
p1236 ├──condition: match░{a_random_string}░{tricky_static_RE\$}
p1236 ├─────result: false
p1236 ├───expanded: ${if░match░{a_random_string}░{tricky_static_RE\$}}
p1236 ╰─────result:
p1236 ╭considering: ${if░match░{a_random_string}░{pid=${pid}░uncacheable_RE}}
-p1236 ╭considering: a_random_string}░{pid=${pid}░uncacheable_RE}}
-p1236 ├───────text: a_random_string
-p1236 ├considering: }░{pid=${pid}░uncacheable_RE}}
-p1236 ├───expanded: a_random_string
-p1236 ╰─────result: a_random_string
-p1236 ╭considering: pid=${pid}░uncacheable_RE}}
-p1236 ├───────text: pid=
-p1236 ├considering: ${pid}░uncacheable_RE}}
-p1236 ├considering: ░uncacheable_RE}}
-p1236 ├───────text: ░uncacheable_RE
-p1236 ├considering: }}
-p1236 ├───expanded: pid=${pid}░uncacheable_RE
-p1236 ╰─────result: pid=p1236░uncacheable_RE
-p1236 compiling RE 'pid=p1236 uncacheable_RE'
+p1236 cond: match
+p1236 ╭considering: a_random_string}░{pid=${pid}░uncacheable_RE}}
+p1236 ├───────text: a_random_string
+p1236 ├considering: }░{pid=${pid}░uncacheable_RE}}
+p1236 ├───expanded: a_random_string
+p1236 ╰─────result: a_random_string
+p1236 ╭considering: pid=${pid}░uncacheable_RE}}
+p1236 ├───────text: pid=
+p1236 ├considering: ${pid}░uncacheable_RE}}
+p1236 ├considering: ░uncacheable_RE}}
+p1236 ├───────text: ░uncacheable_RE
+p1236 ├considering: }}
+p1236 ├───expanded: pid=${pid}░uncacheable_RE
+p1236 ╰─────result: pid=p1236░uncacheable_RE
+p1236 compiling RE 'pid=p1236 uncacheable_RE'
p1236 ├──condition: match░{a_random_string}░{pid=${pid}░uncacheable_RE}
p1236 ├─────result: false
p1236 ├───expanded: ${if░match░{a_random_string}░{pid=${pid}░uncacheable_RE}}
@@ -626,6 +640,7 @@ p1236 ␉}}(Exim░$version_number)↩
p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1236 ␉for░$received_for}}
+p1236 cond: def
p1236 ├──condition: def:sender_rcvhost
p1236 ├─────result: true
p1236 ╭considering: from░$sender_rcvhost↩
@@ -671,6 +686,7 @@ p1236 ␉}}(Exim░$version_number)↩
p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1236 ␉for░$received_for}}
+p1236 cond: def
p1236 ├──condition: def:sender_ident
p1236 ├─────result: false
p1236 ╭───scanning: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -725,6 +741,7 @@ p1236 ␉}}(Exim░$version_number)↩
p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1236 ␉for░$received_for}}
+p1236 cond: def
p1236 ├──condition: def:sender_helo_name
p1236 ├─────result: false
p1236 ╭───scanning: (helo=$sender_helo_name)↩
@@ -794,6 +811,7 @@ p1236 ␉}}(Exim░$version_number)↩
p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1236 ␉for░$received_for}}
+p1236 cond: def
p1236 ├──condition: def:received_protocol
p1236 ├─────result: true
p1236 ╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -828,6 +846,7 @@ p1236 ␉}}(Exim░$version_number)↩
p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1236 ␉for░$received_for}}
+p1236 cond: def
p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1236 ␉for░$received_for}}
@@ -841,6 +860,7 @@ p1236 ␉}}(Exim░$version_number)↩
p1236 ␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1236 ␉for░$received_for}}
+p1236 cond: def
p1236 ├──condition: def:tls_in_cipher_std
p1236 ├─────result: false
p1236 ╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -891,6 +911,7 @@ p1236 ␉
p1236 ├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
p1236 ␉}}id░$message_exim_id${if░def:received_for░{↩
p1236 ␉for░$received_for}}
+p1236 cond: def
p1236 ├──condition: def:sender_address
p1236 ├─────result: true
p1236 ╭considering: (envelope-from░<$sender_address>)↩
@@ -925,6 +946,7 @@ p1236 ␉for░$received_for}}
p1236 ├──────value: 10HmaY-000000005vi-0000
p1236 ├considering: ${if░def:received_for░{↩
p1236 ␉for░$received_for}}
+p1236 cond: def
p1236 ├──condition: def:received_for
p1236 ├─────result: true
p1236 ╭considering: ↩
diff --git a/test/stderr/3400 b/test/stderr/3400
index 915c6e8f1..e9b3221c8 100644
--- a/test/stderr/3400
+++ b/test/stderr/3400
@@ -782,9 +782,9 @@ mylogin authenticator server_condition:
$auth1 = userx secret
$1 = userx secret
+++MYLOGIN $1="userx secret" $2="" $3=""
- compiled RE '^(\S+)\s+(\S+)$' not found in local cache
- compiling RE '^(\S+)\s+(\S+)$'
- compiled RE '^(\S+)\s+(\S+)$' saved in local cache
+ compiled RE '^(\S+)\s+(\S+)$' not found in local cache
+ compiling RE '^(\S+)\s+(\S+)$'
+ compiled RE '^(\S+)\s+(\S+)$' saved in local cache
expanded string: yes
SMTP>> 235 Authentication succeeded
SMTP<< quit
diff --git a/test/stderr/5410 b/test/stderr/5410
index 9b4f0ff8a..4ee810ac3 100644
--- a/test/stderr/5410
+++ b/test/stderr/5410
@@ -44,16 +44,17 @@ try option acl_smtp_expn
try option acl_smtp_mail
try option acl_smtp_rcpt
╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}}
- ╭considering: SERVER}{server}{queue}{cutthrough}}
- ├───────text: SERVER
- ├considering: }{server}{queue}{cutthrough}}
- ├───expanded: SERVER
- ╰─────result: SERVER
- ╭considering: server}{queue}{cutthrough}}
- ├───────text: server
- ├considering: }{queue}{cutthrough}}
- ├───expanded: server
- ╰─────result: server
+ cond: eq
+ ╭considering: SERVER}{server}{queue}{cutthrough}}
+ ├───────text: SERVER
+ ├considering: }{server}{queue}{cutthrough}}
+ ├───expanded: SERVER
+ ╰─────result: SERVER
+ ╭considering: server}{queue}{cutthrough}}
+ ├───────text: server
+ ├considering: }{queue}{cutthrough}}
+ ├───expanded: server
+ ╰─────result: server
├──condition: eq░{SERVER}{server}
├─────result: false
╭───scanning: queue}{cutthrough}}
@@ -147,30 +148,33 @@ cmd buf flush ddd bytes
250 HELP
try option host_name_extract
╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value: 127.0.0.1
- ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $host
- ╰─────result: 127.0.0.1
- ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───────text: .outlook.com
- ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├backslashed: '\$'
- ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: .outlook.com\$
- ╰─────result: .outlook.com$
- ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value:
- ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $item
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
- ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
- ├──protected: ^250-([\w.]+)\s
- ├───scanning: }}}░{$1}}
- ├───expanded: \N^250-([\w.]+)\s\N
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
+ cond: and
+ cond: match
+ ╎╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value: 127.0.0.1
+ ╎├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $host
+ ╎╰─────result: 127.0.0.1
+ ╎╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───────text: .outlook.com
+ ╎├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├backslashed: '\$'
+ ╎├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: .outlook.com\$
+ ╎╰─────result: .outlook.com$
+ cond: match
+ ╎╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value:
+ ╎├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $item
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
+ ╎╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──protected: ^250-([\w.]+)\s
+ ╎├───scanning: }}}░{$1}}
+ ╎├───expanded: \N^250-([\w.]+)\s\N
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}
├─────result: false
╭───scanning: $1}}
@@ -181,18 +185,19 @@ try option host_name_extract
├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
╰─────result:
╭considering: ${if░eq░{$address_data}{usery}{*}{:}}
- ╭considering: $address_data}{usery}{*}{:}}
- ├──────value: userx
- ╰──(tainted)
- ├considering: }{usery}{*}{:}}
- ├───expanded: $address_data
- ╰─────result: userx
- ╰──(tainted)
- ╭considering: usery}{*}{:}}
- ├───────text: usery
- ├considering: }{*}{:}}
- ├───expanded: usery
- ╰─────result: usery
+ cond: eq
+ ╭considering: $address_data}{usery}{*}{:}}
+ ├──────value: userx
+ ╰──(tainted)
+ ├considering: }{usery}{*}{:}}
+ ├───expanded: $address_data
+ ╰─────result: userx
+ ╰──(tainted)
+ ╭considering: usery}{*}{:}}
+ ├───────text: usery
+ ├considering: }{*}{:}}
+ ├───expanded: usery
+ ╰─────result: usery
├──condition: eq░{$address_data}{usery}
├─────result: false
╭───scanning: *}{:}}
@@ -212,18 +217,19 @@ try option host_name_extract
list element:
127.0.0.1 in hosts_avoid_tls? no (end of list)
╭considering: ${if░eq░{$address_data}{userz}{*}{:}}
- ╭considering: $address_data}{userz}{*}{:}}
- ├──────value: userx
- ╰──(tainted)
- ├considering: }{userz}{*}{:}}
- ├───expanded: $address_data
- ╰─────result: userx
- ╰──(tainted)
- ╭considering: userz}{*}{:}}
- ├───────text: userz
- ├considering: }{*}{:}}
- ├───expanded: userz
- ╰─────result: userz
+ cond: eq
+ ╭considering: $address_data}{userz}{*}{:}}
+ ├──────value: userx
+ ╰──(tainted)
+ ├considering: }{userz}{*}{:}}
+ ├───expanded: $address_data
+ ╰─────result: userx
+ ╰──(tainted)
+ ╭considering: userz}{*}{:}}
+ ├───────text: userz
+ ├considering: }{*}{:}}
+ ├───expanded: userz
+ ╰─────result: userz
├──condition: eq░{$address_data}{userz}
├─────result: false
╭───scanning: *}{:}}
@@ -302,6 +308,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_rcvhost
├─────result: false
╭───scanning: from░$sender_rcvhost↩
@@ -345,6 +352,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_ident
├─────result: true
╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -398,6 +406,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_helo_name
├─────result: true
╭considering: (helo=$sender_helo_name)↩
@@ -472,6 +481,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_protocol
├─────result: true
╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -506,6 +516,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
@@ -519,6 +530,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:tls_in_cipher_std
├─────result: false
╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -569,6 +581,7 @@ try option received_header_text
├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_address
├─────result: true
╭considering: (envelope-from░<$sender_address>)↩
@@ -601,6 +614,7 @@ try option received_header_text
├──────value: 10HmaX-000000005vi-0000
├considering: ${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_for
├─────result: true
╭considering: ↩
@@ -701,16 +715,17 @@ try option acl_smtp_expn
try option acl_smtp_mail
try option acl_smtp_rcpt
╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}}
- ╭considering: SERVER}{server}{queue}{cutthrough}}
- ├───────text: SERVER
- ├considering: }{server}{queue}{cutthrough}}
- ├───expanded: SERVER
- ╰─────result: SERVER
- ╭considering: server}{queue}{cutthrough}}
- ├───────text: server
- ├considering: }{queue}{cutthrough}}
- ├───expanded: server
- ╰─────result: server
+ cond: eq
+ ╭considering: SERVER}{server}{queue}{cutthrough}}
+ ├───────text: SERVER
+ ├considering: }{server}{queue}{cutthrough}}
+ ├───expanded: SERVER
+ ╰─────result: SERVER
+ ╭considering: server}{queue}{cutthrough}}
+ ├───────text: server
+ ├considering: }{queue}{cutthrough}}
+ ├───expanded: server
+ ╰─────result: server
├──condition: eq░{SERVER}{server}
├─────result: false
╭───scanning: queue}{cutthrough}}
@@ -804,30 +819,33 @@ cmd buf flush ddd bytes
250 HELP
try option host_name_extract
╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value: 127.0.0.1
- ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $host
- ╰─────result: 127.0.0.1
- ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───────text: .outlook.com
- ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├backslashed: '\$'
- ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: .outlook.com\$
- ╰─────result: .outlook.com$
- ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value:
- ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $item
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
- ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
- ├──protected: ^250-([\w.]+)\s
- ├───scanning: }}}░{$1}}
- ├───expanded: \N^250-([\w.]+)\s\N
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
+ cond: and
+ cond: match
+ ╎╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value: 127.0.0.1
+ ╎├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $host
+ ╎╰─────result: 127.0.0.1
+ ╎╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───────text: .outlook.com
+ ╎├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├backslashed: '\$'
+ ╎├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: .outlook.com\$
+ ╎╰─────result: .outlook.com$
+ cond: match
+ ╎╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value:
+ ╎├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $item
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
+ ╎╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──protected: ^250-([\w.]+)\s
+ ╎├───scanning: }}}░{$1}}
+ ╎├───expanded: \N^250-([\w.]+)\s\N
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}
├─────result: false
╭───scanning: $1}}
@@ -838,18 +856,19 @@ try option host_name_extract
├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
╰─────result:
╭considering: ${if░eq░{$address_data}{usery}{*}{:}}
- ╭considering: $address_data}{usery}{*}{:}}
- ├──────value: usery
- ╰──(tainted)
- ├considering: }{usery}{*}{:}}
- ├───expanded: $address_data
- ╰─────result: usery
- ╰──(tainted)
- ╭considering: usery}{*}{:}}
- ├───────text: usery
- ├considering: }{*}{:}}
- ├───expanded: usery
- ╰─────result: usery
+ cond: eq
+ ╭considering: $address_data}{usery}{*}{:}}
+ ├──────value: usery
+ ╰──(tainted)
+ ├considering: }{usery}{*}{:}}
+ ├───expanded: $address_data
+ ╰─────result: usery
+ ╰──(tainted)
+ ╭considering: usery}{*}{:}}
+ ├───────text: usery
+ ├considering: }{*}{:}}
+ ├───expanded: usery
+ ╰─────result: usery
├──condition: eq░{$address_data}{usery}
├─────result: true
╭considering: *}{:}}
@@ -909,6 +928,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_rcvhost
├─────result: false
╭───scanning: from░$sender_rcvhost↩
@@ -952,6 +972,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_ident
├─────result: true
╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -1005,6 +1026,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_helo_name
├─────result: true
╭considering: (helo=$sender_helo_name)↩
@@ -1079,6 +1101,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_protocol
├─────result: true
╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -1113,6 +1136,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
@@ -1126,6 +1150,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:tls_in_cipher_std
├─────result: false
╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -1176,6 +1201,7 @@ try option received_header_text
├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_address
├─────result: true
╭considering: (envelope-from░<$sender_address>)↩
@@ -1208,6 +1234,7 @@ try option received_header_text
├──────value: 10HmaZ-000000005vi-0000
├considering: ${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_for
├─────result: true
╭considering: ↩
@@ -1308,16 +1335,17 @@ try option acl_smtp_expn
try option acl_smtp_mail
try option acl_smtp_rcpt
╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}}
- ╭considering: SERVER}{server}{queue}{cutthrough}}
- ├───────text: SERVER
- ├considering: }{server}{queue}{cutthrough}}
- ├───expanded: SERVER
- ╰─────result: SERVER
- ╭considering: server}{queue}{cutthrough}}
- ├───────text: server
- ├considering: }{queue}{cutthrough}}
- ├───expanded: server
- ╰─────result: server
+ cond: eq
+ ╭considering: SERVER}{server}{queue}{cutthrough}}
+ ├───────text: SERVER
+ ├considering: }{server}{queue}{cutthrough}}
+ ├───expanded: SERVER
+ ╰─────result: SERVER
+ ╭considering: server}{queue}{cutthrough}}
+ ├───────text: server
+ ├considering: }{queue}{cutthrough}}
+ ├───expanded: server
+ ╰─────result: server
├──condition: eq░{SERVER}{server}
├─────result: false
╭───scanning: queue}{cutthrough}}
@@ -1411,30 +1439,33 @@ cmd buf flush ddd bytes
250 HELP
try option host_name_extract
╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value: 127.0.0.1
- ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $host
- ╰─────result: 127.0.0.1
- ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───────text: .outlook.com
- ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├backslashed: '\$'
- ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: .outlook.com\$
- ╰─────result: .outlook.com$
- ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value:
- ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $item
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
- ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
- ├──protected: ^250-([\w.]+)\s
- ├───scanning: }}}░{$1}}
- ├───expanded: \N^250-([\w.]+)\s\N
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
+ cond: and
+ cond: match
+ ╎╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value: 127.0.0.1
+ ╎├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $host
+ ╎╰─────result: 127.0.0.1
+ ╎╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───────text: .outlook.com
+ ╎├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├backslashed: '\$'
+ ╎├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: .outlook.com\$
+ ╎╰─────result: .outlook.com$
+ cond: match
+ ╎╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value:
+ ╎├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $item
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
+ ╎╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──protected: ^250-([\w.]+)\s
+ ╎├───scanning: }}}░{$1}}
+ ╎├───expanded: \N^250-([\w.]+)\s\N
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}
├─────result: false
╭───scanning: $1}}
@@ -1445,18 +1476,19 @@ try option host_name_extract
├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
╰─────result:
╭considering: ${if░eq░{$address_data}{usery}{*}{:}}
- ╭considering: $address_data}{usery}{*}{:}}
- ├──────value: usery
- ╰──(tainted)
- ├considering: }{usery}{*}{:}}
- ├───expanded: $address_data
- ╰─────result: usery
- ╰──(tainted)
- ╭considering: usery}{*}{:}}
- ├───────text: usery
- ├considering: }{*}{:}}
- ├───expanded: usery
- ╰─────result: usery
+ cond: eq
+ ╭considering: $address_data}{usery}{*}{:}}
+ ├──────value: usery
+ ╰──(tainted)
+ ├considering: }{usery}{*}{:}}
+ ├───expanded: $address_data
+ ╰─────result: usery
+ ╰──(tainted)
+ ╭considering: usery}{*}{:}}
+ ├───────text: usery
+ ├considering: }{*}{:}}
+ ├───expanded: usery
+ ╰─────result: usery
├──condition: eq░{$address_data}{usery}
├─────result: true
╭considering: *}{:}}
@@ -1516,6 +1548,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_rcvhost
├─────result: false
╭───scanning: from░$sender_rcvhost↩
@@ -1559,6 +1592,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_ident
├─────result: true
╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -1612,6 +1646,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_helo_name
├─────result: true
╭considering: (helo=$sender_helo_name)↩
@@ -1686,6 +1721,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_protocol
├─────result: true
╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -1720,6 +1756,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
@@ -1733,6 +1770,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:tls_in_cipher_std
├─────result: false
╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -1783,6 +1821,7 @@ try option received_header_text
├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_address
├─────result: true
╭considering: (envelope-from░<$sender_address>)↩
@@ -1815,6 +1854,7 @@ try option received_header_text
├──────value: 10HmbB-000000005vi-0000
├considering: ${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_for
├─────result: true
╭considering: ↩
diff --git a/test/stderr/5420 b/test/stderr/5420
index caa9e0de0..a157bf5f5 100644
--- a/test/stderr/5420
+++ b/test/stderr/5420
@@ -44,16 +44,17 @@ try option acl_smtp_expn
try option acl_smtp_mail
try option acl_smtp_rcpt
╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}}
- ╭considering: SERVER}{server}{queue}{cutthrough}}
- ├───────text: SERVER
- ├considering: }{server}{queue}{cutthrough}}
- ├───expanded: SERVER
- ╰─────result: SERVER
- ╭considering: server}{queue}{cutthrough}}
- ├───────text: server
- ├considering: }{queue}{cutthrough}}
- ├───expanded: server
- ╰─────result: server
+ cond: eq
+ ╭considering: SERVER}{server}{queue}{cutthrough}}
+ ├───────text: SERVER
+ ├considering: }{server}{queue}{cutthrough}}
+ ├───expanded: SERVER
+ ╰─────result: SERVER
+ ╭considering: server}{queue}{cutthrough}}
+ ├───────text: server
+ ├considering: }{queue}{cutthrough}}
+ ├───expanded: server
+ ╰─────result: server
├──condition: eq░{SERVER}{server}
├─────result: false
╭───scanning: queue}{cutthrough}}
@@ -147,30 +148,33 @@ cmd buf flush ddd bytes
250 HELP
try option host_name_extract
╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value: 127.0.0.1
- ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $host
- ╰─────result: 127.0.0.1
- ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───────text: .outlook.com
- ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├backslashed: '\$'
- ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: .outlook.com\$
- ╰─────result: .outlook.com$
- ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value:
- ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $item
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
- ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
- ├──protected: ^250-([\w.]+)\s
- ├───scanning: }}}░{$1}}
- ├───expanded: \N^250-([\w.]+)\s\N
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
+ cond: and
+ cond: match
+ ╎╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value: 127.0.0.1
+ ╎├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $host
+ ╎╰─────result: 127.0.0.1
+ ╎╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───────text: .outlook.com
+ ╎├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├backslashed: '\$'
+ ╎├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: .outlook.com\$
+ ╎╰─────result: .outlook.com$
+ cond: match
+ ╎╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value:
+ ╎├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $item
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
+ ╎╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──protected: ^250-([\w.]+)\s
+ ╎├───scanning: }}}░{$1}}
+ ╎├───expanded: \N^250-([\w.]+)\s\N
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}
├─────result: false
╭───scanning: $1}}
@@ -181,18 +185,19 @@ try option host_name_extract
├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
╰─────result:
╭considering: ${if░eq░{$address_data}{usery}{*}{:}}
- ╭considering: $address_data}{usery}{*}{:}}
- ├──────value: userx
- ╰──(tainted)
- ├considering: }{usery}{*}{:}}
- ├───expanded: $address_data
- ╰─────result: userx
- ╰──(tainted)
- ╭considering: usery}{*}{:}}
- ├───────text: usery
- ├considering: }{*}{:}}
- ├───expanded: usery
- ╰─────result: usery
+ cond: eq
+ ╭considering: $address_data}{usery}{*}{:}}
+ ├──────value: userx
+ ╰──(tainted)
+ ├considering: }{usery}{*}{:}}
+ ├───expanded: $address_data
+ ╰─────result: userx
+ ╰──(tainted)
+ ╭considering: usery}{*}{:}}
+ ├───────text: usery
+ ├considering: }{*}{:}}
+ ├───expanded: usery
+ ╰─────result: usery
├──condition: eq░{$address_data}{usery}
├─────result: false
╭───scanning: *}{:}}
@@ -212,18 +217,19 @@ try option host_name_extract
list element:
127.0.0.1 in hosts_avoid_tls? no (end of list)
╭considering: ${if░eq░{$address_data}{userz}{*}{:}}
- ╭considering: $address_data}{userz}{*}{:}}
- ├──────value: userx
- ╰──(tainted)
- ├considering: }{userz}{*}{:}}
- ├───expanded: $address_data
- ╰─────result: userx
- ╰──(tainted)
- ╭considering: userz}{*}{:}}
- ├───────text: userz
- ├considering: }{*}{:}}
- ├───expanded: userz
- ╰─────result: userz
+ cond: eq
+ ╭considering: $address_data}{userz}{*}{:}}
+ ├──────value: userx
+ ╰──(tainted)
+ ├considering: }{userz}{*}{:}}
+ ├───expanded: $address_data
+ ╰─────result: userx
+ ╰──(tainted)
+ ╭considering: userz}{*}{:}}
+ ├───────text: userz
+ ├considering: }{*}{:}}
+ ├───expanded: userz
+ ╰─────result: userz
├──condition: eq░{$address_data}{userz}
├─────result: false
╭───scanning: *}{:}}
@@ -302,6 +308,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_rcvhost
├─────result: false
╭───scanning: from░$sender_rcvhost↩
@@ -345,6 +352,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_ident
├─────result: true
╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -398,6 +406,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_helo_name
├─────result: true
╭considering: (helo=$sender_helo_name)↩
@@ -472,6 +481,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_protocol
├─────result: true
╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -506,6 +516,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
@@ -519,6 +530,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:tls_in_cipher_std
├─────result: false
╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -569,6 +581,7 @@ try option received_header_text
├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_address
├─────result: true
╭considering: (envelope-from░<$sender_address>)↩
@@ -601,6 +614,7 @@ try option received_header_text
├──────value: 10HmaX-000000005vi-0000
├considering: ${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_for
├─────result: true
╭considering: ↩
@@ -701,16 +715,17 @@ try option acl_smtp_expn
try option acl_smtp_mail
try option acl_smtp_rcpt
╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}}
- ╭considering: SERVER}{server}{queue}{cutthrough}}
- ├───────text: SERVER
- ├considering: }{server}{queue}{cutthrough}}
- ├───expanded: SERVER
- ╰─────result: SERVER
- ╭considering: server}{queue}{cutthrough}}
- ├───────text: server
- ├considering: }{queue}{cutthrough}}
- ├───expanded: server
- ╰─────result: server
+ cond: eq
+ ╭considering: SERVER}{server}{queue}{cutthrough}}
+ ├───────text: SERVER
+ ├considering: }{server}{queue}{cutthrough}}
+ ├───expanded: SERVER
+ ╰─────result: SERVER
+ ╭considering: server}{queue}{cutthrough}}
+ ├───────text: server
+ ├considering: }{queue}{cutthrough}}
+ ├───expanded: server
+ ╰─────result: server
├──condition: eq░{SERVER}{server}
├─────result: false
╭───scanning: queue}{cutthrough}}
@@ -804,30 +819,33 @@ cmd buf flush ddd bytes
250 HELP
try option host_name_extract
╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value: 127.0.0.1
- ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $host
- ╰─────result: 127.0.0.1
- ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───────text: .outlook.com
- ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├backslashed: '\$'
- ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: .outlook.com\$
- ╰─────result: .outlook.com$
- ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value:
- ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $item
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
- ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
- ├──protected: ^250-([\w.]+)\s
- ├───scanning: }}}░{$1}}
- ├───expanded: \N^250-([\w.]+)\s\N
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
+ cond: and
+ cond: match
+ ╎╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value: 127.0.0.1
+ ╎├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $host
+ ╎╰─────result: 127.0.0.1
+ ╎╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───────text: .outlook.com
+ ╎├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├backslashed: '\$'
+ ╎├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: .outlook.com\$
+ ╎╰─────result: .outlook.com$
+ cond: match
+ ╎╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value:
+ ╎├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $item
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
+ ╎╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──protected: ^250-([\w.]+)\s
+ ╎├───scanning: }}}░{$1}}
+ ╎├───expanded: \N^250-([\w.]+)\s\N
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}
├─────result: false
╭───scanning: $1}}
@@ -838,18 +856,19 @@ try option host_name_extract
├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
╰─────result:
╭considering: ${if░eq░{$address_data}{usery}{*}{:}}
- ╭considering: $address_data}{usery}{*}{:}}
- ├──────value: usery
- ╰──(tainted)
- ├considering: }{usery}{*}{:}}
- ├───expanded: $address_data
- ╰─────result: usery
- ╰──(tainted)
- ╭considering: usery}{*}{:}}
- ├───────text: usery
- ├considering: }{*}{:}}
- ├───expanded: usery
- ╰─────result: usery
+ cond: eq
+ ╭considering: $address_data}{usery}{*}{:}}
+ ├──────value: usery
+ ╰──(tainted)
+ ├considering: }{usery}{*}{:}}
+ ├───expanded: $address_data
+ ╰─────result: usery
+ ╰──(tainted)
+ ╭considering: usery}{*}{:}}
+ ├───────text: usery
+ ├considering: }{*}{:}}
+ ├───expanded: usery
+ ╰─────result: usery
├──condition: eq░{$address_data}{usery}
├─────result: true
╭considering: *}{:}}
@@ -909,6 +928,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_rcvhost
├─────result: false
╭───scanning: from░$sender_rcvhost↩
@@ -952,6 +972,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_ident
├─────result: true
╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -1005,6 +1026,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_helo_name
├─────result: true
╭considering: (helo=$sender_helo_name)↩
@@ -1079,6 +1101,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_protocol
├─────result: true
╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -1113,6 +1136,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
@@ -1126,6 +1150,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:tls_in_cipher_std
├─────result: false
╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -1176,6 +1201,7 @@ try option received_header_text
├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_address
├─────result: true
╭considering: (envelope-from░<$sender_address>)↩
@@ -1208,6 +1234,7 @@ try option received_header_text
├──────value: 10HmaZ-000000005vi-0000
├considering: ${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_for
├─────result: true
╭considering: ↩
@@ -1308,16 +1335,17 @@ try option acl_smtp_expn
try option acl_smtp_mail
try option acl_smtp_rcpt
╭considering: ${if░eq░{SERVER}{server}{queue}{cutthrough}}
- ╭considering: SERVER}{server}{queue}{cutthrough}}
- ├───────text: SERVER
- ├considering: }{server}{queue}{cutthrough}}
- ├───expanded: SERVER
- ╰─────result: SERVER
- ╭considering: server}{queue}{cutthrough}}
- ├───────text: server
- ├considering: }{queue}{cutthrough}}
- ├───expanded: server
- ╰─────result: server
+ cond: eq
+ ╭considering: SERVER}{server}{queue}{cutthrough}}
+ ├───────text: SERVER
+ ├considering: }{server}{queue}{cutthrough}}
+ ├───expanded: SERVER
+ ╰─────result: SERVER
+ ╭considering: server}{queue}{cutthrough}}
+ ├───────text: server
+ ├considering: }{queue}{cutthrough}}
+ ├───expanded: server
+ ╰─────result: server
├──condition: eq░{SERVER}{server}
├─────result: false
╭───scanning: queue}{cutthrough}}
@@ -1411,30 +1439,33 @@ cmd buf flush ddd bytes
250 HELP
try option host_name_extract
╭considering: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value: 127.0.0.1
- ├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $host
- ╰─────result: 127.0.0.1
- ╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───────text: .outlook.com
- ├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├backslashed: '\$'
- ├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: .outlook.com\$
- ╰─────result: .outlook.com$
- ╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├──────value:
- ├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
- ├───expanded: $item
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
- ╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
- ├──protected: ^250-([\w.]+)\s
- ├───scanning: }}}░{$1}}
- ├───expanded: \N^250-([\w.]+)\s\N
- ├─────result: ◀skipped▶
- ╰───skipping: result is not used
+ cond: and
+ cond: match
+ ╎╭considering: $host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value: 127.0.0.1
+ ╎├considering: }{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $host
+ ╎╰─────result: 127.0.0.1
+ ╎╭considering: .outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───────text: .outlook.com
+ ╎├considering: \$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├backslashed: '\$'
+ ╎├considering: }}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: .outlook.com\$
+ ╎╰─────result: .outlook.com$
+ cond: match
+ ╎╭───scanning: $item}{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──────value:
+ ╎├───scanning: }{\N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├───expanded: $item
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
+ ╎╭───scanning: \N^250-([\w.]+)\s\N}}}░{$1}}
+ ╎├──protected: ^250-([\w.]+)\s
+ ╎├───scanning: }}}░{$1}}
+ ╎├───expanded: \N^250-([\w.]+)\s\N
+ ╎├─────result: ◀skipped▶
+ ╎╰───skipping: result is not used
├──condition: and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}
├─────result: false
╭───scanning: $1}}
@@ -1445,18 +1476,19 @@ try option host_name_extract
├───expanded: ${if░and░{{match{$host}{.outlook.com\$}}░{match{$item}{\N^250-([\w.]+)\s\N}}}░{$1}}
╰─────result:
╭considering: ${if░eq░{$address_data}{usery}{*}{:}}
- ╭considering: $address_data}{usery}{*}{:}}
- ├──────value: usery
- ╰──(tainted)
- ├considering: }{usery}{*}{:}}
- ├───expanded: $address_data
- ╰─────result: usery
- ╰──(tainted)
- ╭considering: usery}{*}{:}}
- ├───────text: usery
- ├considering: }{*}{:}}
- ├───expanded: usery
- ╰─────result: usery
+ cond: eq
+ ╭considering: $address_data}{usery}{*}{:}}
+ ├──────value: usery
+ ╰──(tainted)
+ ├considering: }{usery}{*}{:}}
+ ├───expanded: $address_data
+ ╰─────result: usery
+ ╰──(tainted)
+ ╭considering: usery}{*}{:}}
+ ├───────text: usery
+ ├considering: }{*}{:}}
+ ├───expanded: usery
+ ╰─────result: usery
├──condition: eq░{$address_data}{usery}
├─────result: true
╭considering: *}{:}}
@@ -1516,6 +1548,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_rcvhost
├─────result: false
╭───scanning: from░$sender_rcvhost↩
@@ -1559,6 +1592,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_ident
├─────result: true
╭considering: from░${quote_local_part:$sender_ident}░}}${if░def:sender_helo_name░{(helo=$sender_helo_name)↩
@@ -1612,6 +1646,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_helo_name
├─────result: true
╭considering: (helo=$sender_helo_name)↩
@@ -1686,6 +1721,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_protocol
├─────result: true
╭considering: with░$received_protocol░}}${if░def:tls_in_ver░░░░░░░░{░($tls_in_ver)}}${if░def:tls_in_cipher_std░{░tls░$tls_in_cipher_std↩
@@ -1720,6 +1756,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
@@ -1733,6 +1770,7 @@ try option received_header_text
␉${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:tls_in_cipher_std
├─────result: false
╭───scanning: ░tls░$tls_in_cipher_std↩
@@ -1783,6 +1821,7 @@ try option received_header_text
├considering: ${if░def:sender_address░{(envelope-from░<$sender_address>)↩
␉}}id░$message_exim_id${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:sender_address
├─────result: true
╭considering: (envelope-from░<$sender_address>)↩
@@ -1815,6 +1854,7 @@ try option received_header_text
├──────value: 10HmbB-000000005vi-0000
├considering: ${if░def:received_for░{↩
␉for░$received_for}}
+ cond: def
├──condition: def:received_for
├─────result: true
╭considering: ↩
--
## 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/