[pypy-commit] pypy stdlib-2.7.9: ssl.get_default_verify_paths()

amauryfa noreply at buildbot.pypy.org
Mon Feb 2 21:52:29 CET 2015


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: stdlib-2.7.9
Changeset: r75658:447c4c3f1931
Date: 2015-02-02 21:51 +0100
http://bitbucket.org/pypy/pypy/changeset/447c4c3f1931/

Log:	ssl.get_default_verify_paths()

diff --git a/pypy/module/_ssl/__init__.py b/pypy/module/_ssl/__init__.py
--- a/pypy/module/_ssl/__init__.py
+++ b/pypy/module/_ssl/__init__.py
@@ -9,6 +9,7 @@
         '_test_decode_cert': 'interp_ssl._test_decode_cert',
         'txt2obj': 'interp_ssl.txt2obj',
         'nid2obj': 'interp_ssl.nid2obj',
+        'get_default_verify_paths': 'interp_ssl.get_default_verify_paths',
 
         'SSLError': "interp_ssl.get_exception_class(space, 'w_sslerror')",
         'SSLZeroReturnError': "interp_ssl.get_exception_class(space, 'w_sslzeroreturnerror')",
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
@@ -1563,3 +1563,18 @@
 @unwrap_spec(nid=int)
 def nid2obj(space, nid):
     return space.newtuple([])
+
+
+def w_convert_path(space, path):
+    if not path:
+        return space.w_None
+    else:
+        return space.wrapbytes(rffi.charp2str(path))
+
+def get_default_verify_paths(space):
+    return space.newtuple([
+        w_convert_path(space, libssl_X509_get_default_cert_file_env()),
+        w_convert_path(space, libssl_X509_get_default_cert_file()),
+        w_convert_path(space, libssl_X509_get_default_cert_dir_env()),
+        w_convert_path(space, libssl_X509_get_default_cert_dir()),
+        ])
diff --git a/pypy/module/_ssl/test/test_ssl.py b/pypy/module/_ssl/test/test_ssl.py
--- a/pypy/module/_ssl/test/test_ssl.py
+++ b/pypy/module/_ssl/test/test_ssl.py
@@ -363,6 +363,14 @@
         raises(TypeError, ctx.load_dh_params, None)
         raises(_ssl.SSLError, ctx.load_dh_params, self.keycert)
 
+    def test_get_default_verify_paths(self):
+        import _ssl
+        paths = _ssl.get_default_verify_paths()
+        assert paths[0] == 'SSL_CERT_FILE'
+        assert paths[2] == 'SSL_CERT_DIR'
+        assert paths[1].endswith('cert.pem')
+        assert paths[3].endswith('certs')
+
 
 class AppTestSSLError:
     spaceconfig = dict(usemodules=('_ssl', '_socket', 'thread'))
diff --git a/rpython/rlib/ropenssl.py b/rpython/rlib/ropenssl.py
--- a/rpython/rlib/ropenssl.py
+++ b/rpython/rlib/ropenssl.py
@@ -338,6 +338,11 @@
 ssl_external('X509_VERIFY_PARAM_get_flags', [X509_VERIFY_PARAM], rffi.ULONG)
 ssl_external('X509_STORE_add_cert', [X509_STORE, X509], rffi.INT)
 
+ssl_external('X509_get_default_cert_file_env', [], rffi.CCHARP)
+ssl_external('X509_get_default_cert_file', [], rffi.CCHARP)
+ssl_external('X509_get_default_cert_dir_env', [], rffi.CCHARP)
+ssl_external('X509_get_default_cert_dir', [], rffi.CCHARP)
+
 ssl_external('OBJ_obj2txt',
              [rffi.CCHARP, rffi.INT, ASN1_OBJECT, rffi.INT], rffi.INT)
 ssl_external('OBJ_obj2nid', [ASN1_OBJECT], rffi.INT)


More information about the pypy-commit mailing list