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
fix build on older OpenSSL
[exim.git]
/
src
/
src
/
environment.c
diff --git
a/src/src/environment.c
b/src/src/environment.c
index c41d19ebac552ac233738a07dcf6756075ed20f6..9cb90c86fcc00e9a20863196548e115a9ab3cd63 100644
(file)
--- a/
src/src/environment.c
+++ b/
src/src/environment.c
@@
-9,9
+9,7
@@
#include "exim.h"
#include "exim.h"
-#ifndef environ
extern char **environ;
extern char **environ;
-#endif
/* The cleanup_environment() function is used during the startup phase
of the Exim process, right after reading the configurations main
/* The cleanup_environment() function is used during the startup phase
of the Exim process, right after reading the configurations main
@@
-26,6
+24,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
@@
-40,34
+41,43
@@
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,
getenv() 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,
getenv() would complain. */
- uschar *eqp = Ustrchr(*p, '=');
+ uschar *
eqp = Ustrchr(*p, '=');
if (eqp)
{
if (eqp)
{
- uschar *name = string_copyn(*p, eqp - *p);
+ uschar * name = string_copyn(*p, eqp - *p);
+
if (OK != match_isinlist(name, CUSS &keep_environment,
0, NULL, NULL, MCL_NOEXPAND, FALSE, NULL))
if (OK != match_isinlist(name, CUSS &keep_environment,
0, NULL, NULL, MCL_NOEXPAND, FALSE, NULL))
- if (
unsetenv(CS
name) < 0) return FALSE;
+ if (
os_unsetenv(
name) < 0) return FALSE;
else p = USS environ; /* RESTART from the beginning */
else p++;
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;
- while ((p = string_nextinlist(&envlist, &sep, NULL, 0)))
- putenv(CS p);
+ uschar * p;
+ int sep = 0;
+ const uschar * envlist = add_environment;
+
+ 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;
}
}