diff options
author | wangxiyuan <wangxiyuan@huawei.com> | 2018-07-26 11:31:08 +0800 |
---|---|---|
committer | wangxiyuan <wangxiyuan@huawei.com> | 2018-07-26 11:41:27 +0800 |
commit | eba4bb06d9aeaaf18a7e393ae8c03d47bd052f20 (patch) | |
tree | f5020ceeb35f3cd5e43c955cc7c4cc9ee1f36c3c | |
parent | 2c26f2748f433fbb510715532b45973768bf7483 (diff) | |
download | python-glanceclient-eba4bb06d9aeaaf18a7e393ae8c03d47bd052f20.tar.gz |
Skip quote '=' for token header
If the token is encoded by base64, it may contain '=' char
as well.
We should skip quoting it.
Change-Id: I1ca63d251fa366f0e8e58128d45b729a2489b65c
Partial-Bug: #1783290
-rw-r--r-- | glanceclient/common/http.py | 2 | ||||
-rw-r--r-- | glanceclient/tests/unit/test_http.py | 7 |
2 files changed, 5 insertions, 4 deletions
diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py index b5bea8a..a5fb153 100644 --- a/glanceclient/common/http.py +++ b/glanceclient/common/http.py @@ -66,7 +66,7 @@ def encode_headers(headers): for h, v in headers.items(): if v is not None: # if the item is token, do not quote '+' as well. - safe = '+/' if h in TOKEN_HEADERS else '/' + safe = '=+/' if h in TOKEN_HEADERS else '/' if six.PY2: # incoming items may be unicode, so get them into something # the py2 version of urllib can handle before percent encoding diff --git a/glanceclient/tests/unit/test_http.py b/glanceclient/tests/unit/test_http.py index cdc1895..6eee005 100644 --- a/glanceclient/tests/unit/test_http.py +++ b/glanceclient/tests/unit/test_http.py @@ -467,11 +467,12 @@ class TestClient(testtools.TestCase): headers = self.mock.last_request.headers self.assertEqual(refreshed_token, headers['X-Auth-Token']) # regression check for bug 1448080 - unicode_token = u'ni\xf1o+' + unicode_token = u'ni\xf1o+==' http_client.auth_token = unicode_token http_client.get(path) headers = self.mock.last_request.headers # Bug #1766235: According to RFC 8187, headers must be # encoded as 7-bit ASCII, so expect to see only displayable - # chars in percent-encoding. The '+' char will be not be changed. - self.assertEqual(b'ni%C3%B1o+', headers['X-Auth-Token']) + # chars in percent-encoding. The '+' and '= 'chars will not + # be changed. + self.assertEqual(b'ni%C3%B1o+==', headers['X-Auth-Token']) |