Stop option for ACL control of debug logging
[exim.git] / src / src / acl.c
index 6d064e8a28402f891e634baef12748e1396e13d4..19c1bbbd9ac0dea99be006483592737699fc2929 100644 (file)
@@ -3,7 +3,7 @@
 *************************************************/
 
 /* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 */
+/* Copyright (c) The Exim Maintainers 2020 - 2021 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 /* Code for handling Access Control Lists (ACLs) */
@@ -1211,7 +1211,7 @@ int rc;
 
 /* Previous success */
 
-if (sender_host_name != NULL) return OK;
+if (sender_host_name) return OK;
 
 /* Previous failure */
 
@@ -2884,7 +2884,7 @@ acl_seen(const uschar * arg, int where, uschar ** log_msgptr)
 enum { SEEN_DEFAULT, SEEN_READONLY, SEEN_WRITE };
 
 const uschar * list = arg;
-int slash = '/', equal = '=', interval, mode = SEEN_DEFAULT, yield = FAIL;
+int slash = '/', interval, mode = SEEN_DEFAULT, yield = FAIL;
 BOOL before;
 int refresh = 10 * 24 * 60 * 60;       /* 10 days */
 const uschar * ele, * key = sender_host_address;
@@ -3481,7 +3481,7 @@ for (; cb; cb = cb->next)
          {
          uschar * debug_tag = NULL;
          uschar * debug_opts = NULL;
-         BOOL kill = FALSE;
+         BOOL kill = FALSE, stop = FALSE;
 
          while (*p == '/')
            {
@@ -3501,13 +3501,20 @@ for (; cb; cb = cb->next)
              for (pp += 4; *pp && *pp != '/';) pp++;
              kill = TRUE;
              }
+           else if (Ustrncmp(pp, "stop", 4) == 0)
+             {
+             for (pp += 4; *pp && *pp != '/';) pp++;
+             stop = TRUE;
+             }
            else
              while (*pp && *pp != '/') pp++;
            p = pp;
            }
 
            if (kill)
-             debug_logging_stop();
+             debug_logging_stop(TRUE);
+           else if (stop)
+             debug_logging_stop(FALSE);
            else
              debug_logging_activate(debug_tag, debug_opts);
          break;