An interpreted, interactive, object-oriented programming language
CentOS Sources
2017-08-01 71084d584ff953f5463757ec6536406320560b4d
commit | author | age
f63228 1
CS 2 # HG changeset patch
3 # User Benjamin Peterson <benjamin@python.org>
4 # Date 1412221981 14400
5 # Node ID 1a36d4e8cf4edfdc4c7d59a40075b8cf00e3ad3c
6 # Parent  222e0faa5fa9567f657f13fc78a60069142e09ae
7 fix sslwrap_simple (closes #22523)
8
9 Thanks Alex Gaynor.
10
11 diff --git a/Lib/ssl.py b/Lib/ssl.py
12 --- a/Lib/ssl.py
13 +++ b/Lib/ssl.py
14 @@ -969,16 +969,16 @@ def get_protocol_name(protocol_code):
15  # a replacement for the old socket.ssl function
16  
17  def sslwrap_simple(sock, keyfile=None, certfile=None):
18 -
19      """A replacement for the old socket.ssl function.  Designed
20      for compability with Python 2.5 and earlier.  Will disappear in
21      Python 3.0."""
22 -
23      if hasattr(sock, "_sock"):
24          sock = sock._sock
25  
26 -    ssl_sock = _ssl.sslwrap(sock, 0, keyfile, certfile, CERT_NONE,
27 -                            PROTOCOL_SSLv23, None)
28 +    ctx = SSLContext(PROTOCOL_SSLv23)
29 +    if keyfile or certfile:
30 +        ctx.load_cert_chain(certfile, keyfile)
31 +    ssl_sock = ctx._wrap_socket(sock, server_side=False)
32      try:
33          sock.getpeername()
34      except socket_error:
35 diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
36 --- a/Lib/test/test_ssl.py
37 +++ b/Lib/test/test_ssl.py
38 @@ -94,6 +94,8 @@ class BasicTests(unittest.TestCase):
39                  pass
40              else:
41                  raise
42 +
43 +
44  def can_clear_options():
45      # 0.9.8m or higher
46      return ssl._OPENSSL_API_VERSION >= (0, 9, 8, 13, 15)
47 @@ -2944,7 +2946,7 @@ def test_main(verbose=False):
48          if not os.path.exists(filename):
49              raise support.TestFailed("Can't read certificate file %r" % filename)
50  
51 -    tests = [ContextTests, BasicSocketTests, SSLErrorTests]
52 +    tests = [ContextTests, BasicTests, BasicSocketTests, SSLErrorTests]
53  
54      if support.is_resource_enabled('network'):
55          tests.append(NetworkedTests)
56 diff --git a/Modules/_ssl.c b/Modules/_ssl.c
57 --- a/Modules/_ssl.c
58 +++ b/Modules/_ssl.c
59 @@ -517,10 +517,12 @@ newPySSLSocket(PySSLContext *sslctx, PyS
60      self->socket_type = socket_type;
61      self->Socket = sock;
62      Py_INCREF(self->Socket);
63 -    self->ssl_sock = PyWeakref_NewRef(ssl_sock, NULL);
64 -    if (self->ssl_sock == NULL) {
65 -        Py_DECREF(self);
66 -        return NULL;
67 +    if (ssl_sock != Py_None) {
68 +        self->ssl_sock = PyWeakref_NewRef(ssl_sock, NULL);
69 +        if (self->ssl_sock == NULL) {
70 +            Py_DECREF(self);
71 +            return NULL;
72 +        }
73      }
74      return self;
75  }
76 @@ -2931,8 +2933,12 @@ static int
77  
78      ssl = SSL_get_app_data(s);
79      assert(PySSLSocket_Check(ssl));
80 -    ssl_socket = PyWeakref_GetObject(ssl->ssl_sock);
81 -    Py_INCREF(ssl_socket);
82 +    if (ssl->ssl_sock == NULL) {
83 +        ssl_socket = Py_None;
84 +    } else {
85 +        ssl_socket = PyWeakref_GetObject(ssl->ssl_sock);
86 +        Py_INCREF(ssl_socket);
87 +    }
88      if (ssl_socket == Py_None) {
89          goto error;
90      }
91