From 31e8a35b18436267b0582cfb9e3f16f8ed65017a Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Tue, 22 Nov 2016 01:55:19 -0800 Subject: [PATCH] Fix a bug in presigned URL, resulted in invalid payload. (#423) This was experienced and reported by @elcolie. --- minio/api.py | 3 ++- minio/signer.py | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/minio/api.py b/minio/api.py index 9da819a25..e518d5332 100644 --- a/minio/api.py +++ b/minio/api.py @@ -787,7 +787,8 @@ def copy_object(self, bucket_name, object_name, object_source, headers = {} if conditions: - headers = conditions + for k in conditions.keys(): + headers[k] = conditions[k] headers['X-Amz-Copy-Source'] = urlencode(object_source) method = 'PUT' diff --git a/minio/signer.py b/minio/signer.py index 03fd6ff70..40c040117 100644 --- a/minio/signer.py +++ b/minio/signer.py @@ -40,7 +40,7 @@ _SIGN_V4_ALGORITHM = 'AWS4-HMAC-SHA256' # Hardcoded S3 header value for X-Amz-Content-Sha256 -_UNSIGNED_PAYLOAD = b'UNSIGNED-PAYLOAD' +_UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD' def post_presign_signature(date, region, secret_key, policy_str): """ @@ -198,7 +198,7 @@ def sign_v4(method, url, region, headers=None, access_key=None, date = datetime.utcnow() headers['X-Amz-Date'] = date.strftime("%Y%m%dT%H%M%SZ") - headers['X-Amz-Content-Sha256'] = content_sha256.decode('ascii') + headers['X-Amz-Content-Sha256'] = content_sha256 headers_to_sign = dict(headers) @@ -209,7 +209,7 @@ def sign_v4(method, url, region, headers=None, access_key=None, canonical_req = generate_canonical_request(method, parsed_url, headers_to_sign, - content_sha256.decode('ascii')) + content_sha256) string_to_sign = generate_string_to_sign(date, region, canonical_req) signing_key = generate_signing_key(date, region, secret_key)