12 from mercurial.i18n import _ |
12 from mercurial.i18n import _ |
13 try: |
13 try: |
14 # avoid using deprecated/broken FakeSocket in python 2.6 |
14 # avoid using deprecated/broken FakeSocket in python 2.6 |
15 import ssl |
15 import ssl |
16 CERT_REQUIRED = ssl.CERT_REQUIRED |
16 CERT_REQUIRED = ssl.CERT_REQUIRED |
17 PROTOCOL_TLSv1 = ssl.PROTOCOL_TLSv1 |
|
18 try: |
17 try: |
19 ssl_context = ssl.SSLContext |
18 ssl_context = ssl.SSLContext |
20 |
19 |
21 def ssl_wrap_socket(sock, keyfile, certfile, cert_reqs=ssl.CERT_NONE, |
20 def ssl_wrap_socket(sock, keyfile, certfile, cert_reqs=ssl.CERT_NONE, |
22 ca_certs=None, serverhostname=None): |
21 ca_certs=None, serverhostname=None): |
48 except AttributeError: |
47 except AttributeError: |
49 def ssl_wrap_socket(sock, keyfile, certfile, cert_reqs=ssl.CERT_NONE, |
48 def ssl_wrap_socket(sock, keyfile, certfile, cert_reqs=ssl.CERT_NONE, |
50 ca_certs=None, serverhostname=None): |
49 ca_certs=None, serverhostname=None): |
51 sslsocket = ssl.wrap_socket(sock, keyfile, certfile, |
50 sslsocket = ssl.wrap_socket(sock, keyfile, certfile, |
52 cert_reqs=cert_reqs, ca_certs=ca_certs, |
51 cert_reqs=cert_reqs, ca_certs=ca_certs, |
53 ssl_version=PROTOCOL_TLSv1) |
52 ssl_version=ssl.PROTOCOL_TLSv1) |
54 # check if wrap_socket failed silently because socket had been |
53 # check if wrap_socket failed silently because socket had been |
55 # closed |
54 # closed |
56 # - see http://bugs.python.org/issue13721 |
55 # - see http://bugs.python.org/issue13721 |
57 if not sslsocket.cipher(): |
56 if not sslsocket.cipher(): |
58 raise util.Abort(_('ssl connection failed')) |
57 raise util.Abort(_('ssl connection failed')) |
59 return sslsocket |
58 return sslsocket |
60 except ImportError: |
59 except ImportError: |
61 CERT_REQUIRED = 2 |
60 CERT_REQUIRED = 2 |
62 |
|
63 PROTOCOL_TLSv1 = 3 |
|
64 |
61 |
65 import socket, httplib |
62 import socket, httplib |
66 |
63 |
67 def ssl_wrap_socket(sock, keyfile, certfile, cert_reqs=CERT_REQUIRED, |
64 def ssl_wrap_socket(sock, keyfile, certfile, cert_reqs=CERT_REQUIRED, |
68 ca_certs=None, serverhostname=None): |
65 ca_certs=None, serverhostname=None): |