### Fix build with LibreSSL (does not have RAND_egd) ### PR192511, http://bugs.python.org/issue21356 ### Backported from upstream patch by Victor Stinner --- pyconfig.h.in.orig 2014-06-30 04:05:48.000000000 +0200 +++ pyconfig.h.in 2014-11-28 20:41:31.020342971 +0100 @@ -544,6 +544,12 @@ /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV +/* ### Fix build with LibreSSL (does not have RAND_egd) + ### PR192511, http://bugs.python.org/issue21356 */ +/* Define if the libcrypto has RAND_egd */ +#undef HAVE_RAND_EGD + +/* ### End PR192511 */ /* Define to 1 if you have the `readlink' function. */ #undef HAVE_READLINK --- Lib/test/test_ssl.py.orig 2014-06-30 04:05:36.000000000 +0200 +++ Lib/test/test_ssl.py 2014-11-28 20:33:55.598364999 +0100 @@ -96,8 +96,12 @@ sys.stdout.write("\n RAND_status is %d (%s)\n" % (v, (v and "sufficient randomness") or "insufficient randomness")) - self.assertRaises(TypeError, ssl.RAND_egd, 1) - self.assertRaises(TypeError, ssl.RAND_egd, 'foo', 1) +### Fix build with LibreSSL (does not have RAND_egd) +### PR192511, http://bugs.python.org/issue21356 + if hasattr(ssl, 'RAND_egd'): + self.assertRaises(TypeError, ssl.RAND_egd, 1) + self.assertRaises(TypeError, ssl.RAND_egd, 'foo', 1) +### End PR192511 ssl.RAND_add("this is a random string", 75.0) def test_parse_cert(self): --- Lib/ssl.py.orig 2014-11-28 20:45:51.341319838 +0100 +++ Lib/ssl.py 2014-11-28 20:59:10.373259128 +0100 @@ -62,10 +62,15 @@ from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION from _ssl import SSLError from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED +### Fix build with LibreSSL (does not have RAND_egd) +### PR192511, http://bugs.python.org/issue21356 +from _ssl import RAND_status, RAND_add try: - from _ssl import RAND_status, RAND_egd, RAND_add + from _ssl import RAND_egd except ImportError: - from _ssl import RAND_status, RAND_add + # LibreSSL does not provide RAND_egd + pass +### End PR192511 from _ssl import \ SSL_ERROR_ZERO_RETURN, \ SSL_ERROR_WANT_READ, \ --- configure.ac.orig 2014-11-28 21:02:44.159242000 +0100 +++ configure.ac 2014-11-28 21:03:23.311244025 +0100 @@ -2216,6 +2216,13 @@ AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX +### Fix build with LibreSSL (does not have RAND_egd) +### PR192511, http://bugs.python.org/issue21356 +AC_CHECK_LIB(crypto, RAND_egd, + AC_DEFINE(HAVE_RAND_EGD, 1, + [Define if the libcrypto has RAND_egd])) +### End PR192511 + # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then AC_SEARCH_LIBS(sem_init, pthread rt posix4) # 'Real Time' functions on Solaris --- configure.orig 2014-11-28 21:01:17.338249000 +0100 +++ configure 2014-11-28 21:04:01.067237069 +0100 @@ -8529,6 +8529,52 @@ fi # Dynamic linking for HP-UX +### Fix build with LibreSSL (does not have RAND_egd) +### PR192511, http://bugs.python.org/issue21356 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RAND_egd in -lcrypto" >&5 +$as_echo_n "checking for RAND_egd in -lcrypto... " >&6; } +if ${ac_cv_lib_crypto_RAND_egd+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcrypto $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char RAND_egd (); +int +main () +{ +return RAND_egd (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_crypto_RAND_egd=yes +else + ac_cv_lib_crypto_RAND_egd=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_RAND_egd" >&5 +$as_echo "$ac_cv_lib_crypto_RAND_egd" >&6; } +if test "x$ac_cv_lib_crypto_RAND_egd" = xyes; then : + +$as_echo "#define HAVE_RAND_EGD 1" >>confdefs.h + +fi + +### End PR192511 + # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sem_init" >&5 --- Lib/socket.py.orig 2014-06-30 04:05:30.000000000 +0200 +++ Lib/socket.py 2014-11-28 21:37:35.552098186 +0100 @@ -67,7 +67,6 @@ from _ssl import SSLError as sslerror from _ssl import \ RAND_add, \ - RAND_egd, \ RAND_status, \ SSL_ERROR_ZERO_RETURN, \ SSL_ERROR_WANT_READ, \ @@ -78,6 +77,14 @@ SSL_ERROR_WANT_CONNECT, \ SSL_ERROR_EOF, \ SSL_ERROR_INVALID_ERROR_CODE +### Fix build with LibreSSL (does not have RAND_egd) +### PR192511, http://bugs.python.org/issue21356 + try: + from _ssl import RAND_egd + # LibreSSL does not provide RAND_egd + except ImportError: + pass +### End PR192511 import os, sys, warnings