diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-08-16 01:17:20 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-08-16 01:17:20 +0000 |
commit | e7e59711393e92798fdd1ca8bcd26c610631bdc2 (patch) | |
tree | dc63f96bcf2e5460f091e94aec120893bd64e063 | |
parent | 9b5f75ec9853601b4228e81a92c824af902b6823 (diff) | |
parent | 256f4c96cb618c8f9083c0b3ba0f5f0dfca662cd (diff) | |
download | keystonemiddleware-e7e59711393e92798fdd1ca8bcd26c610631bdc2.tar.gz |
Merge "Prevent a UnicodeDecodeError in the s3token middleware"
-rw-r--r-- | keystonemiddleware/s3_token.py | 2 | ||||
-rw-r--r-- | keystonemiddleware/tests/unit/test_s3_token_middleware.py | 8 |
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): |