From 0e4b2a6e28fec7514397d4341c6c4e4190523e2c Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Fri, 26 Jul 2024 13:03:27 +0100 Subject: [PATCH] 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@myhost.test.ex - 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@myhost.test.ex -added retry item for T:userx@myhost.test.ex: errno=dd more_errno=dd flags=1 +added retry delete-item for T:userx@myhost.test.ex: errno=dd more_errno=dd flags=1 LOG: MAIN => 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@test.ex checking router retry status no domain retry record have address retry record; next_try = now+0 -added retry item for R:userx@test.ex:: errno=-1 more_errno=dd flags=1 -added retry item for R:userx@test.ex: 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@test.ex:: errno=-1 more_errno=dd flags=1 +added retry delete-item for R:userx@test.ex: 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@test.ex checking router retry status no domain retry record have address retry record; next_try = now+0 -added retry item for R:userx@test.ex:: errno=-1 more_errno=dd flags=1 -added retry item for R:userx@test.ex: 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@test.ex:: errno=-1 more_errno=dd flags=1 +added retry delete-item for R:userx@test.ex: 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@test.ex checking router retry status no domain retry record have address retry record; next_try = now+0 -added retry item for R:usery@test.ex:: errno=-1 more_errno=dd flags=1 -added retry item for R:usery@test.ex: 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@test.ex:: errno=-1 more_errno=dd flags=1 -added retry item for R:userx@test.ex: 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@test.ex:: errno=-1 more_errno=dd flags=1 +added retry delete-item for R:usery@test.ex: 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@test.ex:: errno=-1 more_errno=dd flags=1 +added retry delete-item for R:userx@test.ex: 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@mxt1.test.ex 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@domain2.ex 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:: 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:: 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:: 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:: 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: ↩ -- 2.30.2