From: yuliyang_yewu Date: Thu, 20 May 2021 23:30:50 +0000 (+0800) Subject: rgw: RGWListMultipart show Owner ID and DisplayName X-Git-Tag: v17.1.0~1703^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6fd052818252df2bd0ec2f1e3d82d383f4702934;p=ceph.git rgw: RGWListMultipart show Owner ID and DisplayName fix https://tracker.ceph.com/issues/48262 Signed-off-by: yuliyang_yewu --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index f39645fdde61..c014ccda8a36 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -400,8 +400,9 @@ static int get_multipart_info(const DoutPrefixProvider *dpp, struct req_state *s } static int get_multipart_info(const DoutPrefixProvider *dpp, struct req_state *s, - const string& meta_oid, - multipart_upload_info *upload_info) + const string& meta_oid, + multipart_upload_info *upload_info, + rgw::sal::Attrs* attrs = nullptr) { map::iterator iter; bufferlist header; @@ -410,7 +411,11 @@ static int get_multipart_info(const DoutPrefixProvider *dpp, struct req_state *s meta_obj = s->bucket->get_object(rgw_obj_key(meta_oid, string(), mp_ns)); meta_obj->set_in_extra_data(true); - return get_multipart_info(dpp, s, meta_obj.get(), upload_info); + int ret = get_multipart_info(dpp, s, meta_obj.get(), upload_info); + if (ret >= 0 && attrs) { + *attrs = meta_obj->get_attrs(); + } + return ret; } static int read_bucket_policy(const DoutPrefixProvider *dpp, @@ -6261,7 +6266,19 @@ void RGWListMultipart::execute(optional_yield y) mp.init(s->object->get_name(), upload_id); meta_oid = mp.get_meta(); - op_ret = get_multipart_info(this, s, meta_oid, nullptr); + rgw::sal::Attrs attrs; + op_ret = get_multipart_info(this, s, meta_oid, nullptr, &attrs); + /* decode policy */ + map::iterator iter = attrs.find(RGW_ATTR_ACL); + if (iter != attrs.end()) { + auto bliter = iter->second.cbegin(); + try { + policy.decode(bliter); + } catch (buffer::error& err) { + ldpp_dout(this, 0) << "ERROR: could not decode policy, caught buffer::error" << dendl; + op_ret = -EIO; + } + } if (op_ret < 0) return;