summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2018-12-30 15:42:32 -0800
committerGitHub <noreply@github.com>2018-12-30 15:42:32 -0800
commit387512c7ecde6446f2e29408af2e16b9fc043807 (patch)
tree66e991863076343981c7577cdbf2434449322f55 /configure.ac
parent1b29c03c95dbffa05f2bac0f8f1a36b21606a504 (diff)
downloadcpython-git-387512c7ecde6446f2e29408af2e16b9fc043807.tar.gz
bpo-28503: Use crypt_r() when available instead of crypt() (GH-11373)
Use crypt_r() when available instead of crypt() in the crypt module. As a nice side effect: This also avoids a memory sanitizer flake as clang msan doesn't know about crypt's internal libc allocated buffer.
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac17
1 files changed, 17 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 349c927484..bd09a9c9e1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3818,6 +3818,23 @@ AC_CHECK_FUNCS(gettimeofday,
])
)
+# We search for both crypt and crypt_r as one or the other may be defined
+# This gets us our -lcrypt in LIBS when required on the target platform.
+AC_SEARCH_LIBS(crypt, crypt)
+AC_SEARCH_LIBS(crypt_r, crypt)
+
+AC_CHECK_FUNC(crypt_r,
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#define _GNU_SOURCE /* Required for crypt_r()'s prototype in glibc. */
+#include <crypt.h>
+]], [[
+struct crypt_data d;
+char *r = crypt_r("", "", &d);
+]])],
+ [AC_DEFINE(HAVE_CRYPT_R, 1, [Define if you have the crypt_r() function.])],
+ [])
+)
+
AC_CHECK_FUNCS(clock_gettime, [], [
AC_CHECK_LIB(rt, clock_gettime, [
LIBS="$LIBS -lrt"