_add_grant(grant);
}
-int RGWAccessControlList::get_perm(const RGWIdentityApplier& auth_identity,
- const int perm_mask)
+uint32_t RGWAccessControlList::get_perm(const RGWIdentityApplier& auth_identity,
+ const uint32_t perm_mask)
{
ldout(cct, 5) << "Searching permissions for identity=" << auth_identity
<< " mask=" << perm_mask << dendl;
return perm_mask & auth_identity.get_perms_from_aclspec(acl_user_map);
}
-int RGWAccessControlList::get_group_perm(ACLGroupTypeEnum group, int perm_mask)
+uint32_t RGWAccessControlList::get_group_perm(ACLGroupTypeEnum group,
+ const uint32_t perm_mask)
{
ldout(cct, 5) << "Searching permissions for group=" << (int)group
<< " mask=" << perm_mask << dendl;
- map<uint32_t, int>::iterator iter = acl_group_map.find((uint32_t)group);
+ const auto iter = acl_group_map.find((uint32_t)group);
if (iter != acl_group_map.end()) {
ldout(cct, 5) << "Found permission: " << iter->second << dendl;
return iter->second & perm_mask;
return 0;
}
-int RGWAccessControlList::get_referer_perm(const std::string http_referer,
- const int perm_mask)
+uint32_t RGWAccessControlList::get_referer_perm(const std::string http_referer,
+ const uint32_t perm_mask)
{
ldout(cct, 5) << "Searching permissions for referer=" << http_referer
<< " mask=" << perm_mask << dendl;
}
}
-int RGWAccessControlPolicy::get_perm(const RGWIdentityApplier& auth_identity,
- const int perm_mask,
- const char * const http_referer)
+uint32_t RGWAccessControlPolicy::get_perm(const RGWIdentityApplier& auth_identity,
+ const uint32_t perm_mask,
+ const char * const http_referer)
{
- int perm = acl.get_perm(auth_identity, perm_mask);
+ uint32_t perm = acl.get_perm(auth_identity, perm_mask);
if (auth_identity.is_owner_of(owner.get_id())) {
perm |= perm_mask & (RGW_PERM_READ_ACP | RGW_PERM_WRITE_ACP);
}
bool RGWAccessControlPolicy::verify_permission(const RGWIdentityApplier& auth_identity,
- const int user_perm_mask,
- const int perm,
+ const uint32_t user_perm_mask,
+ const uint32_t perm,
const char * const http_referer)
{
- int test_perm = perm | RGW_PERM_READ_OBJS | RGW_PERM_WRITE_OBJS;
+ uint32_t test_perm = perm | RGW_PERM_READ_OBJS | RGW_PERM_WRITE_OBJS;
- int policy_perm = get_perm(auth_identity, test_perm, http_referer);
+ uint32_t policy_perm = get_perm(auth_identity, test_perm, http_referer);
/* the swift WRITE_OBJS perm is equivalent to the WRITE obj, just
convert those bits. Note that these bits will only be set on
policy_perm |= (RGW_PERM_READ | RGW_PERM_READ_ACP);
}
- int acl_perm = policy_perm & perm & user_perm_mask;
+ uint32_t acl_perm = policy_perm & perm & user_perm_mask;
ldout(cct, 10) << " identity=" << auth_identity
<< " requested perm (type)=" << perm
public:
ACLPermission() : flags(0) {}
~ACLPermission() {}
- int get_permissions() const { return flags; }
- void set_permissions(int perm) { flags = perm; }
+ uint32_t get_permissions() const { return flags; }
+ void set_permissions(uint32_t perm) { flags = perm; }
void encode(bufferlist& bl) const {
ENCODE_START(2, 2, bl);
ACLGroupTypeEnum uri_to_group(string& uri);
- void set_canon(const rgw_user& _id, const string& _name, const int perm) {
+ void set_canon(const rgw_user& _id, const string& _name, const uint32_t perm) {
type.set(ACL_TYPE_CANON_USER);
id = _id;
name = _name;
permission.set_permissions(perm);
}
- void set_group(ACLGroupTypeEnum _group, int perm) {
+ void set_group(ACLGroupTypeEnum _group, const uint32_t perm) {
type.set(ACL_TYPE_GROUP);
group = _group;
permission.set_permissions(perm);
}
- void set_referer(const std::string& _url_spec, int perm) {
+ void set_referer(const std::string& _url_spec, const uint32_t perm) {
type.set(ACL_TYPE_REFERER);
url_spec = _url_spec;
permission.set_permissions(perm);
struct ACLReferer {
std::string url_spec;
- int perm;
+ uint32_t perm;
ACLReferer() : perm(0) {}
ACLReferer(const std::string& url_spec,
- const int perm)
+ const uint32_t perm)
: url_spec(url_spec),
perm(perm) {
}
{
protected:
CephContext *cct;
+ /* FIXME: in the feature we should consider switching to uint32_t also
+ * in data structures. */
map<string, int> acl_user_map;
map<uint32_t, int> acl_group_map;
list<ACLReferer> referer_list;
virtual ~RGWAccessControlList() {}
- int get_perm(const RGWIdentityApplier& auth_identity,
- int perm_mask);
- int get_group_perm(ACLGroupTypeEnum group, int perm_mask);
- int get_referer_perm(const std::string http_referer, int perm_mask);
+ uint32_t get_perm(const RGWIdentityApplier& auth_identity,
+ uint32_t perm_mask);
+ uint32_t get_group_perm(ACLGroupTypeEnum group, uint32_t perm_mask);
+ uint32_t get_referer_perm(const std::string http_referer, uint32_t perm_mask);
void encode(bufferlist& bl) const {
ENCODE_START(4, 3, bl);
bool maps_initialized = true;
acl.set_ctx(ctx);
}
- int get_perm(const RGWIdentityApplier& auth_identity,
- int perm_mask,
- const char * http_referer);
- int get_group_perm(ACLGroupTypeEnum group, int perm_mask);
+ uint32_t get_perm(const RGWIdentityApplier& auth_identity,
+ uint32_t perm_mask,
+ const char * http_referer);
+ uint32_t get_group_perm(ACLGroupTypeEnum group, uint32_t perm_mask);
bool verify_permission(const RGWIdentityApplier& auth_identity,
- int user_perm_mask,
- int perm,
+ uint32_t user_perm_mask,
+ uint32_t perm,
const char * http_referer = nullptr);
void encode(bufferlist& bl) const {
void RGWAccessControlPolicy_SWIFT::add_grants(RGWRados * const store,
const std::vector<std::string>& uids,
- const int perm)
+ const uint32_t perm)
{
for (const auto& uid : uids) {
ldout(cct, 20) << "trying to add grant for ACL uid=" << uid << dendl;
for (iter = m.begin(); iter != m.end(); ++iter) {
ACLGrant& grant = iter->second;
- int perm = grant.get_permission().get_permissions();
+ const uint32_t perm = grant.get_permission().get_permissions();
rgw_user id;
if (!grant.get_id(id)) {
if (grant.get_group() != ACL_GROUP_ALL_USERS)
void RGWAccessControlPolicy_SWIFTAcct::add_grants(RGWRados * const store,
const std::vector<std::string>& uids,
- const int perm)
+ const uint32_t perm)
{
for (const auto& uid : uids) {
ACLGrant grant;
/* Parition the grant map into three not-overlapping groups. */
for (const auto& item : get_acl().get_grant_map()) {
const ACLGrant& grant = item.second;
- const int perm = grant.get_permission().get_permissions();
+ const uint32_t perm = grant.get_permission().get_permissions();
rgw_user id;
if (!grant.get_id(id)) {
void add_grants(RGWRados *store,
const std::vector<std::string>& uids,
- int perm);
+ uint32_t perm);
bool create(RGWRados *store,
const rgw_user& id,
const std::string& name,
void add_grants(RGWRados *store,
const std::vector<std::string>& uids,
- int perm);
+ uint32_t perm);
bool create(RGWRados *store,
const rgw_user& id,
const std::string& name,
is_admin(is_admin) {
}
- int get_perms_from_aclspec(const aclspec_t& aclspec) const {
+ uint32_t get_perms_from_aclspec(const aclspec_t& aclspec) const {
return rgw_perms_from_aclspec_default_strategy(id, aclspec);
}
return id == acct_id;
}
- int get_perm_mask() const {
+ uint32_t get_perm_mask() const {
return perm_mask;
}
}
-int rgw_perms_from_aclspec_default_strategy(const rgw_user& uid,
- const RGWIdentityApplier::aclspec_t& aclspec)
+uint32_t rgw_perms_from_aclspec_default_strategy(
+ const rgw_user& uid,
+ const RGWIdentityApplier::aclspec_t& aclspec)
{
dout(5) << "Searching permissions for uid=" << uid << dendl;
/* RGWRemoteAuthApplier */
-int RGWRemoteAuthApplier::get_perms_from_aclspec(const aclspec_t& aclspec) const
+uint32_t RGWRemoteAuthApplier::get_perms_from_aclspec(const aclspec_t& aclspec) const
{
- int perm = 0;
+ uint32_t perm = 0;
/* For backward compatibility with ACLOwner. */
perm |= rgw_perms_from_aclspec_default_strategy(info.acct_user,
/* static declaration */
const std::string RGWLocalAuthApplier::NO_SUBUSER;
-int RGWLocalAuthApplier::get_perms_from_aclspec(const aclspec_t& aclspec) const
+uint32_t RGWLocalAuthApplier::get_perms_from_aclspec(const aclspec_t& aclspec) const
{
return rgw_perms_from_aclspec_default_strategy(user_info.user_id, aclspec);
}
/* Lambda will obtain a copy of (not a reference to!) allowed_items. */
return [allowed_items](const RGWIdentityApplier::aclspec_t& aclspec) {
- int perm = 0;
+ uint32_t perm = 0;
for (const auto& allowed_item : allowed_items) {
const auto iter = aclspec.find(allowed_item);
* XXX: implementation is responsible for giving the real semantic to the
* items in @aclspec. That is, their meaning may depend on particular auth
* engine that was used. */
- virtual int get_perms_from_aclspec(const aclspec_t& aclspec) const = 0;
+ virtual uint32_t get_perms_from_aclspec(const aclspec_t& aclspec) const = 0;
/* Verify whether a given identity *can be treated as* an admin of
* the rgw_user (account in Swift's terminology) specified in @uid. */
/* Return the permission mask that is used to narrow down the set of
* operations allowed for a given identity. This method reflects the idea
* of subuser tied to RGWUserInfo. */
- virtual int get_perm_mask() const = 0;
+ virtual uint32_t get_perm_mask() const = 0;
virtual bool is_anonymous() const final {
/* If the identity owns the anonymous account (rgw_user), it's considered
std::unique_ptr<RGWIdentityApplier>
rgw_auth_transform_old_authinfo(req_state * const s);
-int rgw_perms_from_aclspec_default_strategy(const rgw_user& uid,
- const RGWIdentityApplier::aclspec_t& aclspec);
+uint32_t rgw_perms_from_aclspec_default_strategy(
+ const rgw_user& uid,
+ const RGWIdentityApplier::aclspec_t& aclspec);
/* Interface for classes applying changes to request state/RADOS store imposed
};
using aclspec_t = RGWIdentityApplier::aclspec_t;
- typedef std::function<int(const aclspec_t&)> acl_strategy_t;
+ typedef std::function<uint32_t(const aclspec_t&)> acl_strategy_t;
protected:
/* Read-write is intensional here due to RGWUserInfo creation process. */
info(info) {
}
- virtual int get_perms_from_aclspec(const aclspec_t& aclspec) const override;
+ virtual uint32_t get_perms_from_aclspec(const aclspec_t& aclspec) const override;
virtual bool is_admin_of(const rgw_user& uid) const override;
virtual bool is_owner_of(const rgw_user& uid) const override;
- virtual int get_perm_mask() const { return info.perm_mask; }
+ virtual uint32_t get_perm_mask() const { return info.perm_mask; }
virtual std::string to_str() const override;
virtual void load_acct_info(RGWUserInfo& user_info) const override; /* out */
}
- virtual int get_perms_from_aclspec(const aclspec_t& aclspec) const override;
+ virtual uint32_t get_perms_from_aclspec(const aclspec_t& aclspec) const override;
virtual bool is_admin_of(const rgw_user& uid) const override;
virtual bool is_owner_of(const rgw_user& uid) const override;
- virtual int get_perm_mask() const override {
+ virtual uint32_t get_perm_mask() const override {
return get_perm_mask(subuser, user_info);
}
virtual std::string to_str() const override;
decoratee(decoratee) {
}
- virtual int get_perms_from_aclspec(const aclspec_t& aclspec) const override {
+ virtual uint32_t get_perms_from_aclspec(const aclspec_t& aclspec) const override {
return decoratee.get_perms_from_aclspec(aclspec);
}
return decoratee.is_owner_of(uid);
}
- virtual int get_perm_mask() const override {
+ virtual uint32_t get_perm_mask() const override {
return decoratee.get_perm_mask();
}
decoratee(std::move(decoratee)) {
}
- virtual int get_perms_from_aclspec(const aclspec_t& aclspec) const override {
+ virtual uint32_t get_perms_from_aclspec(const aclspec_t& aclspec) const override {
return decoratee->get_perms_from_aclspec(aclspec);
}
return decoratee->is_owner_of(uid);
}
- virtual int get_perm_mask() const override {
+ virtual uint32_t get_perm_mask() const override {
return decoratee->get_perm_mask();
}