You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2017/04/02 01:55:21 UTC

[2/5] libcloud git commit: committed fix

committed fix


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/3637d7cc
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/3637d7cc
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/3637d7cc

Branch: refs/heads/trunk
Commit: 3637d7cc1c8b0f852edfad5ed3f7a6f808c2b788
Parents: 64e0b3c
Author: Anthony Shaw <an...@apache.org>
Authored: Sun Apr 2 11:37:30 2017 +1000
Committer: Anthony Shaw <an...@apache.org>
Committed: Sun Apr 2 11:37:30 2017 +1000

----------------------------------------------------------------------
 libcloud/httplib_ssl.py | 66 ++++++++++----------------------------------
 1 file changed, 14 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/3637d7cc/libcloud/httplib_ssl.py
----------------------------------------------------------------------
diff --git a/libcloud/httplib_ssl.py b/libcloud/httplib_ssl.py
index a88ea0d..cf1c749 100644
--- a/libcloud/httplib_ssl.py
+++ b/libcloud/httplib_ssl.py
@@ -22,7 +22,7 @@ import os
 import warnings
 import requests
 from requests.adapters import HTTPAdapter
-from requests.packages.urllib3.util.ssl_ import create_urllib3_context
+from requests.packages.urllib3.poolmanager import PoolManager
 
 import libcloud.security
 from libcloud.utils.py3 import urlparse, PY3
@@ -38,57 +38,18 @@ ALLOW_REDIRECTS = 1
 HTTP_PROXY_ENV_VARIABLE_NAME = 'http_proxy'
 
 
-class SignedX509Adapter(HTTPAdapter):
-    def __init__(self, cert_file=None, key_file=None):
+class SignedHTTPSAdapter(HTTPAdapter):
+    def __init__(self, cert_file, key_file):
         self.cert_file = cert_file
         self.key_file = key_file
+        super(SignedX509Adapter, self).__init__()
 
-    def init_poolmanager(self, *args, **kwargs):
-        self.tls_context = create_urllib3_context()
-        kwargs['ssl_context'] = self.tls_context
-        
-        has_sni = getattr(ssl, 'HAS_SNI', False)
-
-        if has_sni:
-            self.tls_context.verify_mode = ssl.CERT_REQUIRED
-
-            if self.cert_file and self.key_file:
-                self.tls_context.load_cert_chain(
-                    certfile=self.cert_file,
-                    keyfile=self.key_file,
-                    password=None)
-
-            if self.ca_cert:
-                self.tls_context.load_verify_locations(cafile=self.ca_cert)
-
-            try:
-                self.sock = self.tls_context.wrap_socket(
-                    sock,
-                    server_hostname=self.host,
-                )
-            except:
-                exc = sys.exc_info()[1]
-                exc = get_socket_error_exception(ssl_version=ssl_version,
-                                                 exc=exc)
-                raise exc
-        else:
-            # SNI support not available
-            try:
-                self.sock = ssl.wrap_socket(
-                    sock,
-                    self.key_file,
-                    self.cert_file,
-                    cert_reqs=ssl.CERT_REQUIRED,
-                    ca_certs=self.ca_cert,
-                    ssl_version=ssl_version
-                )
-            except:
-                exc = sys.exc_info()[1]
-                exc = get_socket_error_exception(ssl_version=ssl_version,
-                                                 exc=exc)
-                raise exc
-        
-        return super(HTTPAdapter, self).init_poolmanager(*args, **kwargs)
+    def init_poolmanager(self, connections, maxsize, block=False):
+        self.poolmanager = PoolManager(
+            num_pools=connections, maxsize=maxsize,
+            block=block,
+            cert_file=self.cert_file,
+            key_file=self.key_file)
 
 
 class LibcloudBaseConnection(object):
@@ -199,7 +160,7 @@ class LibcloudBaseConnection(object):
         Setup request signing by mounting a signing
         adapter to the session
         """
-        self.session.mount("https", SignedX509Adapter(cert_file, key_file))
+        self.session.mount('https://', SignedHTTPSAdapter(cert_file, key_file))
 
 
 class LibcloudConnection(LibcloudBaseConnection):
@@ -220,11 +181,12 @@ class LibcloudConnection(LibcloudBaseConnection):
 
         self._setup_verify()
         self._setup_ca_cert()
-        
+
         LibcloudBaseConnection.__init__(self)
-        
+
         if 'cert_file' in kwargs or 'key_file' in kwargs:
             self._setup_signing(**kwargs)
+
         if proxy_url:
             self.set_http_proxy(proxy_url=proxy_url)
         self.session.timeout = kwargs.get('timeout', 60)