From f90e44e54a46fd00d800560bde38b7c56b22900b Mon Sep 17 00:00:00 2001 From: Reece Date: Thu, 25 Mar 2021 19:11:03 -0400 Subject: [PATCH 1/2] Allow using ExpectedBucketOwner --- .changes/next-release/enhancement-s3-1285.json | 5 +++++ s3transfer/manager.py | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changes/next-release/enhancement-s3-1285.json diff --git a/.changes/next-release/enhancement-s3-1285.json b/.changes/next-release/enhancement-s3-1285.json new file mode 100644 index 00000000..63d55c46 --- /dev/null +++ b/.changes/next-release/enhancement-s3-1285.json @@ -0,0 +1,5 @@ +{ + "category": "s3", + "type": "enhancement", + "description": "Adds `ExpectedBucketOwner` to the allowed `ExtraArgs` for uploads to protect against bucket sniping when uploading files. Fixes `#181 `__." +} diff --git a/s3transfer/manager.py b/s3transfer/manager.py index 8c0b91bf..32511400 100644 --- a/s3transfer/manager.py +++ b/s3transfer/manager.py @@ -164,6 +164,7 @@ class TransferManager(object): 'ContentEncoding', 'ContentLanguage', 'ContentType', + 'ExpectedBucketOwner', 'Expires', 'GrantFullControl', 'GrantRead', From af131aefaf46dfbdc9fe2462a397cad7955b2e36 Mon Sep 17 00:00:00 2001 From: Kenneth Daily Date: Thu, 15 Apr 2021 15:12:08 -0700 Subject: [PATCH 2/2] add expected bucket owner to all operations --- .changes/next-release/enhancement-s3-1285.json | 2 +- s3transfer/constants.py | 1 + s3transfer/copies.py | 7 +++++-- s3transfer/manager.py | 1 + s3transfer/upload.py | 4 +++- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.changes/next-release/enhancement-s3-1285.json b/.changes/next-release/enhancement-s3-1285.json index 63d55c46..97406754 100644 --- a/.changes/next-release/enhancement-s3-1285.json +++ b/.changes/next-release/enhancement-s3-1285.json @@ -1,5 +1,5 @@ { "category": "s3", "type": "enhancement", - "description": "Adds `ExpectedBucketOwner` to the allowed `ExtraArgs` for uploads to protect against bucket sniping when uploading files. Fixes `#181 `__." + "description": "Add support for ``ExpectedBucketOwner``. Fixes `#181 `__." } diff --git a/s3transfer/constants.py b/s3transfer/constants.py index 79a9648c..b635889c 100644 --- a/s3transfer/constants.py +++ b/s3transfer/constants.py @@ -22,6 +22,7 @@ 'SSECustomerKey', 'SSECustomerKeyMD5', 'RequestPayer', + 'ExpectedBucketOwner', ] USER_AGENT = 's3transfer/%s' % s3transfer.__version__ diff --git a/s3transfer/copies.py b/s3transfer/copies.py index 625e1995..4b4086c2 100644 --- a/s3transfer/copies.py +++ b/s3transfer/copies.py @@ -34,7 +34,8 @@ class CopySubmissionTask(SubmissionTask): 'CopySourceSSECustomerKey': 'SSECustomerKey', 'CopySourceSSECustomerAlgorithm': 'SSECustomerAlgorithm', 'CopySourceSSECustomerKeyMD5': 'SSECustomerKeyMD5', - 'RequestPayer': 'RequestPayer' + 'RequestPayer': 'RequestPayer', + 'ExpectedBucketOwner': 'ExpectedBucketOwner' } UPLOAD_PART_COPY_ARGS = [ @@ -49,6 +50,7 @@ class CopySubmissionTask(SubmissionTask): 'SSECustomerAlgorithm', 'SSECustomerKeyMD5', 'RequestPayer', + 'ExpectedBucketOwner' ] CREATE_MULTIPART_ARGS_BLACKLIST = [ @@ -64,7 +66,8 @@ class CopySubmissionTask(SubmissionTask): ] COMPLETE_MULTIPART_ARGS = [ - 'RequestPayer' + 'RequestPayer', + 'ExpectedBucketOwner' ] def _submit(self, client, config, osutil, request_executor, diff --git a/s3transfer/manager.py b/s3transfer/manager.py index 32511400..ab90919c 100644 --- a/s3transfer/manager.py +++ b/s3transfer/manager.py @@ -199,6 +199,7 @@ class TransferManager(object): 'MFA', 'VersionId', 'RequestPayer', + 'ExpectedBucketOwner' ] def __init__(self, client, config=None, osutil=None, executor_cls=None): diff --git a/s3transfer/upload.py b/s3transfer/upload.py index a6b22a6c..1614ad78 100644 --- a/s3transfer/upload.py +++ b/s3transfer/upload.py @@ -490,10 +490,12 @@ class UploadSubmissionTask(SubmissionTask): 'SSECustomerAlgorithm', 'SSECustomerKeyMD5', 'RequestPayer', + 'ExpectedBucketOwner' ] COMPLETE_MULTIPART_ARGS = [ - 'RequestPayer' + 'RequestPayer', + 'ExpectedBucketOwner' ] def _get_upload_input_manager_cls(self, transfer_future):