Author: Amaury Forgeot d'Arc <[email protected]>
Branch: stdlib-2.7.9
Changeset: r75656:5be3e3aef9b7
Date: 2015-02-02 21:20 +0100
http://bitbucket.org/pypy/pypy/changeset/5be3e3aef9b7/

Log:    ssl: Add ALERT_DESCRIPTION_* constants

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
@@ -1,4 +1,5 @@
 from pypy.interpreter.mixedmodule import MixedModule
+from pypy.module._ssl import ssl_data
 
 class Module(MixedModule):
     """Implementation module for SSL socket operations.
@@ -36,6 +37,9 @@
             Module.interpleveldefs['RAND_status'] = "interp_ssl.RAND_status"
             Module.interpleveldefs['RAND_egd'] = "interp_ssl.RAND_egd"
 
+        for name, value in ssl_data.ALERT_DESCRIPTION_CODES.items():
+            Module.interpleveldefs[name] = "space.wrap(%r)" % value
+
         super(Module, cls).buildloaders()
 
     def startup(self, space):
diff --git a/pypy/module/_ssl/ssl_data.py b/pypy/module/_ssl/ssl_data.py
--- a/pypy/module/_ssl/ssl_data.py
+++ b/pypy/module/_ssl/ssl_data.py
@@ -347,6 +347,21 @@
     setattr(CConfig, code, rffi_platform.DefinedConstantInteger(
         '%s_R_%s' % (lib, code)))
 
+# Constants for ALERT_DESCRIPTION_ error codes
+AD_NAMES = """
+    CLOSE_NOTIFY UNEXPECTED_MESSAGE BAD_RECORD_MAC RECORD_OVERFLOW
+    DECOMPRESSION_FAILURE HANDSHAKE_FAILURE BAD_CERTIFICATE
+    UNSUPPORTED_CERTIFICATE CERTIFICATE_REVOKED CERTIFICATE_EXPIRED
+    CERTIFICATE_UNKNOWN ILLEGAL_PARAMETER UNKNOWN_CA ACCESS_DENIED
+    DECODE_ERROR DECRYPT_ERROR PROTOCOL_VERSION INSUFFICIENT_SECURITY
+    INTERNAL_ERROR USER_CANCELLED NO_RENEGOTIATION UNSUPPORTED_EXTENSION
+    CERTIFICATE_UNOBTAINABLE UNRECOGNIZED_NAME BAD_CERTIFICATE_STATUS_RESPONSE
+    BAD_CERTIFICATE_HASH_VALUE UNKNOWN_PSK_IDENTITY
+    """.split()
+for name in AD_NAMES:
+    setattr(CConfig, name, rffi_platform.DefinedConstantInteger(
+        'SSL_AD_%s' % name))
+
 cconfig = rffi_platform.configure(CConfig)
 
 LIBRARY_CODES_TO_NAMES = {}
@@ -356,3 +371,8 @@
 for lib, code in error_codes:
     ERROR_CODES_TO_NAMES[cconfig[lib], cconfig[code]] = code
 
+ALERT_DESCRIPTION_CODES = {}
+for name in AD_NAMES:
+    value = cconfig[name]
+    if value is not None:
+        ALERT_DESCRIPTION_CODES['ALERT_DESCRIPTION_%s' % name] = value
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
@@ -38,6 +38,8 @@
         assert isinstance(_ssl.OPENSSL_VERSION, str)
         assert 'openssl' in _ssl.OPENSSL_VERSION.lower()
 
+        assert isinstance(_ssl.ALERT_DESCRIPTION_ACCESS_DENIED, int)
+
     def test_RAND_add(self):
         import _ssl
         if not hasattr(_ssl, "RAND_add"):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to