constification
[exim.git] / src / src / expand.c
index aa8bfe643b9494c6e6de86a8c4ab2728a6482784..9a88d38cab05c51ef3fa6120d84370ac93f9188c 100644 (file)
@@ -1804,20 +1804,19 @@ return g;
 /* A recipients list is available only during system message filtering,
 during ACL processing after DATA, and while expanding pipe commands
 generated from a system filter, but not elsewhere.  Note that this does
-not check for comman in the elements, and uses comma-space as seperator -
+not check for commas in the elements, and uses comma-space as seperator -
 so cannot be used as an exim list as-is. */
 
 static uschar *
 fn_recipients(void)
 {
-uschar * s;
 gstring * g = NULL;
 
 if (!f.enable_dollar_recipients) return NULL;
 
 for (int i = 0; i < recipients_count; i++)
   {
-  s = recipients_list[i].address;
+  const uschar * s = recipients_list[i].address;
   g = string_append2_listele_n(g, US", ", s, Ustrlen(s));
   }
 gstring_release_unused(g);
@@ -2763,9 +2762,17 @@ switch(cond_type = identify_operator(&s, &opname))
     case ECOND_ISIP:
     case ECOND_ISIP4:
     case ECOND_ISIP6:
-    rc = string_is_ip_address(sub[0], NULL);
-    *yield = ((cond_type == ECOND_ISIP)? (rc != 0) :
-             (cond_type == ECOND_ISIP4)? (rc == 4) : (rc == 6)) == testfor;
+    {
+      const uschar *errp;
+      const uschar **errpp;
+      DEBUG(D_expand) errpp = &errp; else errpp = 0;
+      if (0 == (rc = string_is_ip_addressX(sub[0], NULL, errpp)))
+        DEBUG(D_expand) debug_printf("failed: %s\n", errp);
+
+      *yield = ( cond_type == ECOND_ISIP  ? rc != 0 :
+                 cond_type == ECOND_ISIP4 ? rc == 4 : rc == 6) == testfor;
+    }
+
     break;
 
     /* Various authentication tests - all optionally compiled */
@@ -3583,53 +3590,50 @@ switch(cond_type = identify_operator(&s, &opname))
     /* If a zero-length secret was given, we're done.  Otherwise carry on
     and validate the given SRS local_part againt our secret. */
 
-    if (!*sub[1])
+    if (*sub[1])
       {
-      boolvalue = TRUE;
-      goto srs_result;
-      }
+      /* check the timestamp */
+       {
+       struct timeval now;
+       uschar * ss = sub[0] + ovec[4]; /* substring 2, the timestamp */
+       long d;
+       int n;
 
-    /* check the timestamp */
-      {
-      struct timeval now;
-      uschar * ss = sub[0] + ovec[4];  /* substring 2, the timestamp */
-      long d;
-      int n;
+       gettimeofday(&now, NULL);
+       now.tv_sec /= 86400;                    /* days since epoch */
 
-      gettimeofday(&now, NULL);
-      now.tv_sec /= 86400;             /* days since epoch */
+       /* Decode substring 2 from base32 to a number */
 
-      /* Decode substring 2 from base32 to a number */
+       for (d = 0, n = ovec[5]-ovec[4]; n; n--)
+         {
+         uschar * t = Ustrchr(base32_chars, *ss++);
+         d = d * 32 + (t - base32_chars);
+         }
 
-      for (d = 0, n = ovec[5]-ovec[4]; n; n--)
-       {
-       uschar * t = Ustrchr(base32_chars, *ss++);
-       d = d * 32 + (t - base32_chars);
+       if (((now.tv_sec - d) & 0x3ff) > 10)    /* days since SRS generated */
+         {
+         DEBUG(D_expand) debug_printf("SRS too old\n");
+         goto srs_result;
+         }
        }
 
-      if (((now.tv_sec - d) & 0x3ff) > 10)     /* days since SRS generated */
+      /* check length of substring 1, the offered checksum */
+
+      if (ovec[3]-ovec[2] != 4)
        {
-       DEBUG(D_expand) debug_printf("SRS too old\n");
+       DEBUG(D_expand) debug_printf("SRS checksum wrong size\n");
        goto srs_result;
        }
-      }
-
-    /* check length of substring 1, the offered checksum */
 
-    if (ovec[3]-ovec[2] != 4)
-      {
-      DEBUG(D_expand) debug_printf("SRS checksum wrong size\n");
-      goto srs_result;
-      }
+      /* Hash the address with our secret, and compare that computed checksum
+      with the one extracted from the arg */
 
-    /* Hash the address with our secret, and compare that computed checksum
-    with the one extracted from the arg */
-
-    hmac_md5(sub[1], srs_recipient, cksum, sizeof(cksum));
-    if (Ustrncmp(cksum, sub[0] + ovec[2], 4) != 0)
-      {
-      DEBUG(D_expand) debug_printf("SRS checksum mismatch\n");
-      goto srs_result;
+      hmac_md5(sub[1], srs_recipient, cksum, sizeof(cksum));
+      if (Ustrncmp(cksum, sub[0] + ovec[2], 4) != 0)
+       {
+       DEBUG(D_expand) debug_printf("SRS checksum mismatch\n");
+       goto srs_result;
+       }
       }
     boolvalue = TRUE;
 
@@ -6567,6 +6571,7 @@ while (*s)
        goto EXPAND_FAILED_CURLY;                                       /*}*/
        }
 
+      DEBUG(D_expand) debug_printf_indent("%s: evaluate input list list\n", name);
       if (!(list = expand_string_internal(s,
              ESI_BRACE_ENDS | ESI_HONOR_DOLLAR | flags, &s, &resetok, NULL)))
        goto EXPAND_FAILED;                                             /*{{*/
@@ -6586,6 +6591,7 @@ while (*s)
          expand_string_message = US"missing '{' for second arg of reduce";
          goto EXPAND_FAILED_CURLY;                                     /*}*/
          }
+       DEBUG(D_expand) debug_printf_indent("reduce: initial result list\n");
         t = expand_string_internal(s,
              ESI_BRACE_ENDS | ESI_HONOR_DOLLAR | flags, &s, &resetok, NULL);
         if (!t) goto EXPAND_FAILED;
@@ -6613,6 +6619,7 @@ while (*s)
       condition for real. For EITEM_MAP and EITEM_REDUCE, do the same, using
       the normal internal expansion function. */
 
+      DEBUG(D_expand) debug_printf_indent("%s: find end of conditionn\n", name);
       if (item_type != EITEM_FILTER)
         temp = expand_string_internal(s,
          ESI_BRACE_ENDS | ESI_HONOR_DOLLAR | ESI_SKIPPING, &s, &resetok, NULL);