Skip to content

Commit b8516bf

Browse files
committed
rgw: decrypt multipart get part when encrypted
Copy crypt related attrs for get object with partNumber Signed-off-by: sungjoon-koh <[email protected]>
1 parent ac5b3f9 commit b8516bf

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
@@ -6809,6 +6809,13 @@ int RGWRados::Object::Read::prepare(optional_yield y, const DoutPrefixProvider *
68096809
RGWBucketInfo& bucket_info = source->get_bucket_info();
68106810

68116811
if (params.part_num) {
6812+
map<string, bufferlist> src_attrset;
6813+
for (auto& iter : astate->attrset) {
6814+
if (boost::algorithm::starts_with(iter.first, RGW_ATTR_CRYPT_PREFIX)) {
6815+
ldpp_dout(dpp, 4) << "get src crypt attr: " << iter.first << dendl;
6816+
src_attrset[iter.first] = iter.second;
6817+
}
6818+
}
68126819
int parts_count = 0;
68136820
// use the manifest to redirect to the requested part number
68146821
r = get_part_obj_state(dpp, y, store, bucket_info, &source->get_ctx(),
@@ -6831,6 +6838,13 @@ int RGWRados::Object::Read::prepare(optional_yield y, const DoutPrefixProvider *
68316838
} else {
68326839
params.parts_count = parts_count;
68336840
}
6841+
6842+
for (auto& iter : src_attrset) {
6843+
ldpp_dout(dpp, 4) << "copy crypt attr: " << iter.first << dendl;
6844+
if (astate->attrset.find(iter.first) == astate->attrset.end()) {
6845+
astate->attrset[iter.first] = std::move(iter.second);
6846+
}
6847+
}
68346848
}
68356849

68366850
state.obj = astate->obj;

0 commit comments

Comments
 (0)