You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.5 KiB
61 lines
2.5 KiB
6 years ago
|
diff -urN M2Crypto/M2Crypto/httpslib.py M2Crypto-0.21.1/M2Crypto/httpslib.py
|
||
|
--- M2Crypto/M2Crypto/httpslib.py 2011-01-15 20:10:05.000000000 +0100
|
||
|
+++ M2Crypto-0.21.1/M2Crypto/httpslib.py 2012-03-13 15:04:13.848836581 +0100
|
||
|
@@ -44,10 +44,33 @@
|
||
|
HTTPConnection.__init__(self, host, port, strict)
|
||
|
|
||
|
def connect(self):
|
||
|
- self.sock = SSL.Connection(self.ssl_ctx)
|
||
|
- if self.session:
|
||
|
- self.sock.set_session(self.session)
|
||
|
- self.sock.connect((self.host, self.port))
|
||
|
+ error = None
|
||
|
+ # We ignore the returned sockaddr because SSL.Connection.connect needs
|
||
|
+ # a host name.
|
||
|
+ for (family, _, _, _, _) in \
|
||
|
+ socket.getaddrinfo(self.host, self.port, 0, socket.SOCK_STREAM):
|
||
|
+ sock = None
|
||
|
+ try:
|
||
|
+ try:
|
||
|
+ sock = SSL.Connection(self.ssl_ctx, family=family)
|
||
|
+ if self.session is not None:
|
||
|
+ sock.set_session(self.session)
|
||
|
+ sock.connect((self.host, self.port))
|
||
|
+
|
||
|
+ self.sock = sock
|
||
|
+ sock = None
|
||
|
+ return
|
||
|
+ except socket.error, e:
|
||
|
+ # Other exception are probably SSL-related, in that case we
|
||
|
+ # abort and the exception is forwarded to the caller.
|
||
|
+ error = e
|
||
|
+ finally:
|
||
|
+ if sock is not None:
|
||
|
+ sock.close()
|
||
|
+
|
||
|
+ if error is None:
|
||
|
+ raise AssertionError("Empty list returned by getaddrinfo")
|
||
|
+ raise error
|
||
|
|
||
|
def close(self):
|
||
|
# This kludges around line 545 of httplib.py,
|
||
|
diff -urN M2Crypto/M2Crypto/SSL/Connection.py M2Crypto-0.21.1/M2Crypto/SSL/Connection.py
|
||
|
--- M2Crypto/M2Crypto/SSL/Connection.py 2012-03-13 15:00:25.058411492 +0100
|
||
|
+++ M2Crypto-0.21.1/M2Crypto/SSL/Connection.py 2012-03-13 15:04:13.849836578 +0100
|
||
|
@@ -38,13 +38,13 @@
|
||
|
m2_bio_free = m2.bio_free
|
||
|
m2_ssl_free = m2.ssl_free
|
||
|
|
||
|
- def __init__(self, ctx, sock=None):
|
||
|
+ def __init__(self, ctx, sock=None, family=socket.AF_INET):
|
||
|
self.ctx = ctx
|
||
|
self.ssl = m2.ssl_new(self.ctx.ctx)
|
||
|
if sock is not None:
|
||
|
self.socket = sock
|
||
|
else:
|
||
|
- self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
+ self.socket = socket.socket(family, socket.SOCK_STREAM)
|
||
|
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||
|
self._fileno = self.socket.fileno()
|
||
|
|