s3 clients *should* provide an x-amz-decoded-content-length field
when they use transport-encoding: chunked. Some clients do not.
With swift we already allow chunked uploads that do not specify the
content length in advance. This commit adds similar support
for s3. Known client affected by this: boto2.
Fixes: https://tracker.ceph.com/issues/45789
Resolves: rhbz#
2152801
Signed-off-by: Marcus Watts <mwatts@redhat.com>
(cherry picked from commit
22e9509655ca1d799df2eec535390d20f2f60256)
int RGWPutObj_ObjStore_S3::get_params(optional_yield y)
{
- if (!s->length)
- return -ERR_LENGTH_REQUIRED;
+ if (!s->length) {
+ const char *encoding = s->info.env->get("HTTP_TRANSFER_ENCODING");
+ if (!encoding || strcmp(encoding, "chunked") != 0) {
+ ldout(s->cct, 20) << "neither length nor chunked encoding" << dendl;
+ return -ERR_LENGTH_REQUIRED;
+ }
+
+ chunked_upload = true;
+ }
int ret;