summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-05-26 04:38:09 +0000
committerGerrit Code Review <review@openstack.org>2021-05-26 04:38:09 +0000
commit23373767c0adcfc7a9c35f5c48128aa6b7cff625 (patch)
treef4f75f24935d05b6093f44163b2ff419cc5c278c
parentc0bb5b2f3f9e0cf838ba1f6b3364ec7211eeee60 (diff)
parenta8c2b46da624a2e133e5d6289529ba8ac63b2557 (diff)
downloadswift-23373767c0adcfc7a9c35f5c48128aa6b7cff625.tar.gz
Merge "tempurl: Fix PUT upload to temp url on py3" into stable/victoria
-rw-r--r--swift/common/middleware/tempurl.py2
-rw-r--r--test/unit/common/middleware/test_tempurl.py36
2 files changed, 37 insertions, 1 deletions
diff --git a/swift/common/middleware/tempurl.py b/swift/common/middleware/tempurl.py
index 524a03b05..1fcd5bcdd 100644
--- a/swift/common/middleware/tempurl.py
+++ b/swift/common/middleware/tempurl.py
@@ -839,7 +839,7 @@ class TempURL(object):
if h.startswith(p):
del headers[h]
break
- return headers.items()
+ return list(headers.items())
def filter_factory(global_conf, **local_conf):
diff --git a/test/unit/common/middleware/test_tempurl.py b/test/unit/common/middleware/test_tempurl.py
index 6a08130c5..fe468cec7 100644
--- a/test/unit/common/middleware/test_tempurl.py
+++ b/test/unit/common/middleware/test_tempurl.py
@@ -476,6 +476,42 @@ class TestTempURL(unittest.TestCase):
self.assertEqual(req.environ['swift.authorize_override'], True)
self.assertEqual(req.environ['REMOTE_USER'], '.wsgi.tempurl')
+ def test_put_response_headers_in_list(self):
+ class Validator(object):
+ def __init__(self, app):
+ self.app = app
+ self.status = None
+ self.headers = None
+ self.exc_info = None
+
+ def start_response(self, status, headers, exc_info=None):
+ self.status = status
+ self.headers = headers
+ self.exc_info = exc_info
+
+ def __call__(self, env, start_response):
+ resp_iter = self.app(env, self.start_response)
+ start_response(self.status, self.headers, self.exc_info)
+ return resp_iter
+
+ method = 'PUT'
+ expires = int(time() + 86400)
+ path = '/v1/a/c/o'
+ key = b'abc'
+ hmac_body = ('%s\n%i\n%s' % (method, expires, path)).encode('utf-8')
+ sig = hmac.new(key, hmac_body, hashlib.sha1).hexdigest()
+ req = self._make_request(
+ path, keys=[key],
+ environ={'REQUEST_METHOD': 'PUT',
+ 'QUERY_STRING': 'temp_url_sig=%s&temp_url_expires=%s' % (
+ sig, expires)})
+ validator = Validator(self.tempurl)
+ resp = req.get_response(validator)
+ self.assertIsInstance(validator.headers, list)
+ self.assertEqual(resp.status_int, 404)
+ self.assertEqual(req.environ['swift.authorize_override'], True)
+ self.assertEqual(req.environ['REMOTE_USER'], '.wsgi.tempurl')
+
def test_get_not_allowed_by_put(self):
method = 'PUT'
expires = int(time() + 86400)