diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py index e8f1d4d..10c680c 100644 --- a/glanceclient/common/http.py +++ b/glanceclient/common/http.py @@ -135,7 +135,8 @@ class HTTPClient(_BaseHTTPClient): self.session.headers["User-Agent"] = USER_AGENT if self.auth_token: - self.session.headers["X-Auth-Token"] = self.auth_token + self.session.headers["X-Auth-Token"] = encodeutils.safe_encode( + self.auth_token) if self.language_header: self.session.headers["Accept-Language"] = self.language_header diff --git a/glanceclient/common/utils.py b/glanceclient/common/utils.py index 9d584fd..88144ef 100644 --- a/glanceclient/common/utils.py +++ b/glanceclient/common/utils.py @@ -449,8 +449,7 @@ def memoized_property(fn): def safe_header(name, value): if value is not None and name in SENSITIVE_HEADERS: - v = value.encode('utf-8') - h = hashlib.sha1(v) + h = hashlib.sha1(value) d = h.hexdigest() return name, "{SHA1}%s" % d else: diff --git a/glanceclient/tests/unit/test_http.py b/glanceclient/tests/unit/test_http.py index f7830b7..5a0eec7 100644 --- a/glanceclient/tests/unit/test_http.py +++ b/glanceclient/tests/unit/test_http.py @@ -210,6 +210,14 @@ class TestClient(testtools.TestCase): self.assertEqual(b"ni\xc3\xb1o", encoded[b"test"]) self.assertNotIn("none-val", encoded) + def test_auth_token_header_encoding(self): + # Tests that X-Auth-Token header is converted to ascii string, as + # httplib in python 2.6 won't do the conversion + value = u'ni\xf1o' + http_client_object = http.HTTPClient(self.endpoint, token=value) + self.assertEqual(b'ni\xc3\xb1o', + http_client_object.session.headers['X-Auth-Token']) + def test_raw_request(self): """Verify the path being used for HTTP requests reflects accurately.""" headers = {"Content-Type": "text/plain"} diff --git a/glanceclient/tests/unit/test_utils.py b/glanceclient/tests/unit/test_utils.py index 0b2d6d9..d2b73dc 100644 --- a/glanceclient/tests/unit/test_utils.py +++ b/glanceclient/tests/unit/test_utils.py @@ -168,7 +168,9 @@ class TestUtils(testtools.TestCase): utils.safe_header('somekey', None)) for sensitive_header in utils.SENSITIVE_HEADERS: - (name, value) = utils.safe_header(sensitive_header, 'somestring') + (name, value) = utils.safe_header( + sensitive_header, + encodeutils.safe_encode('somestring')) self.assertEqual(sensitive_header, name) self.assertTrue(value.startswith("{SHA1}"))