[Jython-checkins] jython: Fix for #1997: Incomplete ssl support in Jython2.7a2
alan.kennedy
jython-checkins at python.org
Sat Feb 2 11:57:18 CET 2013
http://hg.python.org/jython/rev/fe47bfd36e5c
changeset: 6975:fe47bfd36e5c
user: Alan Kennedy <alan at xhaus.com>
date: Sat Feb 02 10:55:45 2013 +0000
summary:
Fix for #1997: Incomplete ssl support in Jython2.7a2
files:
Lib/socket.py | 35 ++++++++++++------------
Lib/ssl.py | 2 +-
Lib/test/test_socket_ssl.py | 9 ++++++
3 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/Lib/socket.py b/Lib/socket.py
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -1850,24 +1850,31 @@
class ssl:
- def __init__(self, plain_sock, keyfile=None, certfile=None):
+ def __init__(self, jython_socket_wrapper, keyfile=None, certfile=None):
try:
- self.ssl_sock = self._make_ssl_socket(plain_sock)
- self._in_buf = java.io.BufferedInputStream(self.ssl_sock.getInputStream())
- self._out_buf = java.io.BufferedOutputStream(self.ssl_sock.getOutputStream())
+ self.jython_socket_wrapper = jython_socket_wrapper
+ jython_socket = self.jython_socket_wrapper._sock
+ self.java_ssl_socket = self._make_ssl_socket(jython_socket)
+ self._in_buf = java.io.BufferedInputStream(self.java_ssl_socket.getInputStream())
+ self._out_buf = java.io.BufferedOutputStream(self.java_ssl_socket.getOutputStream())
except java.lang.Exception, jlx:
raise _map_exception(jlx)
- def _make_ssl_socket(self, plain_socket, auto_close=0):
- java_net_socket = plain_socket._get_jsocket()
+ def _make_ssl_socket(self, jython_socket, auto_close=0):
+ java_net_socket = jython_socket._get_jsocket()
assert isinstance(java_net_socket, java.net.Socket)
host = java_net_socket.getInetAddress().getHostAddress()
port = java_net_socket.getPort()
factory = javax.net.ssl.SSLSocketFactory.getDefault();
- ssl_socket = factory.createSocket(java_net_socket, host, port, auto_close)
- ssl_socket.setEnabledCipherSuites(ssl_socket.getSupportedCipherSuites())
- ssl_socket.startHandshake()
- return ssl_socket
+ java_ssl_socket = factory.createSocket(java_net_socket, host, port, auto_close)
+ java_ssl_socket.setEnabledCipherSuites(java_ssl_socket.getSupportedCipherSuites())
+ java_ssl_socket.startHandshake()
+ return java_ssl_socket
+
+ def __getattr__(self, attr_name):
+ if hasattr(self.jython_socket_wrapper, attr_name):
+ return getattr(self.jython_socket_wrapper, attr_name)
+ raise AttributeError(attr_name)
def read(self, n=4096):
try:
@@ -1891,7 +1898,7 @@
def _get_server_cert(self):
try:
- return self.ssl_sock.getSession().getPeerCertificates()[0]
+ return self.java_ssl_socket.getSession().getPeerCertificates()[0]
except java.lang.Exception, jlx:
raise _map_exception(jlx)
@@ -1903,12 +1910,6 @@
cert = self._get_server_cert()
return cert.getIssuerDN().toString()
-_realssl = ssl
-def ssl(sock, keyfile=None, certfile=None):
- if hasattr(sock, "_sock"):
- sock = sock._sock
- return _realssl(sock, keyfile, certfile)
-
def test():
s = socket(AF_INET, SOCK_STREAM)
s.connect(("", 80))
diff --git a/Lib/ssl.py b/Lib/ssl.py
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -7,4 +7,4 @@
import socket
-wrap = socket.ssl
+wrap_socket = socket.ssl
diff --git a/Lib/test/test_socket_ssl.py b/Lib/test/test_socket_ssl.py
--- a/Lib/test/test_socket_ssl.py
+++ b/Lib/test/test_socket_ssl.py
@@ -61,11 +61,20 @@
time.sleep(1)
connector()
+def test_https_socket():
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.connect(('www.verisign.com', 443))
+ ssl_sock = socket.ssl(s)
+ ssl_sock.server()
+ ssl_sock.issuer()
+ s.close()
+
def test_main():
if not hasattr(socket, "ssl"):
raise test_support.TestSkipped("socket module has no ssl support")
test_rude_shutdown()
test_basic()
+ test_https_socket()
if __name__ == "__main__":
test_main()
--
Repository URL: http://hg.python.org/jython
More information about the Jython-checkins
mailing list