summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-08-16 01:17:20 +0000
committerGerrit Code Review <review@openstack.org>2015-08-16 01:17:20 +0000
commite7e59711393e92798fdd1ca8bcd26c610631bdc2 (patch)
treedc63f96bcf2e5460f091e94aec120893bd64e063
parent9b5f75ec9853601b4228e81a92c824af902b6823 (diff)
parent256f4c96cb618c8f9083c0b3ba0f5f0dfca662cd (diff)
downloadkeystonemiddleware-e7e59711393e92798fdd1ca8bcd26c610631bdc2.tar.gz
Merge "Prevent a UnicodeDecodeError in the s3token middleware"
-rw-r--r--keystonemiddleware/s3_token.py2
-rw-r--r--keystonemiddleware/tests/unit/test_s3_token_middleware.py8
2 files changed, 10 insertions, 0 deletions
diff --git a/keystonemiddleware/s3_token.py b/keystonemiddleware/s3_token.py
index 3fe13f9..d71ab27 100644
--- a/keystonemiddleware/s3_token.py
+++ b/keystonemiddleware/s3_token.py
@@ -251,6 +251,8 @@ class S3Token(object):
req.headers['X-Auth-Token'] = token_id
tenant_to_connect = force_tenant or tenant['id']
+ if six.PY2 and isinstance(tenant_to_connect, six.text_type):
+ tenant_to_connect = tenant_to_connect.encode('utf-8')
self._logger.debug('Connecting with tenant: %s', tenant_to_connect)
new_tenant_name = '%s%s' % (self._reseller_prefix, tenant_to_connect)
environ['PATH_INFO'] = environ['PATH_INFO'].replace(account,
diff --git a/keystonemiddleware/tests/unit/test_s3_token_middleware.py b/keystonemiddleware/tests/unit/test_s3_token_middleware.py
index a898ea1..b099388 100644
--- a/keystonemiddleware/tests/unit/test_s3_token_middleware.py
+++ b/keystonemiddleware/tests/unit/test_s3_token_middleware.py
@@ -17,6 +17,7 @@ from oslo_serialization import jsonutils
import requests
from requests_mock.contrib import fixture as rm_fixture
import six
+from six.moves import urllib
import webob
from keystonemiddleware import s3_token
@@ -165,6 +166,13 @@ class S3TokenMiddlewareTestGood(S3TokenMiddlewareTestBase):
middleware = s3_token.filter_factory(config)(FakeApp())
self.assertIs('false_ind', middleware._verify)
+ def test_unicode_path(self):
+ url = u'/v1/AUTH_cfa/c/euro\u20ac'.encode('utf8')
+ req = webob.Request.blank(urllib.parse.quote(url))
+ req.headers['Authorization'] = 'access:signature'
+ req.headers['X-Storage-Token'] = 'token'
+ req.get_response(self.middleware)
+
class S3TokenMiddlewareTestBad(S3TokenMiddlewareTestBase):
def setUp(self):