summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstratakis <cstratak@redhat.com>2018-01-23 15:11:24 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2018-01-23 15:11:24 (GMT)
commite768c86ef442ef89004089a8a34ce5909ffb90f2 (patch)
treed332469497ed5a11fb27db5c7dce129544766476
parent370d04d1dcca50a52d59f40aff4d11434f71df6b (diff)
downloadcpython-e768c86ef442ef89004089a8a34ce5909ffb90f2.zip
cpython-e768c86ef442ef89004089a8a34ce5909ffb90f2.tar.gz
cpython-e768c86ef442ef89004089a8a34ce5909ffb90f2.tar.bz2
bpo-32635: Fix a segfault when importing the crypt module with libxcrypt. (#5284)
glibc is deprecating libcrypt in favor of libxcrypt, however python assumes that crypt.h will always be included. This change makes the header inclusion explicit when libxcrypt is present on the system.
-rw-r--r--Include/Python.h3
-rw-r--r--Misc/NEWS.d/next/Build/2018-01-23-15-33-40.bpo-32635.qHwIZy.rst2
-rwxr-xr-xconfigure2
-rw-r--r--configure.ac2
-rw-r--r--pyconfig.h.in3
5 files changed, 10 insertions, 2 deletions
diff --git a/Include/Python.h b/Include/Python.h
index dd595ea..1feb153 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -35,6 +35,9 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
+#ifdef HAVE_CRYPT_H
+#include <crypt.h>
+#endif
/* For size_t? */
#ifdef HAVE_STDDEF_H
diff --git a/Misc/NEWS.d/next/Build/2018-01-23-15-33-40.bpo-32635.qHwIZy.rst b/Misc/NEWS.d/next/Build/2018-01-23-15-33-40.bpo-32635.qHwIZy.rst
new file mode 100644
index 0000000..d411890
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2018-01-23-15-33-40.bpo-32635.qHwIZy.rst
@@ -0,0 +1,2 @@
+Fix segfault of the crypt module when libxcrypt is provided instead of
+libcrypt at the system.
diff --git a/configure b/configure
index a9b0ab9..5904b54 100755
--- a/configure
+++ b/configure
@@ -7682,7 +7682,7 @@ $as_echo "#define STDC_HEADERS 1" >>confdefs.h
fi
-for ac_header in asm/types.h conio.h direct.h dlfcn.h errno.h \
+for ac_header in asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \
fcntl.h grp.h \
ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \
sched.h shadow.h signal.h stropts.h termios.h \
diff --git a/configure.ac b/configure.ac
index 03b0f50..15ef872 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2041,7 +2041,7 @@ dnl AC_MSG_RESULT($cpp_type)
# checks for header files
AC_HEADER_STDC
-AC_CHECK_HEADERS(asm/types.h conio.h direct.h dlfcn.h errno.h \
+AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \
fcntl.h grp.h \
ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \
sched.h shadow.h signal.h stropts.h termios.h \
diff --git a/pyconfig.h.in b/pyconfig.h.in
index dd7c62b..fd5a0c3 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -140,6 +140,9 @@
/* Define to 1 if you have the `copysign' function. */
#undef HAVE_COPYSIGN
+/* Define to 1 if you have the <crypt.h> header file. */
+#undef HAVE_CRYPT_H
+
/* Define to 1 if you have the `ctermid' function. */
#undef HAVE_CTERMID