@@ -1018,6 +1018,59 @@ def test_s3v4_rest_signer_endpoint(requests_mock: Mocker) -> None:
10181018 }
10191019
10201020
1021+ def test_s3v4_rest_signer_strips_expect_header (requests_mock : Mocker ) -> None :
1022+ new_uri = "https://other-bucket/metadata/snap-8048355899640248710-1-a5c8ea2d-aa1f-48e8-89f4-1fa69db8c742.avro"
1023+ requests_mock .post (
1024+ f"{ TEST_URI } /v1/aws/s3/sign" ,
1025+ json = {
1026+ "uri" : new_uri ,
1027+ "headers" : {
1028+ "Authorization" : [
1029+ "AWS4-HMAC-SHA256 Credential=ASIAQPRZZYGHUT57DL3I/20221017/us-west-2/s3/aws4_request, "
1030+ "SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-security-token, "
1031+ "Signature=430582a17d61ab02c272896fa59195f277af4bdf2121c441685e589f044bbe02"
1032+ ],
1033+ "Host" : ["bucket.s3.us-west-2.amazonaws.com" ],
1034+ "User-Agent" : ["Botocore/1.27.59 Python/3.10.7 Darwin/21.5.0" ],
1035+ "x-amz-content-sha256" : ["UNSIGNED-PAYLOAD" ],
1036+ "X-Amz-Date" : ["20221017T102940Z" ],
1037+ "X-Amz-Security-Token" : [
1038+ "YQoJb3JpZ2luX2VjEDoaCXVzLXdlc3QtMiJGMEQCID/fFxZP5oaEgQmcwP6XhZa0xSq9lmLSx8ffaWbySfUPAiAesa7sjd/WV4uwRTO0S03y/MWVtgpH+/NyZQ4bZgLVriqrAggTEAEaDDAzMzQwNzIyMjE1OSIMOeFOWhZIurMmAqjsKogCxMCqxX8ZjK0gacAkcDqBCyA7qTSLhdfKQIH/w7WpLBU1km+cRUWWCudan6gZsAq867DBaKEP7qI05DAWr9MChAkgUgyI8/G3Z23ET0gAedf3GsJbakB0F1kklx8jPmj4BPCht9RcTiXiJ5DxTS/cRCcalIQXmPFbaJSqpBusVG2EkWnm1v7VQrNPE2Os2b2P293vpbhwkyCEQiGRVva4Sw9D1sKvqSsK10QCRG+os6dFEOu1kARaXi6pStvR4OVmj7OYeAYjzaFchn7nz2CSae0M4IluiYQ01eQAywbfRo9DpKSmDM/DnPZWJnD/woLhaaaCrCxSSEaFsvGOHFhLd3Rknw1v0jADMILUtJoGOp4BpqKqyMz0CY3kpKL0jfR3ykTf/ge9wWVE0Alr7wRIkGCIURkhslGHqSyFRGoTqIXaxU+oPbwlw/0w/nYO7qQ6bTANOWye/wgw4h/NmJ6vU7wnZTXwREf1r6MF72++bE/fMk19LfVb8jN/qrUqAUXTc8gBAUxL5pgy8+oT/JnI2BkVrrLS4ilxEXP9Ahm+6GDUYXV4fBpqpZwdkzQ/5Gw="
1039+ ],
1040+ },
1041+ "extensions" : {},
1042+ },
1043+ status_code = 200 ,
1044+ )
1045+
1046+ request = AWSRequest (
1047+ method = "PUT" ,
1048+ url = "https://bucket/metadata/snap-8048355899640248710-1-a5c8ea2d-aa1f-48e8-89f4-1fa69db8c742.avro" ,
1049+ headers = {
1050+ "User-Agent" : "Botocore/1.27.59 Python/3.10.7 Darwin/21.5.0" ,
1051+ "Expect" : "100-continue" ,
1052+ },
1053+ data = b"abc" ,
1054+ params = {},
1055+ auth_path = "/metadata/snap-8048355899640248710-1-a5c8ea2d-aa1f-48e8-89f4-1fa69db8c742.avro" ,
1056+ )
1057+ request .context = {
1058+ "client_region" : "us-west-2" ,
1059+ "has_streaming_input" : False ,
1060+ "auth_type" : None ,
1061+ "signing" : {"bucket" : "bucket" },
1062+ "retries" : {"attempt" : 1 , "invocation-id" : "75d143fb-0219-439b-872c-18213d1c8d54" },
1063+ }
1064+
1065+ signer = S3V4RestSigner (properties = {"token" : "abc" , "uri" : TEST_URI })
1066+ signer (request )
1067+
1068+ assert requests_mock .last_request is not None
1069+ signer_request_body = requests_mock .last_request .json ()
1070+ assert "expect" not in {header .lower () for header in signer_request_body ["headers" ]}
1071+ assert "expect" not in {header .lower () for header in request .headers }
1072+
1073+
10211074def test_s3v4_rest_signer_forbidden (requests_mock : Mocker ) -> None :
10221075 requests_mock .post (
10231076 f"{ TEST_URI } /v1/aws/s3/sign" ,
0 commit comments