Author: Matti Picus <matti.pi...@gmail.com>
Branch: py3.6
Changeset: r96666:6941f917df42
Date: 2019-05-24 08:05 +0300
http://bitbucket.org/pypy/pypy/changeset/6941f917df42/

Log:    merge default into py3.6

diff --git a/lib_pypy/_cffi_ssl/__init__.py b/lib_pypy/_cffi_ssl/__init__.py
new file mode 100644
diff --git a/lib_pypy/_cffi_ssl/_cffi_src/openssl/ssl.py 
b/lib_pypy/_cffi_ssl/_cffi_src/openssl/ssl.py
--- a/lib_pypy/_cffi_ssl/_cffi_src/openssl/ssl.py
+++ b/lib_pypy/_cffi_ssl/_cffi_src/openssl/ssl.py
@@ -71,6 +71,7 @@
 static const long SSL_OP_MICROSOFT_SESS_ID_BUG;
 static const long SSL_OP_NETSCAPE_CHALLENGE_BUG;
 static const long SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG;
+static const long SSL_OP_NO_SSLv2;
 static const long SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG;
 static const long SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER;
 static const long SSL_OP_MSIE_SSLV2_RSA_PADDING;
diff --git a/lib_pypy/_cffi_ssl/_stdssl/__init__.py 
b/lib_pypy/_cffi_ssl/_stdssl/__init__.py
--- a/lib_pypy/_cffi_ssl/_stdssl/__init__.py
+++ b/lib_pypy/_cffi_ssl/_stdssl/__init__.py
@@ -1,7 +1,6 @@
 import sys
 import time
-import _thread
-import socket
+import thread as _thread
 import weakref
 from _pypy_openssl import ffi
 from _pypy_openssl import lib
@@ -70,6 +69,7 @@
             globals()[name[4:]] = getattr(lib, name)
 
 OP_ALL = lib.SSL_OP_ALL & ~lib.SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
+OP_NO_SSLv2 = lib.SSL_OP_NO_SSLv2
 
 SSL_CLIENT = 0
 SSL_SERVER = 1
@@ -78,7 +78,8 @@
 
 if lib.Cryptography_HAS_SSL2:
     PROTOCOL_SSLv2  = 0
-PROTOCOL_SSLv3  = 1
+if lib.Cryptography_HAS_SSL3_METHOD:
+    PROTOCOL_SSLv3  = 1
 PROTOCOL_SSLv23 = 2
 PROTOCOL_TLS    = PROTOCOL_SSLv23
 PROTOCOL_TLSv1    = 3
@@ -310,6 +311,9 @@
         return self.socket_type == SSL_SERVER
 
     def do_handshake(self):
+        # delay to prevent circular imports
+        import socket
+
         sock = self.get_socket_or_connection_gone()
         ssl = self.ssl
         timeout = _socket_timeout(sock)
@@ -381,6 +385,9 @@
                 return _decode_certificate(self.peer_cert)
 
     def write(self, bytestring):
+        # delay to prevent circular imports
+        import socket
+
         deadline = 0
         b = _str_to_ffi_buffer(bytestring)
         sock = self.get_socket_or_connection_gone()
@@ -439,6 +446,9 @@
             raise pyssl_error(self, length)
 
     def read(self, length, buffer_into=None):
+        # delay to prevent circular imports
+        import socket
+
         ssl = self.ssl
 
         if length < 0 and buffer_into is None:
@@ -579,6 +589,9 @@
         return sock
 
     def shutdown(self):
+        # delay to prevent circular imports
+        import socket
+
         sock = self.get_socket_or_None()
         nonblocking = False
         ssl = self.ssl
@@ -804,7 +817,7 @@
             method = lib.TLSv1_1_method()
         elif lib.Cryptography_HAS_TLSv1_2 and protocol == PROTOCOL_TLSv1_2 :
             method = lib.TLSv1_2_method()
-        elif protocol == PROTOCOL_SSLv3 and lib.Cryptography_HAS_SSL3_METHOD:
+        elif lib.Cryptography_HAS_SSL3_METHOD and protocol == PROTOCOL_SSLv3:
             method = lib.SSLv3_method()
         elif lib.Cryptography_HAS_SSL2 and protocol == PROTOCOL_SSLv2:
             method = lib.SSLv2_method()
@@ -835,7 +848,7 @@
         options = lib.SSL_OP_ALL & ~lib.SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
         if not lib.Cryptography_HAS_SSL2 or protocol != PROTOCOL_SSLv2:
             options |= lib.SSL_OP_NO_SSLv2
-        if protocol != PROTOCOL_SSLv3:
+        if not lib.Cryptography_HAS_SSL3_METHOD or protocol != PROTOCOL_SSLv3:
             options |= lib.SSL_OP_NO_SSLv3
         # Minimal security flags for server and client side context.
         # Client sockets ignore server-side parameters.
diff --git a/lib_pypy/_cffi_ssl/_stdssl/error.py 
b/lib_pypy/_cffi_ssl/_stdssl/error.py
--- a/lib_pypy/_cffi_ssl/_stdssl/error.py
+++ b/lib_pypy/_cffi_ssl/_stdssl/error.py
@@ -1,6 +1,7 @@
 import sys
 import os
 import traceback
+(??)
 from _pypy_openssl import ffi
 from _pypy_openssl import lib
 
diff --git a/lib_pypy/_cffi_ssl/_stdssl/utility.py 
b/lib_pypy/_cffi_ssl/_stdssl/utility.py
--- a/lib_pypy/_cffi_ssl/_stdssl/utility.py
+++ b/lib_pypy/_cffi_ssl/_stdssl/utility.py
@@ -19,7 +19,7 @@
     elif isinstance(view, memoryview):
         # NOTE pypy limitation StringBuffer does not allow
         # to get a raw address to the string!
-        view = bytes(view)
+        view = view.tobytes()
     # dont call call ffi.from_buffer(bytes(view)), arguments
     # like ints/bools should result in a TypeError
     return ffi.from_buffer(view)
diff --git a/lib_pypy/_ssl/__init__.py b/lib_pypy/_ssl/__init__.py
--- a/lib_pypy/_ssl/__init__.py
+++ b/lib_pypy/_ssl/__init__.py
@@ -3,6 +3,8 @@
 from _cffi_ssl import _stdssl
 from _cffi_ssl._stdssl import *
 
+OP_SINGLE_DH_USE = lib.SSL_OP_SINGLE_DH_USE
+OP_SINGLE_ECDH_USE = lib.SSL_OP_SINGLE_ECDH_USE
 
 try: from __pypy__ import builtinify
 except ImportError: builtinify = lambda f: f
diff --git a/pypy/config/pypyoption.py b/pypy/config/pypyoption.py
--- a/pypy/config/pypyoption.py
+++ b/pypy/config/pypyoption.py
@@ -113,42 +113,6 @@
     module_suggests["cpyext"].append(("translation.shared", True))
 
 
-# NOTE: this dictionary is not used any more
-module_import_dependencies = {
-    # no _rawffi if importing rpython.rlib.clibffi raises ImportError
-    # or CompilationError or py.test.skip.Exception
-    "_rawffi"   : ["rpython.rlib.clibffi"],
-
-    "zlib"      : ["rpython.rlib.rzlib"],
-    "bz2"       : ["pypy.module.bz2.interp_bz2"],
-    "pyexpat"   : ["pypy.module.pyexpat.interp_pyexpat"],
-    "_minimal_curses": ["pypy.module._minimal_curses.fficurses"],
-    "_continuation": ["rpython.rlib.rstacklet"],
-    "_vmprof"      : ["pypy.module._vmprof.interp_vmprof"],
-    "faulthandler" : ["pypy.module._vmprof.interp_vmprof"],
-    "_lzma"     : ["pypy.module._lzma.interp_lzma"],
-    }
-
-def get_module_validator(modname):
-    # NOTE: this function is not used any more
-    if modname in module_import_dependencies:
-        modlist = module_import_dependencies[modname]
-        def validator(config):
-            from rpython.rtyper.tool.rffi_platform import CompilationError
-            try:
-                for name in modlist:
-                    __import__(name)
-            except (ImportError, CompilationError, py.test.skip.Exception) as 
e:
-                errcls = e.__class__.__name__
-                raise Exception(
-                    "The module %r is disabled\n" % (modname,) +
-                    "because importing %s raised %s\n" % (name, errcls) +
-                    str(e))
-        return validator
-    else:
-        return None
-
-
 pypy_optiondescription = OptionDescription("objspace", "Object Space Options", 
[
     OptionDescription("usemodules", "Which Modules should be used", [
         BoolOption(modname, "use module %s" % (modname, ),
@@ -157,7 +121,7 @@
                    requires=module_dependencies.get(modname, []),
                    suggests=module_suggests.get(modname, []),
                    negation=modname not in essential_modules,
-                   ) #validator=get_module_validator(modname))
+                   )
         for modname in all_modules]),
 
     BoolOption("allworkingmodules", "use as many working modules as possible",
diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -29,3 +29,8 @@
 .. branch: shadowstack-issue2722
 
 Make the shadowstack size more dynamic
+
+.. branch: cffi-libs
+
+Move _ssl and _hashlib from rpython to a cffi-based module, like on python3.
+Reduces the number of problematic linked-in libraries (libssl, libcrypto)
diff --git a/pypy/tool/build_cffi_imports.py b/pypy/tool/build_cffi_imports.py
--- a/pypy/tool/build_cffi_imports.py
+++ b/pypy/tool/build_cffi_imports.py
@@ -14,7 +14,7 @@
     "tk": "_tkinter/tklib_build.py",
     "curses": "_curses_build.py" if sys.platform != "win32" else None,
     "syslog": "_syslog_build.py" if sys.platform != "win32" else None,
-    "_gdbm": "_gdbm_build.py"  if sys.platform != "win32" else None,
+    "gdbm": "_gdbm_build.py"  if sys.platform != "win32" else None,
     "pwdgrp": "_pwdgrp_build.py" if sys.platform != "win32" else None,
     "resource": "_resource_build.py" if sys.platform != "win32" else None,
     "lzma": "_lzma_build.py",
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to