Debug: more detail for expansion items
authorJeremy Harris <jgh146exb@wizmail.org>
Thu, 20 Jan 2022 23:58:36 +0000 (23:58 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Thu, 20 Jan 2022 23:58:36 +0000 (23:58 +0000)
doc/doc-txt/ChangeLog
src/src/expand.c
test/stderr/0002
test/stderr/0092
test/stderr/0402
test/stderr/0544
test/stderr/5410
test/stderr/5420

index 33285f9b9df12155e89cd576e40febe23350bb1a..6cb01863d788da1e1125b87bb0f937b85eed4be1 100644 (file)
@@ -74,7 +74,7 @@ JH/16 Debugging initiated by an ACL control now continues through into routing
       stopped any time Exim re-execs.
 
 JH/17 The "expand" debug selector now gives more detail, specifically on the
-      result of expansion operators (as opposed to expansion items).
+      result of expansion operators and items.
 
 
 Exim version 4.95
index f7c8f05374e03f28c15911f631830dbb60e13200..cff5e9c1ab795d2f66f70b6b51afef03f8a70a8a 100644 (file)
@@ -4398,6 +4398,36 @@ return yield;
 
 
 
+/************************************************/
+static void
+debug_expansion_interim(const uschar * what, const uschar * value, int nchar,
+  BOOL skipping)
+{
+DEBUG(D_noutf8)
+  debug_printf_indent("|");
+else
+  debug_printf_indent(UTF8_VERT_RIGHT);
+
+for (int fill = 11 - Ustrlen(what); fill > 0; fill--)
+  DEBUG(D_noutf8)
+    debug_printf("-");
+  else
+    debug_printf(UTF8_HORIZ);
+
+debug_printf("%s: %.*s\n", what, nchar, value);
+if (is_tainted(value))
+  {
+  DEBUG(D_noutf8)
+    debug_printf_indent("%s     \\__", skipping ? "|     " : "      ");
+  else
+    debug_printf_indent("%s",
+      skipping
+      ? UTF8_VERT "             " : "           " UTF8_UP_RIGHT UTF8_HORIZ UTF8_HORIZ);
+  debug_printf("(tainted)\n");
+  }
+}
+
+
 /*************************************************
 *                 Expand string                  *
 *************************************************/
@@ -4522,14 +4552,11 @@ while (*s)
       {
       const uschar * t = s + 2;
       for (s = t; *s ; s++) if (*s == '\\' && s[1] == 'N') break;
+
       DEBUG(D_expand)
-       DEBUG(D_noutf8)
-         debug_printf_indent("|--protected: %.*s\n", (int)(s - t), t);
-       else
-         debug_printf_indent(UTF8_VERT_RIGHT UTF8_HORIZ UTF8_HORIZ
-           "protected: %.*s\n", (int)(s - t), t);
+       debug_expansion_interim(US"protected", t, (int)(s - t), skipping);
       yield = string_catn(yield, t, s - t);
-      if (*s != 0) s += 2;
+      if (*s) s += 2;
       }
     else
       {
@@ -4558,13 +4585,7 @@ while (*s)
     for (const uschar * t = s+1;
        *t && *t != '$' && *t != '}' && *t != '\\'; t++) i++;
 
-    DEBUG(D_expand)
-      DEBUG(D_noutf8)
-       debug_printf_indent("|-------text: %.*s\n", i, s);
-      else
-       debug_printf_indent(UTF8_VERT_RIGHT
-         UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ
-         "text: %.*s\n", i, s);
+    DEBUG(D_expand) debug_expansion_interim(US"text", s, i, skipping);
 
     yield = string_catn(yield, s, i);
     s += i;
@@ -4708,6 +4729,11 @@ while (*s)
   s = read_name(name, sizeof(name), s, US"_-");
   item_type = chop_match(name, item_table, nelem(item_table));
 
+  /* Switch on item type.  All nondefault choices should "continue* when
+  skipping, but "break" otherwise so we get debug output for the item
+  expansion. */
+  {
+  int start = yield->ptr;
   switch(item_type)
     {
     /* Call an ACL from an expansion.  We feed data in via $acl_arg1 - $acl_arg9.
@@ -4722,8 +4748,8 @@ while (*s)
     case EITEM_ACL:
       /* ${acl {name} {arg1}{arg2}...} */
       {
-      uschar *sub[10]; /* name + arg1-arg9 (which must match number of acl_arg[]) */
-      uschar *user_msg;
+      uschar * sub[10];        /* name + arg1-arg9 (which must match number of acl_arg[]) */
+      uschar * user_msg;
       int rc;
 
       switch(read_subs(sub, nelem(sub), 1, &s, skipping, TRUE, name,
@@ -4744,7 +4770,7 @@ while (*s)
            debug_printf_indent("acl expansion yield: %s\n", user_msg);
          if (user_msg)
             yield = string_cat(yield, user_msg);
-         continue;
+         break;
 
        case DEFER:
           f.expand_string_forcedfail = TRUE;
@@ -4754,12 +4780,13 @@ while (*s)
            rc_names[rc], sub[0]);
          goto EXPAND_FAILED;
        }
+      break;
       }
 
     case EITEM_AUTHRESULTS:
       /* ${authresults {mysystemname}} */
       {
-      uschar *sub_arg[1];
+      uschar * sub_arg[1];
 
       switch(read_subs(sub_arg, nelem(sub_arg), 1, &s, skipping, TRUE, name,
                      &resetok))
@@ -4788,7 +4815,7 @@ while (*s)
 #ifdef EXPERIMENTAL_ARC
       yield = authres_arc(yield);
 #endif
-      continue;
+      break;
       }
 
     /* Handle conditionals - preserve the values of the numerical expansion
@@ -4808,21 +4835,11 @@ while (*s)
        goto EXPAND_FAILED;  /* message already set */
 
       DEBUG(D_expand)
-       DEBUG(D_noutf8)
-         {
-         debug_printf_indent("|--condition: %.*s\n", (int)(next_s - s), s);
-         debug_printf_indent("|-----result: %s\n", cond ? "true" : "false");
-         }
-       else
-         {
-         debug_printf_indent(UTF8_VERT_RIGHT UTF8_HORIZ UTF8_HORIZ
-           "condition: %.*s\n",
-           (int)(next_s - s), s);
-         debug_printf_indent(UTF8_VERT_RIGHT UTF8_HORIZ UTF8_HORIZ
-           UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ
-           "result: %s\n",
-           cond ? "true" : "false");
-         }
+       {
+       debug_expansion_interim(US"condition", s, (int)(next_s - s), skipping);
+       debug_expansion_interim(US"result",
+         cond ? US"true" : US"false", cond ? 4 : 5, skipping);
+       }
 
       s = next_s;
 
@@ -4847,7 +4864,7 @@ while (*s)
 
       restore_expand_strings(save_expand_nmax, save_expand_nstring,
         save_expand_nlength);
-      continue;
+      break;
       }
 
 #ifdef SUPPORT_I18N
@@ -4878,14 +4895,13 @@ while (*s)
        goto EXPAND_FAILED;
        }
 
-      if (!skipping)
-       {
-       if (!(encoded = imap_utf7_encode(sub_arg[0], headers_charset,
-                           sub_arg[1][0], sub_arg[2], &expand_string_message)))
-         goto EXPAND_FAILED;
-       yield = string_cat(yield, encoded);
-       }
-      continue;
+      if (skipping) continue;
+
+      if (!(encoded = imap_utf7_encode(sub_arg[0], headers_charset,
+                         sub_arg[1][0], sub_arg[2], &expand_string_message)))
+       goto EXPAND_FAILED;
+      yield = string_cat(yield, encoded);
+      break;
       }
 #endif
 
@@ -4901,9 +4917,9 @@ while (*s)
       int stype, partial, affixlen, starflags;
       int expand_setup = 0;
       int nameptr = 0;
-      uschar *key, *filename;
+      uschar * key, * filename;
       const uschar * affix, * opts;
-      uschar *save_lookup_value = lookup_value;
+      uschar * save_lookup_value = lookup_value;
       int save_expand_nmax =
         save_expand_strings(save_expand_nstring, save_expand_nlength);
 
@@ -4971,15 +4987,12 @@ while (*s)
           goto EXPAND_FAILED;
           }
         }
-      else
-        {
-        if (key)
-          {
-          expand_string_message = string_sprintf("a single key was given for "
-            "lookup type \"%s\", which is not a single-key lookup type", name);
-          goto EXPAND_FAILED;
-          }
-        }
+      else if (key)
+       {
+       expand_string_message = string_sprintf("a single key was given for "
+         "lookup type \"%s\", which is not a single-key lookup type", name);
+       goto EXPAND_FAILED;
+       }
 
       /* Get the next string in brackets and expand it. It is the file name for
       single-key+file lookups, and the whole query otherwise. In the case of
@@ -5065,7 +5078,9 @@ while (*s)
 
       restore_expand_strings(save_expand_nmax, save_expand_nstring,
         save_expand_nlength);
-      continue;
+
+      if (skipping) continue;
+      break;
       }
 
     /* If Perl support is configured, handle calling embedded perl subroutines,
@@ -5083,10 +5098,10 @@ while (*s)
 
 #else   /* EXIM_PERL */
       {
-      uschar *sub_arg[EXIM_PERL_MAX_ARGS + 2];
-      gstring *new_yield;
+      uschar * sub_arg[EXIM_PERL_MAX_ARGS + 2];
+      gstring * new_yield;
 
-      if ((expand_forbid & RDO_PERL) != 0)
+      if (expand_forbid & RDO_PERL)
         {
         expand_string_message = US"Perl calls are not permitted";
         goto EXPAND_FAILED;
@@ -5108,7 +5123,7 @@ while (*s)
 
       if (!opt_perl_started)
         {
-        uschar *initerror;
+        uschar * initerror;
         if (!opt_perl_startup)
           {
           expand_string_message = US"A setting of perl_startup is needed when "
@@ -5152,7 +5167,7 @@ while (*s)
 
       f.expand_string_forcedfail = FALSE;
       yield = new_yield;
-      continue;
+      break;
       }
 #endif /* EXIM_PERL */
 
@@ -5161,8 +5176,7 @@ while (*s)
 
     case EITEM_PRVS:
       {
-      uschar *sub_arg[3];
-      uschar *p,*domain;
+      uschar * sub_arg[3], * p, * domain;
 
       switch(read_subs(sub_arg, 3, 2, &s, skipping, TRUE, name, &resetok))
         {
@@ -5211,17 +5225,16 @@ while (*s)
       yield = string_catn(yield, US"@", 1);
       yield = string_cat (yield, domain);
 
-      continue;
+      break;
       }
 
     /* Check a prvs-encoded address for validity */
 
     case EITEM_PRVSCHECK:
       {
-      uschar *sub_arg[3];
+      uschar * sub_arg[3], * p;
       gstring * g;
-      const pcre2_code *re;
-      uschar *p;
+      const pcre2_code * re;
 
       /* TF: Ugliness: We want to expand parameter 1 first, then set
          up expansion variables that are used in the expansion of
@@ -5250,11 +5263,11 @@ while (*s)
 
       if (regex_match_and_setup(re,sub_arg[0],0,-1))
         {
-        uschar *local_part = string_copyn(expand_nstring[4],expand_nlength[4]);
-        uschar *key_num = string_copyn(expand_nstring[1],expand_nlength[1]);
-        uschar *daystamp = string_copyn(expand_nstring[2],expand_nlength[2]);
-        uschar *hash = string_copyn(expand_nstring[3],expand_nlength[3]);
-        uschar *domain = string_copyn(expand_nstring[5],expand_nlength[5]);
+        uschar * local_part = string_copyn(expand_nstring[4],expand_nlength[4]);
+        uschar * key_num = string_copyn(expand_nstring[1],expand_nlength[1]);
+        uschar * daystamp = string_copyn(expand_nstring[2],expand_nlength[2]);
+        uschar * hash = string_copyn(expand_nstring[3],expand_nlength[3]);
+        uschar * domain = string_copyn(expand_nstring[5],expand_nlength[5]);
 
         DEBUG(D_expand) debug_printf_indent("prvscheck localpart: %s\n", local_part);
         DEBUG(D_expand) debug_printf_indent("prvscheck key number: %s\n", key_num);
@@ -5352,15 +5365,16 @@ while (*s)
           case 3: goto EXPAND_FAILED;
           }
 
-      continue;
+      if (skipping) continue;
+      break;
       }
 
     /* Handle "readfile" to insert an entire file */
 
     case EITEM_READFILE:
       {
-      FILE *f;
-      uschar *sub_arg[2];
+      FILE * f;
+      uschar * sub_arg[2];
 
       if ((expand_forbid & RDO_READFILE) != 0)
         {
@@ -5389,7 +5403,7 @@ while (*s)
 
       yield = cat_file(f, yield, sub_arg[1]);
       (void)fclose(f);
-      continue;
+      break;
       }
 
     /* Handle "readsocket" to insert data from a socket, either
@@ -5513,7 +5527,8 @@ while (*s)
        expand_string_message = US"missing '}' closing readsocket";
        goto EXPAND_FAILED_CURLY;
        }
-      continue;
+      if (skipping) continue;
+      break;
 
       /* Come here on failure to create socket, connect socket, write to the
       socket, or timeout on reading. If another substring follows, expand and
@@ -5538,9 +5553,9 @@ while (*s)
 
     case EITEM_RUN:
       {
-      FILE *f;
-      uschar *arg;
-      const uschar **argv;
+      FILE * f;
+      uschar * arg;
+      const uschar ** argv;
       pid_t pid;
       int fd_in, fd_out;
 
@@ -5647,7 +5662,8 @@ while (*s)
         case 2: goto EXPAND_FAILED_CURLY;    /* returned value is 0 */
         }
 
-      continue;
+      if (skipping) continue;
+      break;
       }
 
     /* Handle character translation for "tr" */
@@ -5656,7 +5672,7 @@ while (*s)
       {
       int oldptr = gstring_length(yield);
       int o2m;
-      uschar *sub[3];
+      uschar * sub[3];
 
       switch(read_subs(sub, 3, 3, &s, skipping, TRUE, name, &resetok))
         {
@@ -5678,7 +5694,8 @@ while (*s)
           }
         }
 
-      continue;
+      if (skipping) continue;
+      break;
       }
 
     /* Handle "hash", "length", "nhash", and "substr" when they are given with
@@ -5692,7 +5709,7 @@ while (*s)
       int len;
       uschar *ret;
       int val[2] = { 0, -1 };
-      uschar *sub[3];
+      uschar * sub[3];
 
       /* "length" takes only 2 arguments whereas the others take 2 or 3.
       Ensure that sub[2] is set in the ${length } case. */
@@ -5741,7 +5758,8 @@ while (*s)
       if (!ret)
        goto EXPAND_FAILED;
       yield = string_catn(yield, ret, len);
-      continue;
+      if (skipping) continue;
+      break;
       }
 
     /* Handle HMAC computation: ${hmac{<algorithm>}{<secret>}{<text>}}
@@ -5756,14 +5774,14 @@ while (*s)
 
     case EITEM_HMAC:
       {
-      uschar *sub[3];
+      uschar * sub[3];
       md5 md5_base;
       hctx sha1_ctx;
-      void *use_base;
+      void * use_base;
       int type;
       int hashlen;      /* Number of octets for the hash algorithm's output */
       int hashblocklen; /* Number of octets the hash algorithm processes */
-      uschar *keyptr, *p;
+      uschar * keyptr, * p;
       unsigned int keylen;
 
       uschar keyhash[MAX_HASHLEN];
@@ -5780,79 +5798,78 @@ while (*s)
         case 3: goto EXPAND_FAILED;
         }
 
-      if (!skipping)
+      if (skipping) continue;
+
+      if (Ustrcmp(sub[0], "md5") == 0)
        {
-       if (Ustrcmp(sub[0], "md5") == 0)
-         {
-         type = HMAC_MD5;
-         use_base = &md5_base;
-         hashlen = 16;
-         hashblocklen = 64;
-         }
-       else if (Ustrcmp(sub[0], "sha1") == 0)
-         {
-         type = HMAC_SHA1;
-         use_base = &sha1_ctx;
-         hashlen = 20;
-         hashblocklen = 64;
-         }
-       else
-         {
-         expand_string_message =
-           string_sprintf("hmac algorithm \"%s\" is not recognised", sub[0]);
-         goto EXPAND_FAILED;
-         }
+       type = HMAC_MD5;
+       use_base = &md5_base;
+       hashlen = 16;
+       hashblocklen = 64;
+       }
+      else if (Ustrcmp(sub[0], "sha1") == 0)
+       {
+       type = HMAC_SHA1;
+       use_base = &sha1_ctx;
+       hashlen = 20;
+       hashblocklen = 64;
+       }
+      else
+       {
+       expand_string_message =
+         string_sprintf("hmac algorithm \"%s\" is not recognised", sub[0]);
+       goto EXPAND_FAILED;
+       }
 
-       keyptr = sub[1];
-       keylen = Ustrlen(keyptr);
+      keyptr = sub[1];
+      keylen = Ustrlen(keyptr);
 
-       /* If the key is longer than the hash block length, then hash the key
-       first */
+      /* If the key is longer than the hash block length, then hash the key
+      first */
 
-       if (keylen > hashblocklen)
-         {
-         chash_start(type, use_base);
-         chash_end(type, use_base, keyptr, keylen, keyhash);
-         keyptr = keyhash;
-         keylen = hashlen;
-         }
+      if (keylen > hashblocklen)
+       {
+       chash_start(type, use_base);
+       chash_end(type, use_base, keyptr, keylen, keyhash);
+       keyptr = keyhash;
+       keylen = hashlen;
+       }
 
-       /* Now make the inner and outer key values */
+      /* Now make the inner and outer key values */
 
-       memset(innerkey, 0x36, hashblocklen);
-       memset(outerkey, 0x5c, hashblocklen);
+      memset(innerkey, 0x36, hashblocklen);
+      memset(outerkey, 0x5c, hashblocklen);
 
-       for (int i = 0; i < keylen; i++)
-         {
-         innerkey[i] ^= keyptr[i];
-         outerkey[i] ^= keyptr[i];
-         }
+      for (int i = 0; i < keylen; i++)
+       {
+       innerkey[i] ^= keyptr[i];
+       outerkey[i] ^= keyptr[i];
+       }
 
-       /* Now do the hashes */
+      /* Now do the hashes */
 
-       chash_start(type, use_base);
-       chash_mid(type, use_base, innerkey);
-       chash_end(type, use_base, sub[2], Ustrlen(sub[2]), innerhash);
+      chash_start(type, use_base);
+      chash_mid(type, use_base, innerkey);
+      chash_end(type, use_base, sub[2], Ustrlen(sub[2]), innerhash);
 
-       chash_start(type, use_base);
-       chash_mid(type, use_base, outerkey);
-       chash_end(type, use_base, innerhash, hashlen, finalhash);
+      chash_start(type, use_base);
+      chash_mid(type, use_base, outerkey);
+      chash_end(type, use_base, innerhash, hashlen, finalhash);
 
-       /* Encode the final hash as a hex string */
+      /* Encode the final hash as a hex string */
 
-       p = finalhash_hex;
-       for (int i = 0; i < hashlen; i++)
-         {
-         *p++ = hex_digits[(finalhash[i] & 0xf0) >> 4];
-         *p++ = hex_digits[finalhash[i] & 0x0f];
-         }
+      p = finalhash_hex;
+      for (int i = 0; i < hashlen; i++)
+       {
+       *p++ = hex_digits[(finalhash[i] & 0xf0) >> 4];
+       *p++ = hex_digits[finalhash[i] & 0x0f];
+       }
 
-       DEBUG(D_any) debug_printf("HMAC[%s](%.*s,%s)=%.*s\n",
-         sub[0], (int)keylen, keyptr, sub[2], hashlen*2, finalhash_hex);
+      DEBUG(D_any) debug_printf("HMAC[%s](%.*s,%s)=%.*s\n",
+       sub[0], (int)keylen, keyptr, sub[2], hashlen*2, finalhash_hex);
 
-       yield = string_catn(yield, finalhash_hex, hashlen*2);
-       }
-      continue;
+      yield = string_catn(yield, finalhash_hex, hashlen*2);
+      break;
       }
 
     /* Handle global substitution for "sg" - like Perl's s/xxx/yyy/g operator.
@@ -5876,6 +5893,7 @@ while (*s)
         case 3: goto EXPAND_FAILED;
         }
 
+      /*XXX no handling of skipping? */
       /* Compile the regular expression */
 
       if (!(re = pcre2_compile((PCRE2_SPTR)sub[1], PCRE2_ZERO_TERMINATED,
@@ -5967,7 +5985,8 @@ while (*s)
 
       restore_expand_strings(save_expand_nmax, save_expand_nstring,
         save_expand_nlength);
-      continue;
+      if (skipping) continue;
+      break;
       }
 
     /* Handle keyed and numbered substring extraction. If the first argument
@@ -6202,7 +6221,8 @@ while (*s)
       restore_expand_strings(save_expand_nmax, save_expand_nstring,
         save_expand_nlength);
 
-      continue;
+      if (skipping) continue;
+      break;
       }
 
     /* return the Nth item from a list */
@@ -6299,7 +6319,8 @@ while (*s)
       restore_expand_strings(save_expand_nmax, save_expand_nstring,
         save_expand_nlength);
 
-      continue;
+      if (skipping) continue;
+      break;
       }
 
     case EITEM_LISTQUOTE:
@@ -6317,7 +6338,8 @@ while (*s)
        yield = string_catn(yield, sub[1], 1);
        }
       else yield = string_catn(yield, US" ", 1);
-      continue;
+      if (skipping) continue;
+      break;
       }
 
 #ifndef DISABLE_TLS
@@ -6395,7 +6417,8 @@ while (*s)
 
       restore_expand_strings(save_expand_nmax, save_expand_nstring,
         save_expand_nlength);
-      continue;
+      if (skipping) continue;
+      break;
       }
 #endif /*DISABLE_TLS*/
 
@@ -6595,7 +6618,8 @@ while (*s)
       /* Restore preserved $item */
 
       iterate_item = save_iterate_item;
-      continue;
+      if (skipping) continue;
+      break;
       }
 
     case EITEM_SORT:
@@ -6708,7 +6732,7 @@ while (*s)
 
          /* field for comparison */
          if (!(dstfield = string_nextinlist(&dstkeylist, &sep, NULL, 0)))
-           goto sort_mismatch;
+           goto SORT_MISMATCH;
 
          /* String-comparator names start with a letter; numeric names do not */
 
@@ -6729,7 +6753,7 @@ while (*s)
            while ((dstitem = string_nextinlist(&dstlist, &sep, NULL, 0)))
              {
              if (!(dstfield = string_nextinlist(&dstkeylist, &sep, NULL, 0)))
-               goto sort_mismatch;
+               goto SORT_MISMATCH;
              newlist = string_append_listele(newlist, sep, dstitem);
              newkeylist = string_append_listele(newkeylist, sep, dstfield);
              }
@@ -6760,9 +6784,9 @@ while (*s)
 
       /* Restore preserved $item */
       iterate_item = save_iterate_item;
-      continue;
+      break;
 
-      sort_mismatch:
+      SORT_MISMATCH:
        expand_string_message = US"Internal error in sort (list mismatch)";
        goto EXPAND_FAILED;
       }
@@ -6861,7 +6885,7 @@ while (*s)
         }
 
       if (result) yield = string_cat(yield, result);
-      continue;
+      break;
       }
 #endif /* EXPAND_DLFUNC */
 
@@ -6895,7 +6919,8 @@ while (*s)
         case 1: goto EXPAND_FAILED;          /* when all is well, the */
         case 2: goto EXPAND_FAILED_CURLY;    /* returned value is 0 */
         }
-      continue;
+      if (skipping) continue;
+      break;
       }
 
 #ifdef SUPPORT_SRS
@@ -6976,10 +7001,25 @@ while (*s)
       /* @$original_domain */
       yield = string_catn(yield, US"@", 1);
       yield = string_cat(yield, sub[2]);
-      continue;
+
+      if (skipping) continue;
+      break;
       }
 #endif /*SUPPORT_SRS*/
+
+    default:
+      goto NOT_ITEM;
     }  /* EITEM_* switch */
+    /*NOTREACHED*/
+
+  DEBUG(D_expand)
+    if (start > 0 || *s)       /* only if not the sole expansion of the line */
+      debug_expansion_interim(US"item-res",
+                             yield->s + start, yield->ptr - start, skipping);
+  continue;
+
+NOT_ITEM:
+  }
 
   /* Control reaches here if the name is not recognized as one of the more
   complicated expansion items. Check for the "operator" syntax (name terminated
@@ -6989,10 +7029,9 @@ while (*s)
   if (*s == ':')
     {
     int c;
-    uschar *arg = NULL;
-    uschar *sub;
+    uschar * arg = NULL, * sub;
 #ifndef DISABLE_TLS
-    var_entry *vp = NULL;
+    var_entry * vp = NULL;
 #endif
 
     /* Owing to an historical mis-design, an underscore may be part of the
@@ -8122,34 +8161,9 @@ while (*s)
        }       /* EOP_* switch */
 
        DEBUG(D_expand)
-       {
-       const uschar * s = yield->s + start;
-       int i = yield->ptr - start;
-       BOOL tainted = is_tainted(s);
-
-       DEBUG(D_noutf8)
-         {
-         debug_printf_indent("|-----op-res: %.*s\n", i, s);
-         if (tainted)
-           {
-           debug_printf_indent("%s     \\__", skipping ? "|     " : "      ");
-           debug_printf("(tainted)\n");
-           }
-         }
-       else
-         {
-         debug_printf_indent(UTF8_VERT_RIGHT
-           UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ UTF8_HORIZ
-           "op-res: %.*s\n", i, s);
-         if (tainted)
-           {
-           debug_printf_indent("%s",
-             skipping
-             ? UTF8_VERT "             " : "           " UTF8_UP_RIGHT UTF8_HORIZ UTF8_HORIZ);
-           debug_printf("(tainted)\n");
-           }
-         }
-       }
+       if (start > 0 || *s)            /* only if not the sole expansion of the line */
+         debug_expansion_interim(US"op-res",
+                                 yield->s + start, yield->ptr - start, skipping);
        continue;
        }
     }
index 81108f28f0afd18a73fee380829f7a5bdc361971..94f47c29b3e55d5f79e2060b9f7fad3bcd551d3d 100644 (file)
@@ -33,6 +33,7 @@ dropping to exim gid; retaining priv uid
   ├considering: }fail}
   ├──expanding: $2$1
   ╰─────result: cdab
+ ├───item-res: cdab
  ├──expanding: match:  ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
  ╰─────result: match:  cdab
  ╭considering: match:  ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
@@ -124,6 +125,7 @@ LOG: MAIN PANIC
   ├considering: }}
   ├──expanding: no
   ╰─────result: no
+ ├───item-res: no
  ├──expanding: match_address:   ${if match_address{a.b.c}{a.b.c}{yes}{no}}
  ╰─────result: match_address:   no
 >>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
@@ -156,6 +158,7 @@ dropping to exim gid; retaining priv uid
   |considering: }fail}
   |--expanding: $2$1
   \_____result: cdab
+ |---item-res: cdab
  |--expanding: match:  ${if match{abcd}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
  \_____result: match:  cdab
  /considering: match:  ${if match{wxyz}{\N^([ab]+)(\w+)$\N}{$2$1}fail}
@@ -247,6 +250,7 @@ LOG: MAIN PANIC
   |considering: }}
   |--expanding: no
   \_____result: no
+ |---item-res: no
  |--expanding: match_address:   ${if match_address{a.b.c}{a.b.c}{yes}{no}}
  \_____result: match_address:   no
 >>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
@@ -383,6 +387,7 @@ dropping to exim gid; retaining priv uid
   ├considering: }}
   ├──expanding: No
   ╰─────result: No
+ ├───item-res: No
  ├──expanding: ----> No lookup yet: ${if eq{black}{white}{$sender_host_name}{No}}
  ╰─────result: ----> No lookup yet: No
  ╭considering: -oMs  sender_host_name = $sender_host_name
index c2bfdd7597a92264923a0206399de299edb8acaf..6fa174dc35eb28810e549e9cbc215735bc680644 100644 (file)
@@ -73,6 +73,7 @@ set_process_info: pppp handling incoming connection from [V4NET.0.0.1]
   ├──expanding: 30
   ├─────result: 30
   ╰───skipping: result is not used
+ ├───item-res: 2
  ├considering: s
  ├───────text: s
  ├──expanding: ${if eq {V4NET.0.0.1} {$sender_host_address} {2} {30}}s
index 92b6e9489b8e130894f2861567cc3194a987ac0b..33b08659c4a6d0307bb0c1d4d7bb0fb0f3f2fb34 100644 (file)
@@ -143,6 +143,7 @@ Data file written for message 10HmaX-0005vi-00
        for $received_for}}
    ├──expanding: from ${quote_local_part:$sender_ident} 
    ╰─────result: from CALLER 
+  ├───item-res: from CALLER 
   ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
@@ -182,6 +183,7 @@ Data file written for message 10HmaX-0005vi-00
    ├─────result: (helo=)
        
    ╰───skipping: result is not used
+  ├───item-res: 
   ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -190,6 +192,7 @@ Data file written for message 10HmaX-0005vi-00
   ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}
   ╰─────result: from CALLER 
+ ├───item-res: from CALLER 
  ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -238,6 +241,7 @@ Data file written for message 10HmaX-0005vi-00
        for $received_for}}
   ├──expanding: with $received_protocol 
   ╰─────result: with local 
+ ├───item-res: with local 
  ├considering: ${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -248,6 +252,7 @@ Data file written for message 10HmaX-0005vi-00
   ├──expanding:  ($tls_in_ver)
   ├─────result:  ()
   ╰───skipping: result is not used
+ ├───item-res: 
  ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -282,6 +287,7 @@ Data file written for message 10HmaX-0005vi-00
   ├─────result:  tls 
        
   ╰───skipping: result is not used
+ ├───item-res: 
  ├considering: (Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
        }}id $message_exim_id${if def:received_for {
@@ -320,6 +326,8 @@ Data file written for message 10HmaX-0005vi-00
        
   ╰─────result: (envelope-from <CALLER@test.ex>)
        
+ ├───item-res: (envelope-from <CALLER@test.ex>)
+       
  ├considering: id $message_exim_id${if def:received_for {
        for $received_for}}
  ├───────text: id 
@@ -340,6 +348,7 @@ Data file written for message 10HmaX-0005vi-00
   ├─────result: 
        for 
   ╰───skipping: result is not used
+ ├───item-res: 
  ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost
        }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
@@ -704,6 +713,8 @@ writing to file TESTSUITE/test-mail/junk
   ├──expanding: MAILER-DAEMON
   ├─────result: MAILER-DAEMON
   ╰───skipping: result is not used
+ ├───item-res: CALLER@test.ex
+            ╰──(tainted)
  ├considering:  ${tod_bsdinbox}
  
  ├───────text:  
@@ -780,6 +791,8 @@ writing to file TESTSUITE/test-mail/junk
   ├──expanding: MAILER-DAEMON
   ├─────result: MAILER-DAEMON
   ╰───skipping: result is not used
+ ├───item-res: CALLER@test.ex
+            ╰──(tainted)
  ├considering:  ${tod_bsdinbox}
  
  ├───────text:  
index 40751acc54e3d152753a2a55a3107779c3ee374e..c5e4ac7ccf56370072bbac00ce296a0ce9643c2e 100644 (file)
@@ -108,6 +108,7 @@ admin user
        for $received_for}}
    ├──expanding: from ${quote_local_part:$sender_ident} 
    ╰─────result: from CALLER 
+  ├───item-res: from CALLER 
   ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
@@ -147,6 +148,7 @@ admin user
    ├─────result: (helo=)
        
    ╰───skipping: result is not used
+  ├───item-res: 
   ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -155,6 +157,7 @@ admin user
   ├──expanding: ${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}
   ╰─────result: from CALLER 
+ ├───item-res: from CALLER 
  ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -203,6 +206,7 @@ admin user
        for $received_for}}
   ├──expanding: with $received_protocol 
   ╰─────result: with local 
+ ├───item-res: with local 
  ├considering: ${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -213,6 +217,7 @@ admin user
   ├──expanding:  ($tls_in_ver)
   ├─────result:  ()
   ╰───skipping: result is not used
+ ├───item-res: 
  ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -247,6 +252,7 @@ admin user
   ├─────result:  tls 
        
   ╰───skipping: result is not used
+ ├───item-res: 
  ├considering: (Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
        }}id $message_exim_id${if def:received_for {
@@ -285,6 +291,8 @@ admin user
        
   ╰─────result: (envelope-from <CALLER@test.ex>)
        
+ ├───item-res: (envelope-from <CALLER@test.ex>)
+       
  ├considering: id $message_exim_id${if def:received_for {
        for $received_for}}
  ├───────text: id 
@@ -305,6 +313,7 @@ admin user
   ├─────result: 
        for 
   ╰───skipping: result is not used
+ ├───item-res: 
  ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost
        }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
index 990fac8981a73c7b4a15766b8138622305d94355..99a829e2b8fc848baeea021e8df17c25fea6c554 100644 (file)
@@ -270,6 +270,7 @@ end of inline ACL: ACCEPT
        for $received_for}}
    ├──expanding: from ${quote_local_part:$sender_ident} 
    ╰─────result: from CALLER 
+  ├───item-res: from CALLER 
   ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
@@ -309,6 +310,9 @@ end of inline ACL: ACCEPT
    ╰─────result: (helo=myhost.test.ex)
        
               ╰──(tainted)
+  ├───item-res: (helo=myhost.test.ex)
+       
+             ╰──(tainted)
   ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -319,6 +323,9 @@ end of inline ACL: ACCEPT
   ╰─────result: from CALLER (helo=myhost.test.ex)
        
              ╰──(tainted)
+ ├───item-res: from CALLER (helo=myhost.test.ex)
+       
+            ╰──(tainted)
  ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -367,6 +374,8 @@ end of inline ACL: ACCEPT
        for $received_for}}
   ├──expanding: with $received_protocol 
   ╰─────result: with local-esmtp 
+ ├───item-res: with local-esmtp 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -377,6 +386,8 @@ end of inline ACL: ACCEPT
   ├──expanding:  ($tls_in_ver)
   ├─────result:  ()
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -411,6 +422,8 @@ end of inline ACL: ACCEPT
   ├─────result:  tls 
        
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: (Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
        }}id $message_exim_id${if def:received_for {
@@ -449,6 +462,9 @@ end of inline ACL: ACCEPT
        
   ╰─────result: (envelope-from <CALLER@myhost.test.ex>)
        
+ ├───item-res: (envelope-from <CALLER@myhost.test.ex>)
+       
+            ╰──(tainted)
  ├considering: id $message_exim_id${if def:received_for {
        for $received_for}}
  ├───────text: id 
@@ -469,6 +485,9 @@ end of inline ACL: ACCEPT
   ╰─────result: 
        for userx@domain.com
              ╰──(tainted)
+ ├───item-res: 
+       for userx@domain.com
+            ╰──(tainted)
  ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost
        }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
@@ -735,6 +754,7 @@ end of inline ACL: ACCEPT
        for $received_for}}
    ├──expanding: from ${quote_local_part:$sender_ident} 
    ╰─────result: from CALLER 
+  ├───item-res: from CALLER 
   ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
@@ -774,6 +794,9 @@ end of inline ACL: ACCEPT
    ╰─────result: (helo=myhost.test.ex)
        
               ╰──(tainted)
+  ├───item-res: (helo=myhost.test.ex)
+       
+             ╰──(tainted)
   ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -784,6 +807,9 @@ end of inline ACL: ACCEPT
   ╰─────result: from CALLER (helo=myhost.test.ex)
        
              ╰──(tainted)
+ ├───item-res: from CALLER (helo=myhost.test.ex)
+       
+            ╰──(tainted)
  ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -832,6 +858,8 @@ end of inline ACL: ACCEPT
        for $received_for}}
   ├──expanding: with $received_protocol 
   ╰─────result: with local-esmtp 
+ ├───item-res: with local-esmtp 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -842,6 +870,8 @@ end of inline ACL: ACCEPT
   ├──expanding:  ($tls_in_ver)
   ├─────result:  ()
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -876,6 +906,8 @@ end of inline ACL: ACCEPT
   ├─────result:  tls 
        
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: (Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
        }}id $message_exim_id${if def:received_for {
@@ -914,6 +946,9 @@ end of inline ACL: ACCEPT
        
   ╰─────result: (envelope-from <CALLER@myhost.test.ex>)
        
+ ├───item-res: (envelope-from <CALLER@myhost.test.ex>)
+       
+            ╰──(tainted)
  ├considering: id $message_exim_id${if def:received_for {
        for $received_for}}
  ├───────text: id 
@@ -934,6 +969,9 @@ end of inline ACL: ACCEPT
   ╰─────result: 
        for usery@domain.com
              ╰──(tainted)
+ ├───item-res: 
+       for usery@domain.com
+            ╰──(tainted)
  ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost
        }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
@@ -1200,6 +1238,7 @@ end of inline ACL: ACCEPT
        for $received_for}}
    ├──expanding: from ${quote_local_part:$sender_ident} 
    ╰─────result: from CALLER 
+  ├───item-res: from CALLER 
   ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
@@ -1239,6 +1278,9 @@ end of inline ACL: ACCEPT
    ╰─────result: (helo=myhost.test.ex)
        
               ╰──(tainted)
+  ├───item-res: (helo=myhost.test.ex)
+       
+             ╰──(tainted)
   ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -1249,6 +1291,9 @@ end of inline ACL: ACCEPT
   ╰─────result: from CALLER (helo=myhost.test.ex)
        
              ╰──(tainted)
+ ├───item-res: from CALLER (helo=myhost.test.ex)
+       
+            ╰──(tainted)
  ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -1297,6 +1342,8 @@ end of inline ACL: ACCEPT
        for $received_for}}
   ├──expanding: with $received_protocol 
   ╰─────result: with local-esmtp 
+ ├───item-res: with local-esmtp 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -1307,6 +1354,8 @@ end of inline ACL: ACCEPT
   ├──expanding:  ($tls_in_ver)
   ├─────result:  ()
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -1341,6 +1390,8 @@ end of inline ACL: ACCEPT
   ├─────result:  tls 
        
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: (Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
        }}id $message_exim_id${if def:received_for {
@@ -1379,6 +1430,9 @@ end of inline ACL: ACCEPT
        
   ╰─────result: (envelope-from <CALLER@myhost.test.ex>)
        
+ ├───item-res: (envelope-from <CALLER@myhost.test.ex>)
+       
+            ╰──(tainted)
  ├considering: id $message_exim_id${if def:received_for {
        for $received_for}}
  ├───────text: id 
@@ -1399,6 +1453,9 @@ end of inline ACL: ACCEPT
   ╰─────result: 
        for usery@domain.com
              ╰──(tainted)
+ ├───item-res: 
+       for usery@domain.com
+            ╰──(tainted)
  ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost
        }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
index 7ac360377b8c0dee7b5eeab9aeb305b1c1275b04..ff97dbbc7f81e444fc456844b35f4ab6be406df2 100644 (file)
@@ -271,6 +271,7 @@ end of inline ACL: ACCEPT
        for $received_for}}
    ├──expanding: from ${quote_local_part:$sender_ident} 
    ╰─────result: from CALLER 
+  ├───item-res: from CALLER 
   ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
@@ -310,6 +311,9 @@ end of inline ACL: ACCEPT
    ╰─────result: (helo=myhost.test.ex)
        
               ╰──(tainted)
+  ├───item-res: (helo=myhost.test.ex)
+       
+             ╰──(tainted)
   ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -320,6 +324,9 @@ end of inline ACL: ACCEPT
   ╰─────result: from CALLER (helo=myhost.test.ex)
        
              ╰──(tainted)
+ ├───item-res: from CALLER (helo=myhost.test.ex)
+       
+            ╰──(tainted)
  ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -368,6 +375,8 @@ end of inline ACL: ACCEPT
        for $received_for}}
   ├──expanding: with $received_protocol 
   ╰─────result: with local-esmtp 
+ ├───item-res: with local-esmtp 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -378,6 +387,8 @@ end of inline ACL: ACCEPT
   ├──expanding:  ($tls_in_ver)
   ├─────result:  ()
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -412,6 +423,8 @@ end of inline ACL: ACCEPT
   ├─────result:  tls 
        
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: (Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
        }}id $message_exim_id${if def:received_for {
@@ -450,6 +463,9 @@ end of inline ACL: ACCEPT
        
   ╰─────result: (envelope-from <CALLER@myhost.test.ex>)
        
+ ├───item-res: (envelope-from <CALLER@myhost.test.ex>)
+       
+            ╰──(tainted)
  ├considering: id $message_exim_id${if def:received_for {
        for $received_for}}
  ├───────text: id 
@@ -470,6 +486,9 @@ end of inline ACL: ACCEPT
   ╰─────result: 
        for userx@domain.com
              ╰──(tainted)
+ ├───item-res: 
+       for userx@domain.com
+            ╰──(tainted)
  ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost
        }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
@@ -736,6 +755,7 @@ end of inline ACL: ACCEPT
        for $received_for}}
    ├──expanding: from ${quote_local_part:$sender_ident} 
    ╰─────result: from CALLER 
+  ├───item-res: from CALLER 
   ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
@@ -775,6 +795,9 @@ end of inline ACL: ACCEPT
    ╰─────result: (helo=myhost.test.ex)
        
               ╰──(tainted)
+  ├───item-res: (helo=myhost.test.ex)
+       
+             ╰──(tainted)
   ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -785,6 +808,9 @@ end of inline ACL: ACCEPT
   ╰─────result: from CALLER (helo=myhost.test.ex)
        
              ╰──(tainted)
+ ├───item-res: from CALLER (helo=myhost.test.ex)
+       
+            ╰──(tainted)
  ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -833,6 +859,8 @@ end of inline ACL: ACCEPT
        for $received_for}}
   ├──expanding: with $received_protocol 
   ╰─────result: with local-esmtp 
+ ├───item-res: with local-esmtp 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -843,6 +871,8 @@ end of inline ACL: ACCEPT
   ├──expanding:  ($tls_in_ver)
   ├─────result:  ()
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -877,6 +907,8 @@ end of inline ACL: ACCEPT
   ├─────result:  tls 
        
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: (Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
        }}id $message_exim_id${if def:received_for {
@@ -915,6 +947,9 @@ end of inline ACL: ACCEPT
        
   ╰─────result: (envelope-from <CALLER@myhost.test.ex>)
        
+ ├───item-res: (envelope-from <CALLER@myhost.test.ex>)
+       
+            ╰──(tainted)
  ├considering: id $message_exim_id${if def:received_for {
        for $received_for}}
  ├───────text: id 
@@ -935,6 +970,9 @@ end of inline ACL: ACCEPT
   ╰─────result: 
        for usery@domain.com
              ╰──(tainted)
+ ├───item-res: 
+       for usery@domain.com
+            ╰──(tainted)
  ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost
        }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
@@ -1201,6 +1239,7 @@ end of inline ACL: ACCEPT
        for $received_for}}
    ├──expanding: from ${quote_local_part:$sender_ident} 
    ╰─────result: from CALLER 
+  ├───item-res: from CALLER 
   ├considering: ${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
@@ -1240,6 +1279,9 @@ end of inline ACL: ACCEPT
    ╰─────result: (helo=myhost.test.ex)
        
               ╰──(tainted)
+  ├───item-res: (helo=myhost.test.ex)
+       
+             ╰──(tainted)
   ├considering: }}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -1250,6 +1292,9 @@ end of inline ACL: ACCEPT
   ╰─────result: from CALLER (helo=myhost.test.ex)
        
              ╰──(tainted)
+ ├───item-res: from CALLER (helo=myhost.test.ex)
+       
+            ╰──(tainted)
  ├considering: by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -1298,6 +1343,8 @@ end of inline ACL: ACCEPT
        for $received_for}}
   ├──expanding: with $received_protocol 
   ╰─────result: with local-esmtp 
+ ├───item-res: with local-esmtp 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -1308,6 +1355,8 @@ end of inline ACL: ACCEPT
   ├──expanding:  ($tls_in_ver)
   ├─────result:  ()
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: ${if def:tls_in_cipher_std { tls $tls_in_cipher_std
        }}(Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
@@ -1342,6 +1391,8 @@ end of inline ACL: ACCEPT
   ├─────result:  tls 
        
   ╰───skipping: result is not used
+ ├───item-res: 
+            ╰──(tainted)
  ├considering: (Exim $version_number)
        ${if def:sender_address {(envelope-from <$sender_address>)
        }}id $message_exim_id${if def:received_for {
@@ -1380,6 +1431,9 @@ end of inline ACL: ACCEPT
        
   ╰─────result: (envelope-from <CALLER@myhost.test.ex>)
        
+ ├───item-res: (envelope-from <CALLER@myhost.test.ex>)
+       
+            ╰──(tainted)
  ├considering: id $message_exim_id${if def:received_for {
        for $received_for}}
  ├───────text: id 
@@ -1400,6 +1454,9 @@ end of inline ACL: ACCEPT
   ╰─────result: 
        for usery@domain.com
              ╰──(tainted)
+ ├───item-res: 
+       for usery@domain.com
+            ╰──(tainted)
  ├──expanding: Received: ${if def:sender_rcvhost {from $sender_rcvhost
        }{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)
        }}}}by $primary_hostname ${if def:received_protocol {with $received_protocol }}${if def:tls_in_ver        { ($tls_in_ver)}}${if def:tls_in_cipher_std { tls $tls_in_cipher_std