diff options
author | Jérémie Courrèges-Anglas <jca@wxcvbn.org> | 2016-04-27 18:01:51 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2016-04-29 00:12:02 +0200 |
commit | f198abcbb3f6e8b26c697d3ded2caa1076ae018b (patch) | |
tree | 7aca2b7209ed8d1542951e56d36668aeadddc2b9 | |
parent | 90403de7acdfec2aa3c752f6add27bc6f0e9ac30 (diff) | |
download | samba-f198abcbb3f6e8b26c697d3ded2caa1076ae018b.tar.gz |
Provide fallback code for non-portable clearenv(3)
clearenv(3) is a GNU extension that was rejected twice by POSIX,
without an easy, portable alternative.
As the dovecot project notes,
"""
environ = NULL crashes on OSX - and OpenBSD < 6.0
*environ = NULL doesn't work on FreeBSD 7.0
environ = emptyenv doesn't work on Haiku OS
environ = calloc should work everywhere
"""
(source: http://hg.dovecot.org/dovecot-2.0/file/48f90e7e92dc/src/lib/env-util.c)
Bug: https://bugzilla.samba.org/show_bug.cgi?id=11864
Signed-off-by: Jérémie Courrèges-Anglas <jca@wxcvbn.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri Apr 29 00:12:02 CEST 2016 on sn-devel-144
-rw-r--r-- | source3/client/smbspool_krb5_wrapper.c | 6 | ||||
-rw-r--r-- | source3/wscript | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/source3/client/smbspool_krb5_wrapper.c b/source3/client/smbspool_krb5_wrapper.c index e19fd92dc5b..89db5e05617 100644 --- a/source3/client/smbspool_krb5_wrapper.c +++ b/source3/client/smbspool_krb5_wrapper.c @@ -24,6 +24,7 @@ #include "system/passwd.h" #include <errno.h> +#include <stdlib.h> #include <string.h> #include <cups/backend.h> @@ -195,7 +196,12 @@ int main(int argc, char *argv[]) * Make sure we do not have LD_PRELOAD or other security relevant * environment variables set. */ +#ifdef HAVE_CLEARENV clearenv(); +#else + extern char **environ; + environ = calloc(1, sizeof(*environ)); +#endif CUPS_SMB_DEBUG("Setting KRB5CCNAME to '%s'", gen_cc); setenv("KRB5CCNAME", gen_cc, 1); diff --git a/source3/wscript b/source3/wscript index 3118e28dc64..3b6f8a49e42 100644 --- a/source3/wscript +++ b/source3/wscript @@ -110,7 +110,7 @@ def configure(conf): conf.CHECK_FUNCS('getpwnam', headers='sys/types.h pwd.h') conf.CHECK_FUNCS('fdopendir') conf.CHECK_FUNCS('fstatat') - conf.CHECK_FUNCS('getpwent_r setenv strcasecmp fcvt fcvtl') + conf.CHECK_FUNCS('getpwent_r setenv clearenv strcasecmp fcvt fcvtl') conf.CHECK_FUNCS('syslog vsyslog timegm setlocale') conf.CHECK_FUNCS_IN('nanosleep', 'rt') conf.CHECK_FUNCS('lutimes futimes utimensat futimens') |