int RGWBucketAdminOp::get_policy(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state,
RGWFormatterFlusher& flusher, const DoutPrefixProvider *dpp, optional_yield y)
{
- RGWAccessControlPolicy policy(driver->ctx());
+ RGWAccessControlPolicy policy;
int ret = get_policy(driver, op_state, policy, dpp, y);
if (ret < 0)
int RGWBucketAdminOp::dump_s3_policy(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state,
ostream& os, const DoutPrefixProvider *dpp, optional_yield y)
{
- RGWAccessControlPolicy_S3 policy(driver->ctx());
+ RGWAccessControlPolicy_S3 policy;
int ret = get_policy(driver, op_state, policy, dpp, y);
if (ret < 0)
return ret;
- policy.to_xml(os);
+ policy.to_xml(dpp, os);
return 0;
}
static int policy_from_attrs(CephContext *cct,
const map<string, bufferlist>& attrs,
RGWAccessControlPolicy *acl) {
- acl->set_ctx(cct);
-
auto aiter = attrs.find(RGW_ATTR_ACL);
if (aiter == attrs.end()) {
return -ENOENT;
*/
init_headers(attrs, rest_obj.attrs);
- rest_obj.acls.set_ctx(cct);
const auto aiter = attrs.find(RGW_ATTR_ACL);
if (aiter != attrs.end()) {
bufferlist& bl = aiter->second;
ACLOwner *owner)
{
auto i = bl.cbegin();
- RGWAccessControlPolicy policy(cct);
+ RGWAccessControlPolicy policy;
try {
policy.decode_owner(i);
} catch (buffer::error& err) {
}
bufferlist& bl = aiter->second;
- RGWAccessControlPolicy policy(store->ctx());
+ RGWAccessControlPolicy policy;
ACLOwner owner;
auto bliter = bl.cbegin();
try {
}
}
- info->acls.set_ctx(cct);
auto aiter = attrs.find(RGW_ATTR_ACL);
if (aiter != attrs.end()) {
bufferlist& bl = aiter->second;
}
if (!aclbl) {
- RGWAccessControlPolicy_S3 policy(cct);
+ RGWAccessControlPolicy_S3 policy;
policy.create_canned(bucket->policy.get_owner(), bucket->policy.get_owner(), string()); /* default private policy */
default:
{
rgw_user id;
- if (!grant->get_id(id)) {
- ldout(cct, 0) << "ERROR: grant->get_id() failed" << dendl;
- }
+ grant->get_id(id);
acl_user_map[id.to_str()] |= perm.get_permissions();
}
}
void RGWAccessControlList::generate_test_instances(list<RGWAccessControlList*>& o)
{
- RGWAccessControlList *acl = new RGWAccessControlList(NULL);
+ RGWAccessControlList *acl = new RGWAccessControlList;
list<ACLGrant *> glist;
list<ACLGrant *>::iterator iter;
delete grant;
}
o.push_back(acl);
- o.push_back(new RGWAccessControlList(NULL));
+ o.push_back(new RGWAccessControlList);
}
void ACLOwner::generate_test_instances(list<ACLOwner*>& o)
RGWAccessControlList::generate_test_instances(acl_list);
iter = acl_list.begin();
- RGWAccessControlPolicy *p = new RGWAccessControlPolicy(NULL);
+ RGWAccessControlPolicy *p = new RGWAccessControlPolicy;
RGWAccessControlList *l = *iter;
p->acl = *l;
delete l;
}
- o.push_back(new RGWAccessControlPolicy(NULL));
+ o.push_back(new RGWAccessControlPolicy);
}
void RGWAccessControlList::dump(Formatter *f) const
class RGWAccessControlList
{
protected:
- CephContext *cct;
/* FIXME: in the feature we should consider switching to uint32_t also
* in data structures. */
std::map<std::string, int> acl_user_map;
ACLGrantMap grant_map;
void _add_grant(ACLGrant *grant);
public:
- explicit RGWAccessControlList(CephContext *_cct) : cct(_cct) {}
- RGWAccessControlList() : cct(NULL) {}
-
- void set_ctx(CephContext *ctx) {
- cct = ctx;
- }
-
- virtual ~RGWAccessControlList() {}
-
uint32_t get_perm(const DoutPrefixProvider* dpp,
const rgw::auth::Identity& auth_identity,
uint32_t perm_mask);
class RGWAccessControlPolicy
{
protected:
- CephContext *cct;
RGWAccessControlList acl;
ACLOwner owner;
public:
- explicit RGWAccessControlPolicy(CephContext *_cct) : cct(_cct), acl(_cct) {}
- RGWAccessControlPolicy() : cct(NULL), acl(NULL) {}
-
- void set_ctx(CephContext *ctx) {
- cct = ctx;
- acl.set_ctx(ctx);
- }
-
uint32_t get_perm(const DoutPrefixProvider* dpp,
const rgw::auth::Identity& auth_identity,
uint32_t perm_mask,
return true;
}
-void ACLGrant_S3::to_xml(CephContext *cct, ostream& out) {
+void ACLGrant_S3::to_xml(const DoutPrefixProvider* dpp, ostream& out) {
ACLPermission_S3& perm = static_cast<ACLPermission_S3 &>(permission);
/* only show s3 compatible permissions */
break;
case ACL_TYPE_GROUP:
if (!group_to_uri(group, uri)) {
- ldout(cct, 0) << "ERROR: group_to_uri failed with group=" << (int)group << dendl;
+ ldpp_dout(dpp, 0) << "ERROR: group_to_uri failed with group=" << (int)group << dendl;
break;
}
out << "<URI>" << uri << "</URI>";
return true;
}
-void RGWAccessControlList_S3::to_xml(ostream& out) {
+void RGWAccessControlList_S3::to_xml(const DoutPrefixProvider* dpp, ostream& out) {
multimap<string, ACLGrant>::iterator iter;
out << "<AccessControlList>";
for (iter = grant_map.begin(); iter != grant_map.end(); ++iter) {
ACLGrant_S3& grant = static_cast<ACLGrant_S3 &>(iter->second);
- grant.to_xml(cct, out);
+ grant.to_xml(dpp, out);
}
out << "</AccessControlList>";
}
return true;
}
-void RGWAccessControlPolicy_S3::to_xml(ostream& out) {
+void RGWAccessControlPolicy_S3::to_xml(const DoutPrefixProvider* dpp, ostream& out) {
out << "<AccessControlPolicy xmlns=\"" << XMLNS_AWS_S3 << "\">";
ACLOwner_S3& _owner = static_cast<ACLOwner_S3 &>(owner);
RGWAccessControlList_S3& _acl = static_cast<RGWAccessControlList_S3 &>(acl);
_owner.to_xml(out);
- _acl.to_xml(out);
+ _acl.to_xml(dpp, out);
out << "</AccessControlPolicy>";
}
{
XMLObj * obj = NULL;
if (strcmp(el, "AccessControlPolicy") == 0) {
- obj = new RGWAccessControlPolicy_S3(cct);
+ obj = new RGWAccessControlPolicy_S3();
} else if (strcmp(el, "Owner") == 0) {
obj = new ACLOwner_S3();
} else if (strcmp(el, "AccessControlList") == 0) {
- obj = new RGWAccessControlList_S3(cct);
+ obj = new RGWAccessControlList_S3();
} else if (strcmp(el, "ID") == 0) {
obj = new ACLID_S3();
} else if (strcmp(el, "DisplayName") == 0) {
ACLGrant_S3() {}
virtual ~ACLGrant_S3() override {}
- void to_xml(CephContext *cct, std::ostream& out);
+ void to_xml(const DoutPrefixProvider* dpp, std::ostream& out);
bool xml_end(const char *el) override;
bool xml_start(const char *el, const char **attr);
class RGWAccessControlList_S3 : public RGWAccessControlList, public XMLObj
{
public:
- explicit RGWAccessControlList_S3(CephContext *_cct) : RGWAccessControlList(_cct) {}
- virtual ~RGWAccessControlList_S3() override {}
-
bool xml_end(const char *el) override;
- void to_xml(std::ostream& out);
+ void to_xml(const DoutPrefixProvider* dpp, std::ostream& out);
int create_canned(ACLOwner& owner, ACLOwner& bucket_owner, const std::string& canned_acl);
int create_from_grants(std::list<ACLGrant>& grants);
class RGWAccessControlPolicy_S3 : public RGWAccessControlPolicy, public XMLObj
{
public:
- explicit RGWAccessControlPolicy_S3(CephContext *_cct) : RGWAccessControlPolicy(_cct) {}
- virtual ~RGWAccessControlPolicy_S3() override {}
-
bool xml_end(const char *el) override;
- void to_xml(std::ostream& out);
+ void to_xml(const DoutPrefixProvider* dpp, std::ostream& out);
int rebuild(const DoutPrefixProvider *dpp, rgw::sal::Driver* driver, ACLOwner *owner,
RGWAccessControlPolicy& dest, std::string &err_msg);
}
static ACLGrant user_to_grant(const DoutPrefixProvider *dpp,
- CephContext* const cct,
rgw::sal::Driver* driver,
const std::string& uid,
const uint32_t perm)
const size_t pos = uid.find(':');
if (std::string::npos == pos) {
/* No, it don't have -- we've got just a regular user identifier. */
- grant = user_to_grant(dpp, cct, driver, uid, perm);
+ grant = user_to_grant(dpp, driver, uid, perm);
} else {
/* Yes, *potentially* an HTTP referral. */
auto designator = uid.substr(0, pos);
boost::algorithm::trim(designatee);
if (! boost::algorithm::starts_with(designator, ".")) {
- grant = user_to_grant(dpp, cct, driver, uid, perm);
+ grant = user_to_grant(dpp, driver, uid, perm);
} else if ((perm & SWIFT_PERM_WRITE) == 0 && is_referrer(designator)) {
/* HTTP referrer-based ACLs aren't acceptable for writes. */
grant = referrer_to_grant(designatee, perm);
uint32_t perm);
public:
- explicit RGWAccessControlPolicy_SWIFT(CephContext* const cct)
- : RGWAccessControlPolicy(cct) {
- }
-
int create(const DoutPrefixProvider *dpp,
rgw::sal::Driver* driver,
const rgw_user& id,
class RGWAccessControlPolicy_SWIFTAcct : public RGWAccessControlPolicy
{
public:
- explicit RGWAccessControlPolicy_SWIFTAcct(CephContext * const cct)
- : RGWAccessControlPolicy(cct) {
- }
-
void add_grants(const DoutPrefixProvider *dpp,
rgw::sal::Driver* driver,
const std::vector<std::string>& uids,
int get_params(optional_yield) override {
req_state* state = get_state();
- RGWAccessControlPolicy_S3 s3policy(state->cct);
+ RGWAccessControlPolicy_S3 s3policy;
/* we don't have (any) headers, so just create canned ACLs */
int ret = s3policy.create_canned(state->owner, state->bucket_owner, state->canned_acl);
policy = s3policy;
int get_params(optional_yield) override {
req_state* state = get_state();
- RGWAccessControlPolicy_S3 s3policy(state->cct);
+ RGWAccessControlPolicy_S3 s3policy;
/* we don't have (any) headers, so just create canned ACLs */
int ret = s3policy.create_canned(state->owner, state->bucket_owner, state->canned_acl);
policy = s3policy;
int get_params(optional_yield) override {
req_state* state = get_state();
- RGWAccessControlPolicy_S3 s3policy(state->cct);
+ RGWAccessControlPolicy_S3 s3policy;
/* we don't have (any) headers, so just create canned ACLs */
int ret = s3policy.create_canned(state->owner, state->bucket_owner, state->canned_acl);
policy = s3policy;
int get_params(optional_yield) override {
req_state* s = get_state();
- RGWAccessControlPolicy_S3 s3policy(s->cct);
+ RGWAccessControlPolicy_S3 s3policy;
/* we don't have (any) headers, so just create canned ACLs */
int ret = s3policy.create_canned(s->owner, s->bucket_owner, s->canned_acl);
dest_policy = s3policy;
if (cct->_conf->subsys.should_gather<ceph_subsys_rgw, 15>()) {
ldpp_dout(dpp, 15) << __func__ << " Read AccessControlPolicy";
RGWAccessControlPolicy_S3 *s3policy = static_cast<RGWAccessControlPolicy_S3 *>(policy);
- s3policy->to_xml(*_dout);
+ s3policy->to_xml(dpp, *_dout);
*_dout << dendl;
}
return 0;
if (ret == -ENOENT) {
/* object does not exist checking the bucket's ACL to make sure
that we send a proper error code */
- RGWAccessControlPolicy bucket_policy(s->cct);
+ RGWAccessControlPolicy bucket_policy;
ret = rgw_op_get_bucket_policy_from_attr(dpp, s->cct, driver, bucket_info.owner,
bucket_attrs, &bucket_policy, y);
if (ret < 0) {
}
if(s->dialect.compare("s3") == 0) {
- s->bucket_acl = std::make_unique<RGWAccessControlPolicy_S3>(s->cct);
+ s->bucket_acl = std::make_unique<RGWAccessControlPolicy_S3>();
} else if(s->dialect.compare("swift") == 0) {
/* We aren't allocating the account policy for those operations using
* the Swift's infrastructure that don't really need req_state::user.
* Typical example here is the implementation of /info. */
if (!s->user->get_id().empty()) {
- s->user_acl = std::make_unique<RGWAccessControlPolicy_SWIFTAcct>(s->cct);
+ s->user_acl = std::make_unique<RGWAccessControlPolicy_SWIFTAcct>();
}
- s->bucket_acl = std::make_unique<RGWAccessControlPolicy_SWIFT>(s->cct);
+ s->bucket_acl = std::make_unique<RGWAccessControlPolicy_SWIFT>();
} else {
- s->bucket_acl = std::make_unique<RGWAccessControlPolicy>(s->cct);
+ s->bucket_acl = std::make_unique<RGWAccessControlPolicy>();
}
const RGWZoneGroup& zonegroup = s->penv.site->get_zonegroup();
if (!s->bucket_exists) {
return -ERR_NO_SUCH_BUCKET;
}
- s->object_acl = std::make_unique<RGWAccessControlPolicy>(s->cct);
+ s->object_acl = std::make_unique<RGWAccessControlPolicy>();
s->object->set_atomic();
if (prefetch_data) {
if (cct->_conf->subsys.should_gather<ceph_subsys_rgw, 15>()) {
RGWAccessControlPolicy_S3 *s3policy = static_cast<RGWAccessControlPolicy_S3 *>(policy);
ldpp_dout(dpp, 15) << __func__ << " Read AccessControlPolicy";
- s3policy->to_xml(*_dout);
+ s3policy->to_xml(dpp, *_dout);
*_dout << dendl;
}
return 0;
std::unique_ptr<rgw::sal::Object> part = bucket->get_object(ent.key);
- RGWAccessControlPolicy obj_policy(s->cct);
+ RGWAccessControlPolicy obj_policy;
ldpp_dout(this, 20) << "reading obj=" << part << " ofs=" << cur_ofs
<< " end=" << cur_end << dendl;
const std::string bucket_name = url_decode(prefix_view.substr(0, pos));
const std::string obj_prefix = url_decode(prefix_view.substr(pos + 1));
- RGWAccessControlPolicy _bucket_acl(s->cct);
+ RGWAccessControlPolicy _bucket_acl;
RGWAccessControlPolicy *bucket_acl;
boost::optional<Policy> _bucket_policy;
boost::optional<Policy>* bucket_policy;
bucket_policy = piter->second.second.get_ptr();
bucket = buckets[bucket_name].get();
} else {
- allocated_acls.push_back(RGWAccessControlPolicy(s->cct));
- RGWAccessControlPolicy& _bucket_acl = allocated_acls.back();
+ RGWAccessControlPolicy& _bucket_acl = allocated_acls.emplace_back();
std::unique_ptr<rgw::sal::Bucket> tmp_bucket;
int r = driver->load_bucket(this, rgw_bucket(s->user->get_tenant(),
}
// don't allow changes to the acl policy
- RGWAccessControlPolicy old_policy(get_cct());
+ RGWAccessControlPolicy old_policy;
int r = rgw_op_get_bucket_policy_from_attr(this, s->cct, driver, info.owner,
s->bucket->get_attrs(),
&old_policy, y);
{
if (! copy_source.empty()) {
- RGWAccessControlPolicy cs_acl(s->cct);
+ RGWAccessControlPolicy cs_acl;
boost::optional<Policy> policy;
map<string, bufferlist> cs_attrs;
auto cs_bucket = driver->get_bucket(copy_source_bucket_info);
int RGWCopyObj::verify_permission(optional_yield y)
{
- RGWAccessControlPolicy src_acl(s->cct);
+ RGWAccessControlPolicy src_acl;
boost::optional<Policy> src_policy;
/* get buckets info (source and dest) */
}
}
- RGWAccessControlPolicy dest_bucket_policy(s->cct);
+ RGWAccessControlPolicy dest_bucket_policy;
s->object->set_atomic();
(!rgw::sal::Object::empty(s->object.get()) ? s->object_acl.get() : s->bucket_acl.get());
RGWAccessControlPolicy_S3* const s3policy = \
static_cast<RGWAccessControlPolicy_S3*>(acl);
- s3policy->to_xml(ss);
+ s3policy->to_xml(this, ss);
acls = ss.str();
}
RGWAccessControlPolicy_S3 *policy = NULL;
RGWACLXMLParser_S3 parser(s->cct);
- RGWAccessControlPolicy_S3 new_policy(s->cct);
+ RGWAccessControlPolicy_S3 new_policy;
stringstream ss;
op_ret = 0; /* XXX redundant? */
if (s->cct->_conf->subsys.should_gather<ceph_subsys_rgw, 15>()) {
ldpp_dout(this, 15) << "Old AccessControlPolicy";
- policy->to_xml(*_dout);
+ policy->to_xml(this, *_dout);
*_dout << dendl;
}
if (s->cct->_conf->subsys.should_gather<ceph_subsys_rgw, 15>()) {
ldpp_dout(this, 15) << "New AccessControlPolicy:";
- new_policy.to_xml(*_dout);
+ new_policy.to_xml(this, *_dout);
*_dout << dendl;
}
ACLOwner& bucket_owner /* out */,
optional_yield y)
{
- RGWAccessControlPolicy bacl(driver->ctx());
+ RGWAccessControlPolicy bacl;
int ret = read_bucket_policy(dpp, driver, s, binfo, battrs, &bacl, binfo.bucket, y);
if (ret < 0) {
return false;
ACLOwner& bucket_owner /* out */,
optional_yield y)
{
- RGWAccessControlPolicy bacl(driver->ctx());
+ RGWAccessControlPolicy bacl;
op_ret = read_bucket_policy(this, driver, s, binfo, battrs, &bacl, binfo.bucket, y);
if (op_ret < 0) {
ldpp_dout(this, 20) << "cannot read_policy() for bucket" << dendl;
void execute(optional_yield y) override;
void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
RGWOp::init(driver, s, h);
- policy.set_ctx(s->cct);
relaxed_region_enforcement =
s->cct->_conf.get_val<bool>("rgw_relaxed_region_enforcement");
}
delete obj_legal_hold;
}
- void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
- RGWOp::init(driver, s, h);
- policy.set_ctx(s->cct);
- }
-
virtual int init_processing(optional_yield y) override;
void emplace_attr(std::string&& key, buffer::list&& bl) {
attrs.emplace(std::move(key), std::move(bl)); /* key and bl are r-value refs */
}
- void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
- RGWOp::init(driver, s, h);
- policy.set_ctx(s->cct);
- }
-
int verify_permission(optional_yield y) override;
void pre_exec() override;
void execute(optional_yield y) override;
has_policy(false) {
}
- void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
- RGWOp::init(driver, s, h);
- policy.set_ctx(s->cct);
- }
int init_processing(optional_yield y) override;
int verify_permission(optional_yield y) override;
void pre_exec() override { }
attrs.emplace(std::move(key), std::move(bl)); /* key and bl are r-value refs */
}
- void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
- RGWOp::init(driver, s, h);
- policy.set_ctx(s->cct);
- }
-
int verify_permission(optional_yield y) override;
void pre_exec() override;
void execute(optional_yield y) override;
: dlo_manifest(NULL)
{}
- void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
- RGWOp::init(driver, s, h);
- policy.set_ctx(s->cct);
- }
int verify_permission(optional_yield y) override;
void pre_exec() override;
void execute(optional_yield y) override;
attrs.emplace(std::move(key), std::move(bl));
}
- void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
- RGWOp::init(driver, s, h);
- dest_policy.set_ctx(s->cct);
- }
int init_processing(optional_yield y) override;
int verify_permission(optional_yield y) override;
void pre_exec() override;
public:
RGWInitMultipart() {}
- void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
- RGWOp::init(driver, s, h);
- policy.set_ctx(s->cct);
- }
int verify_permission(optional_yield y) override;
void pre_exec() override;
void execute(optional_yield y) override;
truncated = false;
}
- void init(rgw::sal::Driver* driver, req_state *s, RGWHandler *h) override {
- RGWOp::init(driver, s, h);
- policy = RGWAccessControlPolicy(s->cct);
- }
int verify_permission(optional_yield y) override;
void pre_exec() override;
void execute(optional_yield y) override;
int RGWCreateBucket_ObjStore_S3::get_params(optional_yield y)
{
- RGWAccessControlPolicy_S3 s3policy(s->cct);
+ RGWAccessControlPolicy_S3 s3policy;
bool relaxed_names = s->cct->_conf->rgw_relaxed_s3_bucket_names;
int r;
return ret;
}
- RGWAccessControlPolicy_S3 s3policy(s->cct);
+ RGWAccessControlPolicy_S3 s3policy;
ret = create_s3_policy(s, driver, s3policy, s->owner);
if (ret < 0)
return ret;
string canned_acl;
part_str(parts, "acl", &canned_acl);
- RGWAccessControlPolicy_S3 s3policy(s->cct);
+ RGWAccessControlPolicy_S3 s3policy;
ldpp_dout(this, 20) << "canned_acl=" << canned_acl << dendl;
if (s3policy.create_canned(s->owner, s->bucket_owner, canned_acl) < 0) {
err_msg = "Bad canned ACLs";
int RGWCopyObj_ObjStore_S3::init_dest_policy()
{
- RGWAccessControlPolicy_S3 s3policy(s->cct);
+ RGWAccessControlPolicy_S3 s3policy;
/* build a policy for the target object */
int r = create_s3_policy(s, driver, s3policy, s->owner);
req_state *s,
stringstream& ss)
{
- RGWAccessControlPolicy_S3 s3policy(s->cct);
+ RGWAccessControlPolicy_S3 s3policy;
// bucket-* canned acls do not apply to bucket
if (rgw::sal::Object::empty(s->object.get())) {
if (r < 0)
return r;
- s3policy.to_xml(ss);
+ s3policy.to_xml(this, ss);
return 0;
}
return ret;
}
- RGWAccessControlPolicy_S3 s3policy(s->cct);
+ RGWAccessControlPolicy_S3 s3policy;
ret = create_s3_policy(s, driver, s3policy, s->owner);
if (ret < 0)
return ret;
*has_policy = false;
if (read_list || write_list) {
- RGWAccessControlPolicy_SWIFT swift_policy(s->cct);
+ RGWAccessControlPolicy_SWIFT swift_policy;
const auto r = swift_policy.create(s, driver,
s->user->get_id(),
s->user->get_display_name(),
const char * const acl_attr = s->info.env->get("HTTP_X_ACCOUNT_ACCESS_CONTROL");
if (acl_attr) {
- RGWAccessControlPolicy_SWIFTAcct swift_acct_policy(s->cct);
+ RGWAccessControlPolicy_SWIFTAcct swift_acct_policy;
const bool r = swift_acct_policy.create(s, driver,
s->user->get_id(),
s->user->get_display_name(),