Skip to content

Commit 8bea3af

Browse files
authored
Merge pull request ceph#60309 from linuxbox2/wip-cksum-68537
rgw_cksum: treat mpu checksums w/o part count as valid in CompleteMu… Reviewed-by: Casey Bodley <[email protected]>
2 parents 4d1491d + 03dfb86 commit 8bea3af

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/rgw/rgw_op.cc

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6811,6 +6811,8 @@ void RGWCompleteMultipart::execute(optional_yield y)
68116811
if (upload->cksum_type != rgw::cksum::Type::none) {
68126812
op_ret = try_sum_part_cksums(this, s->cct, upload.get(), parts, cksum, y);
68136813
if (op_ret < 0) {
6814+
ldpp_dout(this, 16) << "ERROR: try_sum_part_cksums failed, obj="
6815+
<< meta_obj << " ret=" << op_ret << dendl;
68146816
return;
68156817
}
68166818
}
@@ -6835,13 +6837,23 @@ void RGWCompleteMultipart::execute(optional_yield y)
68356837
rgw::putobj::find_hdr_cksum(*(s->info.env));
68366838

68376839
ldpp_dout_fmt(this, 10,
6838-
"INFO: client supplied checksum {}: {}",
6840+
"INFO: client supplied checksum {}: {} ",
68396841
hdr_cksum.header_name(), supplied_cksum);
68406842

68416843
if (! (supplied_cksum.empty()) &&
68426844
(supplied_cksum != armored_cksum)) {
6843-
op_ret = -ERR_INVALID_REQUEST;
6844-
return;
6845+
/* some minio SDK clients assert a checksum that is cryptographically
6846+
* valid but omits the part count */
6847+
auto parts_suffix = fmt::format("-{}", parts->parts.size());
6848+
auto suffix_len = armored_cksum->size() - parts_suffix.size();
6849+
if (armored_cksum->compare(0, suffix_len, supplied_cksum) != 0) {
6850+
ldpp_dout_fmt(this, 4,
6851+
"{} content checksum mismatch"
6852+
"\n\tcalculated={} != \n\texpected={}",
6853+
hdr_cksum.header_name(), armored_cksum, supplied_cksum);
6854+
op_ret = -ERR_INVALID_REQUEST;
6855+
return;
6856+
}
68456857
}
68466858

68476859
buffer::list cksum_bl;

0 commit comments

Comments
 (0)