Debug: expansion conditions, hints deletes, retry deletes
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 26 Jul 2024 12:03:27 +0000 (13:03 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Fri, 26 Jul 2024 18:07:52 +0000 (19:07 +0100)
16 files changed:
src/src/dbfn.c
src/src/expand.c
src/src/retry.c
test/stderr/0002
test/stderr/0092
test/stderr/0169
test/stderr/0357
test/stderr/0358
test/stderr/0402
test/stderr/0499
test/stderr/0544
test/stderr/0554
test/stderr/0632
test/stderr/3400
test/stderr/5410
test/stderr/5420

index 1044611cca1b276e0fb136c116d015395d83dc68..b9eef503fc7f1c149366ff1fde64371101710157 100644 (file)
@@ -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;
 }
 
 
index ca9c7c3aceeead0abaf7ca5935bd2237c251f181..cc8b12224a7d020e2c91fea260bf0abca55f7308 100644 (file)
@@ -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;
 }
 
 
index c32bd85b7c21e85f3842f37e875979735bdddbcd..6e4a3459dae7ba5dbcc25a2e3fc0bbc28f95e678 100644 (file)
@@ -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);
index 2b8eed427d964f8a7c0010a5f9efd257f3f8de9b..0632de1464a7d616083145472c2e0407efc02aff 100644 (file)
@@ -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 >>>>>>>>>>>>>>>>
index 04e219a0ee37eb84bcb417cd31a003336694fb10..ef51388cdf58787c9299fce9d9dd48021f8a12b0 100644 (file)
@@ -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
index 5d4eb6dc19ab6d9e43a86b1e7e3c7c8d86917157..714c37e49d66b23ccb78bd129a2e6e8baad58286 100644 (file)
@@ -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 <userx@myhost.test.ex> R=localuser T=appendfile
 LOG: MAIN
index 4048d801fa6ba40a3294c1979a7d00f177c14ed1..6b347cef3dd12235b2853538856da8e5b12d8c9e 100644 (file)
@@ -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:<CALLER@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:<CALLER@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:<CALLER@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:<CALLER@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:
index d51bcf1a90014cd632ba11d624fff93e6a2c5d70..9dd2c514b6e4f36f8b96a0f01340aa9c46037505 100644 (file)
@@ -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:<CALLER@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:<CALLER@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:<CALLER@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:<CALLER@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:
index a9dab0cdc8cdb76c0fd2b465a0a60a50b0aa4b31..8c4dda874a8a992c64f4c8af052ad3324e5ad60b 100644 (file)
@@ -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}↩
index ebc043e8e213005b65a6b3dc57e6807cbacd70e0..4d882260a0539228d8448cd84d217c6abf129fcd 100644 (file)
@@ -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
index 091834313ddc031bbf7a336276c2097895f38979..de449b1239d5fefdae921bbe0d9126144b6d9c10 100644 (file)
@@ -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}}
index d8ee0171aff33da2e3de21b35746f560427b51d6..8e320f709ce3ee319c7cd8cc1820f186efda3ef1 100644 (file)
@@ -47,9 +47,9 @@ Considering: x@y
 checking router retry status
  no   domain  retry record
  have address retry record; next_try = now+0
-added retry item for R:x@y:<CALLER@myhost.test.ex>: errno=-1 more_errno=dd flags=1
-added retry item for R:x@y: errno=-1 more_errno=dd flags=1
-added retry item for R:y: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:x@y:<CALLER@myhost.test.ex>: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:x@y: errno=-1 more_errno=dd flags=1
+added retry delete-item for R:y: errno=-1 more_errno=dd flags=1
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 After routing:
   Local deliveries:
@@ -60,8 +60,8 @@ After routing:
 checking retry status of 127.0.0.1
  no host retry record
  no message retry record
-added retry item for R:x@y:<CALLER@myhost.test.ex>: errno=dd more_errno=dd,A flags=1
-added retry item for R:x@y: errno=dd more_errno=dd,A flags=1
+added retry delete-item for R:x@y:<CALLER@myhost.test.ex>: 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
index d7fac294a91bff9ebf45c989691e044e970c7a0c..8855f4e385a41717c34a63f7b40df7ff0241b877 100644 (file)
@@ -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: ↩
index 915c6e8f1ee0b963f5fbbda54dd86e4bd23cc60e..e9b3221c82c59d68479db877797ecb6de2aa92ce 100644 (file)
@@ -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
index 9b4f0ff8a60403e65f8ed433af6a26b3f0dd6a0d..4ee810ac3da7aecd44b0eab41a39a1d45e367dd7 100644 (file)
@@ -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: ↩
index caa9e0de015c63847f7fc542e4d72d4af50461e9..a157bf5f51eb24f6a6dc47fdbd9ca8e4f7de67b2 100644 (file)
@@ -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: ↩