diff options
author | Jeremy Harris <jgh146exb@wizmail.org> | 2022-12-29 17:14:31 +0000 |
---|---|---|
committer | Jeremy Harris <jgh146exb@wizmail.org> | 2022-12-29 17:14:31 +0000 |
commit | caf28f95ce0a617b075cf66e24a0e4b0b8aaf18e (patch) | |
tree | b1481052d9d68514ddc1264e628f437e2b50f812 /src | |
parent | 6fc54bd18aa7a51e11dce5a905e754cedb526230 (diff) |
Debug: quieten environment-cleaning
Diffstat (limited to 'src')
-rw-r--r-- | src/src/environment.c | 38 |
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; } |