summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2022-12-29 17:14:31 +0000
committerJeremy Harris <jgh146exb@wizmail.org>2022-12-29 17:14:31 +0000
commitcaf28f95ce0a617b075cf66e24a0e4b0b8aaf18e (patch)
treeb1481052d9d68514ddc1264e628f437e2b50f812 /src
parent6fc54bd18aa7a51e11dce5a905e754cedb526230 (diff)
downloadexim4-caf28f95ce0a617b075cf66e24a0e4b0b8aaf18e.tar.gz
Debug: quieten environment-cleaning
Diffstat (limited to 'src')
-rw-r--r--src/src/environment.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/src/environment.c b/src/src/environment.c
index 68adf3c0c..b05b1aefd 100644
--- a/src/src/environment.c
+++ b/src/src/environment.c
@@ -4,6 +4,7 @@
/* Copyright (c) Heiko Schlittermann 2016
* hs@schlittermann.de
+ * Copyright (c) The Exim Maintainers 2022
* See the file NOTICE for conditions of use and distribution.
* SPDX-License-Identifier: GPL-2.0-or-later
*/
@@ -25,10 +26,7 @@ Returns: TRUE if successful
BOOL
cleanup_environment()
{
-int old_pool = store_pool;
-store_pool = POOL_PERM; /* Need perm memory for any created env vars */
-
-if (!keep_environment || *keep_environment == '\0')
+if (!keep_environment || !*keep_environment)
{
/* From: https://github.com/dovecot/core/blob/master/src/lib/env-util.c#L55
Try to clear the environment.
@@ -43,6 +41,11 @@ if (!keep_environment || *keep_environment == '\0')
else if (Ustrcmp(keep_environment, "*") != 0)
{
rmark reset_point = store_mark();
+ unsigned deb = debug_selector;
+ BOOL hc = host_checking;
+ debug_selector = 0; /* quieten this clearout */
+ host_checking = FALSE;
+
if (environ) for (uschar ** p = USS environ; *p; /* see below */)
{
/* It's considered broken if we do not find the '=', according to
@@ -54,31 +57,42 @@ else if (Ustrcmp(keep_environment, "*") != 0)
{
uschar * name = string_copyn(*p, eqp - *p);
- if (OK != match_isinlist(name, CUSS &keep_environment,
- 0, NULL, NULL, MCL_NOEXPAND, FALSE, NULL))
- if (os_unsetenv(name) < 0) return FALSE;
- else p = USS environ; /* RESTART from the beginning */
- else p++;
+ if (match_isinlist(name, CUSS &keep_environment,
+ 0, NULL, NULL, MCL_NOEXPAND, FALSE, NULL) == OK)
+ p++; /* next */
+ else if (os_unsetenv(name) == 0)
+ p = USS environ; /* RESTART from the beginning */
+ else
+ { debug_selector = deb; host_checking = hc; return FALSE; }
}
}
+ debug_selector = deb;
+ host_checking = hc;
store_reset(reset_point);
}
+DEBUG(D_expand)
+ {
+ debug_printf("environment after trimming:\n");
+ if (environ) for (uschar ** p = USS environ; *p; p++)
+ debug_printf(" %s\n", *p);
+ }
if (add_environment)
{
- uschar * p;
int sep = 0;
const uschar * envlist = add_environment;
+ int old_pool = store_pool;
+ store_pool = POOL_PERM; /* Need perm memory for any created env vars */
- while ((p = string_nextinlist(&envlist, &sep, NULL, 0)))
+ for (const uschar * p; p = string_nextinlist(&envlist, &sep, NULL, 0); )
{
DEBUG(D_expand) debug_printf("adding %s\n", p);
putenv(CS p);
}
+ store_pool = old_pool;
}
#ifndef DISABLE_TLS
tls_clean_env();
#endif
-store_pool = old_pool;
return TRUE;
}