From: Casey Bodley Date: Thu, 16 Nov 2023 18:08:45 +0000 (-0500) Subject: rgw/acl/swift: create_container_policy() as free function X-Git-Tag: v19.0.0~9^2~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=33bc63e8d668dca38a57f6bb2cfaa980ee47f8c2;p=ceph-ci.git rgw/acl/swift: create_container_policy() as free function Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_acl_swift.cc b/src/rgw/rgw_acl_swift.cc index 74d5e9bbaa7..a6c23f99720 100644 --- a/src/rgw/rgw_acl_swift.cc +++ b/src/rgw/rgw_acl_swift.cc @@ -153,19 +153,19 @@ static auto parse_grant(const DoutPrefixProvider* dpp, return std::nullopt; } - -int RGWAccessControlPolicy_SWIFT::create(const DoutPrefixProvider *dpp, - rgw::sal::Driver* driver, - const rgw_user& id, - const std::string& name, - const char* read_list, - const char* write_list, - uint32_t& rw_mask) +namespace rgw::swift { + +int create_container_policy(const DoutPrefixProvider *dpp, + rgw::sal::Driver* driver, + const rgw_user& id, + const std::string& name, + const char* read_list, + const char* write_list, + uint32_t& rw_mask, + RGWAccessControlPolicy& policy) { - acl.create_default(id, name); - owner.id = id; - owner.display_name = name; - rw_mask = 0; + policy.create_default(id, name); + auto& acl = policy.get_acl(); if (read_list) { for (std::string_view uid : ceph::split(read_list, " ,")) { @@ -194,6 +194,8 @@ int RGWAccessControlPolicy_SWIFT::create(const DoutPrefixProvider *dpp, return 0; } +} // namespace rgw::swift + void RGWAccessControlPolicy_SWIFT::filter_merge(uint32_t rw_mask, RGWAccessControlPolicy_SWIFT *old) { diff --git a/src/rgw/rgw_acl_swift.h b/src/rgw/rgw_acl_swift.h index 50b02070162..e1c51884945 100644 --- a/src/rgw/rgw_acl_swift.h +++ b/src/rgw/rgw_acl_swift.h @@ -14,16 +14,24 @@ class RGWUserCtl; +namespace rgw::swift { + +/// Create a policy based on swift container acl headers +/// X-Container-Read/X-Container-Write. +int create_container_policy(const DoutPrefixProvider *dpp, + rgw::sal::Driver* driver, + const rgw_user& id, + const std::string& name, + const char* read_list, + const char* write_list, + uint32_t& rw_mask, + RGWAccessControlPolicy& policy); + +} // namespace rgw::swift + class RGWAccessControlPolicy_SWIFT : public RGWAccessControlPolicy { public: - int create(const DoutPrefixProvider *dpp, - rgw::sal::Driver* driver, - const rgw_user& id, - const std::string& name, - const char* read_list, - const char* write_list, - uint32_t& rw_mask); void filter_merge(uint32_t mask, RGWAccessControlPolicy_SWIFT *policy); void to_str(std::string& read, std::string& write); }; diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index a92d1f56f81..b486042e00f 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -607,18 +607,17 @@ static int get_swift_container_settings(req_state * const s, *has_policy = false; if (read_list || write_list) { - RGWAccessControlPolicy_SWIFT swift_policy; - const auto r = swift_policy.create(s, driver, - s->user->get_id(), - s->user->get_display_name(), - read_list, - write_list, - *rw_mask); + int r = rgw::swift::create_container_policy(s, driver, + s->user->get_id(), + s->user->get_display_name(), + read_list, + write_list, + *rw_mask, + *policy); if (r < 0) { return r; } - *policy = swift_policy; *has_policy = true; }