}
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<string, bufferlist>::iterator iter;
bufferlist header;
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,
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<string, bufferlist>::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;