diff options
Diffstat (limited to 'cherrypy/wsgiserver/ssl_pyopenssl.py')
-rw-r--r-- | cherrypy/wsgiserver/ssl_pyopenssl.py | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/cherrypy/wsgiserver/ssl_pyopenssl.py b/cherrypy/wsgiserver/ssl_pyopenssl.py index 42745fbc..f8f2dafe 100644 --- a/cherrypy/wsgiserver/ssl_pyopenssl.py +++ b/cherrypy/wsgiserver/ssl_pyopenssl.py @@ -1,7 +1,7 @@ """A library for integrating pyOpenSSL with CherryPy. The OpenSSL module must be importable for SSL functionality. -You can obtain it from http://pyopenssl.sourceforge.net/ +You can obtain it from `here <https://launchpad.net/pyopenssl>`_. To use this module, set CherryPyWSGIServer.ssl_adapter to an instance of SSLAdapter. There are two ways to use SSL: @@ -44,6 +44,7 @@ except ImportError: class SSL_fileobject(wsgiserver.CP_fileobject): + """SSL file object attached to a socket object.""" ssl_timeout = 3 @@ -96,15 +97,8 @@ class SSL_fileobject(wsgiserver.CP_fileobject): if time.time() - start > self.ssl_timeout: raise socket.timeout("timed out") - def recv(self, *args, **kwargs): - buf = [] - r = super(SSL_fileobject, self).recv - while True: - data = self._safe_call(True, r, *args, **kwargs) - buf.append(data) - p = self._sock.pending() - if not p: - return "".join(buf) + def recv(self, size): + return self._safe_call(True, super(SSL_fileobject, self).recv, size) def sendall(self, *args, **kwargs): return self._safe_call(False, super(SSL_fileobject, self).sendall, @@ -116,6 +110,7 @@ class SSL_fileobject(wsgiserver.CP_fileobject): class SSLConnection: + """A thread-safe wrapper for an SSL.Connection. ``*args``: the arguments to create the wrapped ``SSL.Connection(*args)``. @@ -151,6 +146,7 @@ class SSLConnection: class pyOpenSSLAdapter(wsgiserver.SSLAdapter): + """A wrapper for integrating pyOpenSSL with CherryPy.""" context = None @@ -205,11 +201,11 @@ class pyOpenSSLAdapter(wsgiserver.SSLAdapter): ssl_environ = { "HTTPS": "on", # pyOpenSSL doesn't provide access to any of these AFAICT -## 'SSL_PROTOCOL': 'SSLv2', -## SSL_CIPHER string The cipher specification name -## SSL_VERSION_INTERFACE string The mod_ssl program version -## SSL_VERSION_LIBRARY string The OpenSSL program version - } + # 'SSL_PROTOCOL': 'SSLv2', + # SSL_CIPHER string The cipher specification name + # SSL_VERSION_INTERFACE string The mod_ssl program version + # SSL_VERSION_LIBRARY string The OpenSSL program version + } if self.certificate: # Server certificate attributes @@ -218,9 +214,11 @@ class pyOpenSSLAdapter(wsgiserver.SSLAdapter): ssl_environ.update({ 'SSL_SERVER_M_VERSION': cert.get_version(), 'SSL_SERVER_M_SERIAL': cert.get_serial_number(), -## 'SSL_SERVER_V_START': Validity of server's certificate (start time), -## 'SSL_SERVER_V_END': Validity of server's certificate (end time), - }) + # 'SSL_SERVER_V_START': + # Validity of server's certificate (start time), + # 'SSL_SERVER_V_END': + # Validity of server's certificate (end time), + }) for prefix, dn in [("I", cert.get_issuer()), ("S", cert.get_subject())]: @@ -253,4 +251,3 @@ class pyOpenSSLAdapter(wsgiserver.SSLAdapter): return f else: return wsgiserver.CP_fileobject(sock, mode, bufsize) - |