[pypy-commit] pypy py3k: Fixes in _ssl module

amauryfa noreply at buildbot.pypy.org
Tue Dec 6 23:51:35 CET 2011


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: py3k
Changeset: r50238:c0288af60001
Date: 2011-12-06 01:35 +0100
http://bitbucket.org/pypy/pypy/changeset/c0288af60001/

Log:	Fixes in _ssl module

diff --git a/pypy/module/_ssl/interp_ssl.py b/pypy/module/_ssl/interp_ssl.py
--- a/pypy/module/_ssl/interp_ssl.py
+++ b/pypy/module/_ssl/interp_ssl.py
@@ -1,6 +1,6 @@
 from __future__ import with_statement
 from pypy.rpython.lltypesystem import rffi, lltype
-from pypy.interpreter.error import OperationError
+from pypy.interpreter.error import OperationError, wrap_oserror
 from pypy.interpreter.baseobjspace import Wrappable
 from pypy.interpreter.typedef import TypeDef, GetSetProperty
 from pypy.interpreter.gateway import interp2app, unwrap_spec
@@ -8,6 +8,7 @@
 from pypy.rlib.rarithmetic import intmask
 from pypy.rlib import rpoll, rsocket
 from pypy.rlib.ropenssl import *
+from pypy.rlib.rposix import get_errno
 
 from pypy.module._socket import interp_socket
 import weakref
@@ -186,17 +187,19 @@
             errno = get_errno()
             if errno:
                 libssl_ERR_clear_error()
-                raise_from_errno(space.w_IOError, errno)
+                raise wrap_oserror(space, OSError(errno, ''),
+                                   exception_name = 'w_IOError')
             else:
                 raise _ssl_seterror(space, None, -1)
 
-        ret = libssl_SSL_CTX_use_PrivateKey_file(ss.ctx, key_file,
+        ret = libssl_SSL_CTX_use_PrivateKey_file(self.ctx, keyfile,
                                                  SSL_FILETYPE_PEM)
         if ret != 1:
             errno = get_errno()
             if errno:
                 libssl_ERR_clear_error()
-                raise_from_errno(space.w_IOError, errno)
+                raise wrap_oserror(space, OSError(errno, ''),
+                                   exception_name = 'w_IOError')
             else:
                 raise _ssl_seterror(space, None, -1)
 
@@ -222,7 +225,8 @@
             errno = get_errno()
             if errno:
                 libssl_ERR_clear_error()
-                raise_from_errno(space.w_IOError, errno)
+                raise wrap_oserror(space, OSError(errno, ''),
+                                   exception_name = 'w_IOError')
             else:
                 raise _ssl_seterror(space, None, -1)
 
@@ -249,10 +253,10 @@
         w_stats = space.newdict()
         for name, ssl_func in SSL_CTX_STATS:
             w_value = space.wrap(ssl_func(self.ctx))
-            space.setitem_str(w_stats, attr, w_value)
+            space.setitem_str(w_stats, name, w_value)
         return w_stats
 
-    def set_default_verify_paths_w(self):
+    def set_default_verify_paths_w(self, space):
         ret = libssl_SSL_CTX_set_default_verify_paths(self.ctx)
         if ret != 1:
             raise _ssl_seterror(space, None, -1)
@@ -264,6 +268,11 @@
     verify_mode = GetSetProperty(SSLContext.get_verify_mode_w,
                                  SSLContext.set_verify_mode_w),
     _wrap_socket = interp2app(SSLContext.wrap_socket_w),
+    set_ciphers = interp2app(SSLContext.set_ciphers_w),
+    load_cert_chain = interp2app(SSLContext.load_cert_chain_w),
+    load_verify_locations = interp2app(SSLContext.load_verify_locations_w),
+    session_stats = interp2app(SSLContext.session_stats_w),
+    set_default_verify_paths=interp2app(SSLContext.set_default_verify_paths_w),
 )
 
     
diff --git a/pypy/rlib/ropenssl.py b/pypy/rlib/ropenssl.py
--- a/pypy/rlib/ropenssl.py
+++ b/pypy/rlib/ropenssl.py
@@ -189,11 +189,13 @@
 ssl_external('SSL_CTX_ctrl', [SSL_CTX, rffi.INT, rffi.INT, rffi.VOIDP], rffi.INT)
 ssl_external('SSL_CTX_set_verify', [SSL_CTX, rffi.INT, rffi.VOIDP], lltype.Void)
 ssl_external('SSL_CTX_get_verify_mode', [SSL_CTX], rffi.INT)
+ssl_external('SSL_CTX_set_default_verify_paths', [SSL_CTX], rffi.INT)
 ssl_external('SSL_CTX_set_cipher_list', [SSL_CTX, rffi.CCHARP], rffi.INT)
 ssl_external('SSL_CTX_load_verify_locations', [SSL_CTX, rffi.CCHARP, rffi.CCHARP], rffi.INT)
+ssl_external('SSL_CTX_check_private_key', [SSL_CTX], rffi.INT)
 ssl_external('SSL_CTX_set_session_id_context', [SSL_CTX, rffi.CCHARP, rffi.UINT], rffi.INT)
 SSL_CTX_STATS_NAMES = """
-    number connect connect_good connect_renegotiate accept accept_god
+    number connect connect_good connect_renegotiate accept accept_good
     accept_renegotiate hits misses timeouts cache_full""".split()
 SSL_CTX_STATS = unrolling_iterable(
     (name, external('SSL_CTX_sess_' + name, [SSL_CTX], rffi.LONG))
@@ -259,6 +261,7 @@
 
 ssl_external('ERR_get_error', [], rffi.INT)
 ssl_external('ERR_error_string', [rffi.ULONG, rffi.CCHARP], rffi.CCHARP)
+ssl_external('ERR_clear_error', [], lltype.Void)
 
 ssl_external('SSL_free', [SSL], lltype.Void, threadsafe=False)
 ssl_external('SSL_CTX_free', [SSL_CTX], lltype.Void, threadsafe=False)


More information about the pypy-commit mailing list