mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	allow ssl module to compile if openssl doesn't support SSL 3 (closes #22935)
Patch by Kurt Roeckx.
This commit is contained in:
		
							parent
							
								
									81f01fb104
								
							
						
					
					
						commit
						e32467cf6a
					
				
					 4 changed files with 24 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -889,7 +889,7 @@ def test_auth_issued_twice(self):
 | 
			
		|||
 | 
			
		||||
    def test_auth_ssl(self):
 | 
			
		||||
        try:
 | 
			
		||||
            self.client.ssl_version = ssl.PROTOCOL_SSLv3
 | 
			
		||||
            self.client.ssl_version = ssl.PROTOCOL_SSLv23
 | 
			
		||||
            self.client.auth()
 | 
			
		||||
            self.assertRaises(ValueError, self.client.auth)
 | 
			
		||||
        finally:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2168,19 +2168,23 @@ def test_protocol_sslv23(self):
 | 
			
		|||
                        sys.stdout.write(
 | 
			
		||||
                            " SSL2 client to SSL23 server test unexpectedly failed:\n %s\n"
 | 
			
		||||
                            % str(x))
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv3'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True)
 | 
			
		||||
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv3'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_OPTIONAL)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_OPTIONAL)
 | 
			
		||||
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv3'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_REQUIRED)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED)
 | 
			
		||||
 | 
			
		||||
            # Server with specific SSL options
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv3'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, False,
 | 
			
		||||
                               server_options=ssl.OP_NO_SSLv3)
 | 
			
		||||
            # Will choose TLSv1
 | 
			
		||||
| 
						 | 
				
			
			@ -2191,6 +2195,8 @@ def test_protocol_sslv23(self):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
        @skip_if_broken_ubuntu_ssl
 | 
			
		||||
        @unittest.skipUnless(hasattr(ssl, 'PROTOCOL_SSLv3'),
 | 
			
		||||
                             "OpenSSL is compiled without SSLv3 support")
 | 
			
		||||
        def test_protocol_sslv3(self):
 | 
			
		||||
            """Connecting to an SSLv3 server with various client options"""
 | 
			
		||||
            if support.verbose:
 | 
			
		||||
| 
						 | 
				
			
			@ -2218,6 +2224,7 @@ def test_protocol_tlsv1(self):
 | 
			
		|||
            try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED)
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv2'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv2, False)
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv3'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv3, False)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv23, False,
 | 
			
		||||
                               client_options=ssl.OP_NO_TLSv1)
 | 
			
		||||
| 
						 | 
				
			
			@ -2233,6 +2240,7 @@ def test_protocol_tlsv1_1(self):
 | 
			
		|||
            try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_TLSv1_1, True)
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv2'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_SSLv2, False)
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv3'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_SSLv3, False)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_SSLv23, False,
 | 
			
		||||
                               client_options=ssl.OP_NO_TLSv1_1)
 | 
			
		||||
| 
						 | 
				
			
			@ -2255,6 +2263,7 @@ def test_protocol_tlsv1_2(self):
 | 
			
		|||
                               client_options=ssl.OP_NO_SSLv3|ssl.OP_NO_SSLv2,)
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv2'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_SSLv2, False)
 | 
			
		||||
            if hasattr(ssl, 'PROTOCOL_SSLv3'):
 | 
			
		||||
                try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_SSLv3, False)
 | 
			
		||||
            try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_SSLv23, False,
 | 
			
		||||
                               client_options=ssl.OP_NO_TLSv1_2)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -215,6 +215,9 @@ Tests
 | 
			
		|||
Build
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
- Issue #22935: Allow the ssl module to be compiled if openssl doesn't support
 | 
			
		||||
  SSL 3.
 | 
			
		||||
 | 
			
		||||
- Issue #16537: Check whether self.extensions is empty in setup.py. Patch by
 | 
			
		||||
  Jonathan Hosmer.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2016,8 +2016,10 @@ context_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 | 
			
		|||
    else if (proto_version == PY_SSL_VERSION_TLS1_2)
 | 
			
		||||
        ctx = SSL_CTX_new(TLSv1_2_method());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
    else if (proto_version == PY_SSL_VERSION_SSL3)
 | 
			
		||||
        ctx = SSL_CTX_new(SSLv3_method());
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL2
 | 
			
		||||
    else if (proto_version == PY_SSL_VERSION_SSL2)
 | 
			
		||||
        ctx = SSL_CTX_new(SSLv2_method());
 | 
			
		||||
| 
						 | 
				
			
			@ -4065,8 +4067,10 @@ PyInit__ssl(void)
 | 
			
		|||
    PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
 | 
			
		||||
                            PY_SSL_VERSION_SSL2);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SSL3
 | 
			
		||||
    PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
 | 
			
		||||
                            PY_SSL_VERSION_SSL3);
 | 
			
		||||
#endif
 | 
			
		||||
    PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
 | 
			
		||||
                            PY_SSL_VERSION_SSL23);
 | 
			
		||||
    PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue