git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tidying
[exim.git]
/
src
/
src
/
environment.c
diff --git
a/src/src/environment.c
b/src/src/environment.c
index c394eb7e7b9f9b31b576857cbe27db5fc105c615..68adf3c0cac91c92476d739307e4efe834aefe63 100644
(file)
--- a/
src/src/environment.c
+++ b/
src/src/environment.c
@@
-5,6
+5,7
@@
/* Copyright (c) Heiko Schlittermann 2016
* hs@schlittermann.de
* See the file NOTICE for conditions of use and distribution.
/* Copyright (c) Heiko Schlittermann 2016
* hs@schlittermann.de
* See the file NOTICE for conditions of use and distribution.
+ * SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "exim.h"
*/
#include "exim.h"
@@
-24,6
+25,9
@@
Returns: TRUE if successful
BOOL
cleanup_environment()
{
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')
{
/* From: https://github.com/dovecot/core/blob/master/src/lib/env-util.c#L55
if (!keep_environment || *keep_environment == '\0')
{
/* From: https://github.com/dovecot/core/blob/master/src/lib/env-util.c#L55
@@
-38,8
+42,8
@@
if (!keep_environment || *keep_environment == '\0')
}
else if (Ustrcmp(keep_environment, "*") != 0)
{
}
else if (Ustrcmp(keep_environment, "*") != 0)
{
-
uschar **p
;
- if (environ) for (p = USS environ; *p; /* see below */)
+
rmark reset_point = store_mark()
;
+ if (environ) for (
uschar **
p = USS environ; *p; /* see below */)
{
/* It's considered broken if we do not find the '=', according to
Florian Weimer. For now we ignore such strings. unsetenv() would complain,
{
/* It's considered broken if we do not find the '=', according to
Florian Weimer. For now we ignore such strings. unsetenv() would complain,
@@
-55,18
+59,26
@@
else if (Ustrcmp(keep_environment, "*") != 0)
if (os_unsetenv(name) < 0) return FALSE;
else p = USS environ; /* RESTART from the beginning */
else p++;
if (os_unsetenv(name) < 0) return FALSE;
else p = USS environ; /* RESTART from the beginning */
else p++;
- store_reset(name);
}
}
}
}
+ store_reset(reset_point);
}
if (add_environment)
{
}
if (add_environment)
{
-
uschar * p;
-
int sep = 0;
-
const uschar * envlist = add_environment;
+ uschar * p;
+ int sep = 0;
+ const uschar * envlist = add_environment;
- while ((p = string_nextinlist(&envlist, &sep, NULL, 0))) putenv(CS p);
+ while ((p = string_nextinlist(&envlist, &sep, NULL, 0)))
+ {
+ DEBUG(D_expand) debug_printf("adding %s\n", p);
+ putenv(CS p);
+ }
}
}
+#ifndef DISABLE_TLS
+tls_clean_env();
+#endif
- return TRUE;
+store_pool = old_pool;
+return TRUE;
}
}