From: Matt Benjamin Date: Sun, 18 May 2025 01:02:34 +0000 (-0400) Subject: rgw: aws-chunked need not supply any content-length X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0624dbbc3bd10f816262d5e096fa7b147231b2fb;p=ceph.git rgw: aws-chunked need not supply any content-length The updated logic for aws chunked handling (2024) appears sufficient to handle the cases produced by aws-sdk-go-v2. Note that https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html states that "For all requests, you must include the x-amz-decoded-content-length header, specifying the size of the object in bytes." (accessed 5/17/2025) (but now we do not enforce it). Reported (with reproducer!) by: Fred Heinecke. Fixes: https://tracker.ceph.com/issues/71183 Signed-off-by: Matt Benjamin --- diff --git a/src/rgw/rgw_auth_s3.cc b/src/rgw/rgw_auth_s3.cc index a60aebd48072..da25b580d4ae 100644 --- a/src/rgw/rgw_auth_s3.cc +++ b/src/rgw/rgw_auth_s3.cc @@ -1480,9 +1480,7 @@ void AWSv4ComplMulti::modify_request_state(const DoutPrefixProvider* dpp, req_st const char* const decoded_length = \ s_rw->info.env->get("HTTP_X_AMZ_DECODED_CONTENT_LENGTH"); - if (!decoded_length) { - throw -EINVAL; - } else { + if (decoded_length) { /* XXXX oh my, we forget the original content length */ s_rw->length = decoded_length; s_rw->content_length = parse_content_length(decoded_length); diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 349f23615f35..7ecabbc103ac 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -7028,7 +7028,7 @@ void RGWCompleteMultipart::execute(optional_yield y) fmt::format("INFO: {}->get_multipart_upload for obj {}, {} cksum_type {}", s->bucket->get_name(), s->object->get_name(), upload_id, - (!!upload) ? to_string(upload->cksum_type) : 0) + (!!upload) ? to_string(upload->cksum_type) : "nil") << dendl; rgw_placement_rule* dest_placement;