Author: tomaz
Date: Sun Jun  3 07:10:53 2012
New Revision: 1345625

URL: http://svn.apache.org/viewvc?rev=1345625&view=rev
Log:
Fix a bug with invalid base64 string decoding in multiple drivers which occured
when using Python 3. Part of LIBCLOUD-204.

Modified:
    libcloud/trunk/CHANGES
    libcloud/trunk/libcloud/common/cloudstack.py
    libcloud/trunk/libcloud/compute/drivers/cloudsigma.py
    libcloud/trunk/libcloud/compute/drivers/ec2.py
    libcloud/trunk/libcloud/compute/drivers/elasticstack.py
    libcloud/trunk/libcloud/compute/drivers/joyent.py
    libcloud/trunk/libcloud/compute/drivers/opennebula.py
    libcloud/trunk/libcloud/compute/drivers/opsource.py
    libcloud/trunk/libcloud/compute/drivers/slicehost.py
    libcloud/trunk/libcloud/compute/drivers/vcloud.py
    libcloud/trunk/libcloud/compute/drivers/vpsnet.py
    libcloud/trunk/libcloud/dns/drivers/route53.py
    libcloud/trunk/libcloud/dns/drivers/zerigo.py
    libcloud/trunk/libcloud/storage/drivers/atmos.py
    libcloud/trunk/libcloud/storage/drivers/google_storage.py
    libcloud/trunk/libcloud/storage/drivers/s3.py
    libcloud/trunk/test/storage/test_atmos.py

Modified: libcloud/trunk/CHANGES
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/CHANGES?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Sun Jun  3 07:10:53 2012
@@ -2,7 +2,8 @@
 
 Changes with Apache Libcloud in development:
 
-  *) Compute:
+  *) Compute
+
     - Add a timeout of 10 seconds to OpenStackAuthConnection class.
       ; LIBCLOUD-199
       [Chris Gilmer]
@@ -11,17 +12,41 @@ Changes with Apache Libcloud in developm
       when we immediately can't connect to a server. ; LIBCLOUD-197
       [Jay Doane]
 
-    - Fix a bug with Python 3 support in IBM SCE driver. ; LIBCLOUD-204
-      [Sengor Kusturica, Hutson Betts]
+    - Fix a bug with Python 3 support in the following drivers ; LIBCLOUD-204
+      - IBM SCE,
+      - CloudStack
+      - CloudSigma
+      - OpenNebula
+      - VpsNet
+      - EC2
+      - ElasticStack
+      - vCloud
+      - OpSource
+      - Slicehost
+      - Joyent
+      [Sengor Kusturica, Hutson Betts, Tomaz Muraus]
 
     - Make CloudStuck driver more robust and make it work if list_images() call
       returns no images. ; LIBCLOUD-202
       [Gabriel Reid]
 
-  *) DNS:
+  *) DNS
+
     - Add support for GEO RecordType to Zerigo driver. ; LIBCLOUD-203
       [Gary Wilson]
 
+    - Fix a bug with Python 3 support in the following drivers ; LIBCLOUD-204
+      - Zerigo
+      [Tomaz Muraus]
+
+  *) Storage
+
+    - Fix a bug with Python 3 support in the following drivers ; LIBCLOUD-204
+      - Atmos
+      - Google Storage
+      - Amazon S3
+      [Tomaz Muraus]
+
 Changes with Apache Libcloud 0.10.1:
 
   *) General:

Modified: libcloud/trunk/libcloud/common/cloudstack.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/common/cloudstack.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/common/cloudstack.py (original)
+++ libcloud/trunk/libcloud/common/cloudstack.py Sun Jun  3 07:10:53 2012
@@ -55,7 +55,7 @@ class CloudStackConnection(ConnectionUse
         return params
 
     def pre_connect_hook(self, params, headers):
-        params['signature'] = self._make_signature(params)
+        params['signature'] = self._make_signature(params).decode('utf-8')
 
         return params, headers
 

Modified: libcloud/trunk/libcloud/compute/drivers/cloudsigma.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/cloudsigma.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/cloudsigma.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/cloudsigma.py Sun Jun  3 07:10:53 
2012
@@ -195,7 +195,8 @@ class CloudSigmaBaseConnection(Connectio
         headers['Content-Type'] = 'application/json'
 
         headers['Authorization'] = 'Basic %s' % (base64.b64encode(b('%s:%s' %
-                                                 (self.user_id, self.key))))
+                                                 (self.user_id,
+                                                     
self.key))).decode('utf-8'))
 
         return headers
 

Modified: libcloud/trunk/libcloud/compute/drivers/ec2.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/ec2.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/ec2.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/ec2.py Sun Jun  3 07:10:53 2012
@@ -257,7 +257,7 @@ class EC2Connection(ConnectionUserAndKey
         b64_hmac = base64.b64encode(
             hmac.new(b(secret_key), b(string_to_sign), 
digestmod=sha256).digest()
         )
-        return b64_hmac
+        return b64_hmac.decode('utf-8')
 
 
 class ExEC2AvailabilityZone(object):

Modified: libcloud/trunk/libcloud/compute/drivers/elasticstack.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/elasticstack.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/elasticstack.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/elasticstack.py Sun Jun  3 07:10:53 
2012
@@ -157,7 +157,8 @@ class ElasticStackBaseConnection(Connect
         headers['Authorization'] = ('Basic %s'
                                     % (base64.b64encode(b('%s:%s'
                                                         % (self.user_id,
-                                                           self.key)))))
+                                                           self.key))))
+                                                        .decode('utf-8'))
         return headers
 
 

Modified: libcloud/trunk/libcloud/compute/drivers/joyent.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/joyent.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/joyent.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/joyent.py Sun Jun  3 07:10:53 2012
@@ -69,7 +69,7 @@ class JoyentConnection(ConnectionUserAnd
         headers['X-Api-Version'] = API_VERSION
 
         user_b64 = base64.b64encode(b('%s:%s' % (self.user_id, self.key)))
-        headers['Authorization'] = 'Basic %s' % (user_b64)
+        headers['Authorization'] = 'Basic %s' % (user_b64.decode('utf-8'))
         return headers
 
 

Modified: libcloud/trunk/libcloud/compute/drivers/opennebula.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/opennebula.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/opennebula.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/opennebula.py Sun Jun  3 07:10:53 
2012
@@ -168,7 +168,8 @@ class OpenNebulaConnection(ConnectionUse
         """
         pass_sha1 = hashlib.sha1(b(self.key)).hexdigest()
         headers['Authorization'] = ('Basic %s' % b64encode(b('%s:%s' %
-                                                (self.user_id, pass_sha1))))
+                                                (self.user_id,
+                                                 pass_sha1))).decode('utf-8'))
         return headers
 
 

Modified: libcloud/trunk/libcloud/compute/drivers/opsource.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/opsource.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/opsource.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/opsource.py Sun Jun  3 07:10:53 2012
@@ -136,7 +136,8 @@ class OpsourceConnection(ConnectionUserA
 
     def add_default_headers(self, headers):
         headers['Authorization'] = ('Basic %s' % b64encode(b('%s:%s' %
-                                                (self.user_id, self.key))))
+                                                (self.user_id,
+                                                 self.key))).decode('utf-8'))
         return headers
 
     def request(self, action, params=None, data='',

Modified: libcloud/trunk/libcloud/compute/drivers/slicehost.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/slicehost.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/slicehost.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/slicehost.py Sun Jun  3 07:10:53 
2012
@@ -52,7 +52,8 @@ class SlicehostConnection(ConnectionKey)
 
     def add_default_headers(self, headers):
         headers['Authorization'] = ('Basic %s'
-                              % (base64.b64encode(b('%s:' % self.key))))
+                              % (base64.b64encode(b('%s:' %
+                                  self.key))).decode('utf-8'))
         return headers
 
 

Modified: libcloud/trunk/libcloud/compute/drivers/vcloud.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/vcloud.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/vcloud.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/vcloud.py Sun Jun  3 07:10:53 2012
@@ -263,7 +263,8 @@ class VCloudConnection(ConnectionUserAnd
         return {
             'Authorization':
                 "Basic %s"
-                % base64.b64encode(b('%s:%s' % (self.user_id, self.key))),
+                % base64.b64encode(b('%s:%s' % (self.user_id,
+                    self.key))).decode('utf-8'),
             'Content-Length': 0,
             'Accept': 'application/*+xml'
         }

Modified: libcloud/trunk/libcloud/compute/drivers/vpsnet.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/vpsnet.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/vpsnet.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/vpsnet.py Sun Jun  3 07:10:53 2012
@@ -71,7 +71,7 @@ class VPSNetConnection(ConnectionUserAnd
 
     def add_default_headers(self, headers):
         user_b64 = base64.b64encode(b('%s:%s' % (self.user_id, self.key)))
-        headers['Authorization'] = 'Basic %s' % (user_b64)
+        headers['Authorization'] = 'Basic %s' % (user_b64.decode('utf-8'))
         return headers
 
 class VPSNetNodeDriver(NodeDriver):

Modified: libcloud/trunk/libcloud/dns/drivers/route53.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/dns/drivers/route53.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/dns/drivers/route53.py (original)
+++ libcloud/trunk/libcloud/dns/drivers/route53.py Sun Jun  3 07:10:53 2012
@@ -107,7 +107,7 @@ class Route53Connection(ConnectionUserAn
             hmac.new(b(secret_key), b(time_string), digestmod=sha1).digest()
         )
 
-        return b64_hmac
+        return b64_hmac.decode('utf-8')
 
 
 class Route53DNSDriver(DNSDriver):

Modified: libcloud/trunk/libcloud/dns/drivers/zerigo.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/dns/drivers/zerigo.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/dns/drivers/zerigo.py (original)
+++ libcloud/trunk/libcloud/dns/drivers/zerigo.py Sun Jun  3 07:10:53 2012
@@ -103,7 +103,7 @@ class ZerigoDNSConnection(ConnectionUser
 
     def add_default_headers(self, headers):
         auth_b64 = base64.b64encode(b('%s:%s' % (self.user_id, self.key)))
-        headers['Authorization'] = 'Basic %s' % (auth_b64)
+        headers['Authorization'] = 'Basic %s' % (auth_b64.decode('utf-8'))
         return headers
 
     def request(self, action, params=None, data='', headers=None,

Modified: libcloud/trunk/libcloud/storage/drivers/atmos.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/storage/drivers/atmos.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/storage/drivers/atmos.py (original)
+++ libcloud/trunk/libcloud/storage/drivers/atmos.py Sun Jun  3 07:10:53 2012
@@ -108,7 +108,7 @@ class AtmosConnection(ConnectionUserAndK
         signature = '\n'.join(signature)
         key = base64.b64decode(self.key)
         signature = hmac.new(b(key), b(signature), hashlib.sha1).digest()
-        return base64.b64encode(b(signature))
+        return base64.b64encode(b(signature)).decode('utf-8')
 
 class AtmosDriver(StorageDriver):
     connectionCls = AtmosConnection

Modified: libcloud/trunk/libcloud/storage/drivers/google_storage.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/storage/drivers/google_storage.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/storage/drivers/google_storage.py (original)
+++ libcloud/trunk/libcloud/storage/drivers/google_storage.py Sun Jun  3 
07:10:53 2012
@@ -123,7 +123,7 @@ class GoogleStorageConnection(Connection
         b64_hmac = base64.b64encode(
             hmac.new(b(secret_key), b(string_to_sign), digestmod=sha1).digest()
         )
-        return b64_hmac
+        return b64_hmac.decode('utf-8')
 
 
 class GoogleStorageDriver(S3StorageDriver):

Modified: libcloud/trunk/libcloud/storage/drivers/s3.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/storage/drivers/s3.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/libcloud/storage/drivers/s3.py (original)
+++ libcloud/trunk/libcloud/storage/drivers/s3.py Sun Jun  3 07:10:53 2012
@@ -160,7 +160,7 @@ class S3Connection(ConnectionUserAndKey)
         b64_hmac = base64.b64encode(
             hmac.new(b(secret_key), b(string_to_sign), digestmod=sha1).digest()
         )
-        return b64_hmac
+        return b64_hmac.decode('utf-8')
 
 class S3StorageDriver(StorageDriver):
     name = 'Amazon S3 (standard)'

Modified: libcloud/trunk/test/storage/test_atmos.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/storage/test_atmos.py?rev=1345625&r1=1345624&r2=1345625&view=diff
==============================================================================
--- libcloud/trunk/test/storage/test_atmos.py (original)
+++ libcloud/trunk/test/storage/test_atmos.py Sun Jun  3 07:10:53 2012
@@ -372,7 +372,8 @@ class AtmosTests(unittest.TestCase):
             c.driver = d
             headers = c.add_default_headers(headers)
             headers['Date'] = headers['x-emc-date'] = test_date
-            self.assertEqual(c._calculate_signature({}, headers), b(expected))
+            self.assertEqual(c._calculate_signature({}, headers),
+                             b(expected).decode('utf-8'))
 
 class AtmosMockHttp(StorageMockHttp, unittest.TestCase):
     fixtures = StorageFileFixtures('atmos')


Reply via email to