Skip to content

Commit 85b791a

Browse files
authored
init copy default signing config (#185)
* internalize signed body value
1 parent 2548d3a commit 85b791a

9 files changed

+78
-95
lines changed

source/s3_meta_request.c

+17
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,15 @@ static void s_s3_meta_request_sign_request(
610610
meta_request->vtable->sign_request(meta_request, request, on_signing_complete, user_data);
611611
}
612612

613+
static bool s_is_put_request(const struct aws_s3_meta_request *meta_request) {
614+
struct aws_byte_cursor method;
615+
if (meta_request->type == AWS_S3_META_REQUEST_TYPE_DEFAULT &&
616+
!aws_http_message_get_request_method(meta_request->initial_request_message, &method)) {
617+
return aws_byte_cursor_eq(&method, &aws_http_method_put);
618+
}
619+
return meta_request->type == AWS_S3_META_REQUEST_TYPE_PUT_OBJECT;
620+
}
621+
613622
/* Handles signing a message for the caller. */
614623
void aws_s3_meta_request_sign_request_default(
615624
struct aws_s3_meta_request *meta_request,
@@ -663,6 +672,14 @@ void aws_s3_meta_request_sign_request_default(
663672
return;
664673
}
665674

675+
/* if a checksum algorithm is set for a put request the request will be chunked and we need to change the signed
676+
* body value to match this type of request*/
677+
if (meta_request->checksum_algorithm != AWS_SCA_NONE && s_is_put_request(meta_request) &&
678+
aws_byte_cursor_eq(&signing_config.signed_body_value, &g_aws_signed_body_value_unsigned_payload)) {
679+
signing_config.signed_body_value = g_aws_signed_body_value_streaming_unsigned_payload_trailer;
680+
}
681+
/* However the initial request for a multipart upload does not have a trailing checksum and is not chunked so it
682+
* must have an unsigned_payload signed_body value*/
666683
if (request->part_number == 0 &&
667684
aws_byte_cursor_eq(
668685
&signing_config.signed_body_value, &g_aws_signed_body_value_streaming_unsigned_payload_trailer)) {

tests/s3_cancel_tests.c

+3-8
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ static int s3_cancel_test_helper(struct aws_allocator *allocator, enum s3_update
175175
AWS_ASSERT(allocator);
176176

177177
struct aws_s3_tester tester;
178-
ASSERT_SUCCESS(aws_s3_tester_init(allocator, &tester, false));
178+
ASSERT_SUCCESS(aws_s3_tester_init(allocator, &tester));
179179

180180
struct s3_cancel_test_user_data test_user_data = {
181181
.type = cancel_type,
@@ -285,7 +285,7 @@ static int s3_cancel_test_helper_fc(
285285
AWS_ASSERT(allocator);
286286

287287
struct aws_s3_tester tester;
288-
ASSERT_SUCCESS(aws_s3_tester_init(allocator, &tester, true));
288+
ASSERT_SUCCESS(aws_s3_tester_init(allocator, &tester));
289289

290290
struct s3_cancel_test_user_data test_user_data = {
291291
.type = cancel_type,
@@ -346,14 +346,9 @@ static int s3_cancel_test_helper_fc(
346346
// Range for the second 16k
347347
const struct aws_byte_cursor range = AWS_BYTE_CUR_INIT_FROM_STRING_LITERAL("bytes=16384-32767");
348348

349-
struct aws_signing_config_aws get_signing_config;
350-
351-
aws_s3_init_default_signing_config(&get_signing_config, g_test_s3_region, tester.credentials_provider);
352-
353349
struct aws_s3_tester_meta_request_options options = {
354350
.allocator = allocator,
355351
.client = client,
356-
.signing_config = &get_signing_config,
357352
.validate_get_response_checksum = true,
358353
.meta_request_type = AWS_S3_META_REQUEST_TYPE_GET_OBJECT,
359354
.validate_type = AWS_S3_TESTER_VALIDATE_TYPE_EXPECT_FAILURE,
@@ -590,7 +585,7 @@ static int s_test_s3_cancel_prepare(struct aws_allocator *allocator, void *ctx)
590585
(void)ctx;
591586

592587
struct aws_s3_tester tester;
593-
ASSERT_SUCCESS(aws_s3_tester_init(allocator, &tester, false));
588+
ASSERT_SUCCESS(aws_s3_tester_init(allocator, &tester));
594589

595590
struct test_s3_cancel_prepare_user_data test_user_data;
596591
AWS_ZERO_STRUCT(test_user_data);

0 commit comments

Comments
 (0)