Skip to content

Commit f239e22

Browse files
authored
Merge pull request ceph#60019 from sungjoon-koh/fix-get-part-number
rgw: decrypt multipart get part when encrypted Reviewed-by: Casey Bodley <[email protected]>
2 parents 968f278 + b8516bf commit f239e22

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/rgw/driver/rados/rgw_rados.cc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7046,6 +7046,13 @@ int RGWRados::Object::Read::prepare(optional_yield y, const DoutPrefixProvider *
70467046
RGWBucketInfo& bucket_info = source->get_bucket_info();
70477047

70487048
if (params.part_num) {
7049+
map<string, bufferlist> src_attrset;
7050+
for (auto& iter : astate->attrset) {
7051+
if (boost::algorithm::starts_with(iter.first, RGW_ATTR_CRYPT_PREFIX)) {
7052+
ldpp_dout(dpp, 4) << "get src crypt attr: " << iter.first << dendl;
7053+
src_attrset[iter.first] = iter.second;
7054+
}
7055+
}
70497056
int parts_count = 0;
70507057
// use the manifest to redirect to the requested part number
70517058
r = get_part_obj_state(dpp, y, store, bucket_info, &source->get_ctx(),
@@ -7068,6 +7075,13 @@ int RGWRados::Object::Read::prepare(optional_yield y, const DoutPrefixProvider *
70687075
} else {
70697076
params.parts_count = parts_count;
70707077
}
7078+
7079+
for (auto& iter : src_attrset) {
7080+
ldpp_dout(dpp, 4) << "copy crypt attr: " << iter.first << dendl;
7081+
if (astate->attrset.find(iter.first) == astate->attrset.end()) {
7082+
astate->attrset[iter.first] = std::move(iter.second);
7083+
}
7084+
}
70717085
}
70727086

70737087
state.obj = astate->obj;

0 commit comments

Comments
 (0)