From: Casey Bodley Date: Thu, 16 Nov 2023 18:59:18 +0000 (-0500) Subject: rgw/acl/swift: create_account_policy() as free function X-Git-Tag: v19.0.0~9^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=78ba3808fb19950f53043227f2e7ff06809a5a10;p=ceph.git rgw/acl/swift: create_account_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 55766a336135..16b03e41ab6c 100644 --- a/src/rgw/rgw_acl_swift.cc +++ b/src/rgw/rgw_acl_swift.cc @@ -278,23 +278,20 @@ void format_container_acls(const RGWAccessControlPolicy& policy, } } -} // namespace rgw::swift - -bool RGWAccessControlPolicy_SWIFTAcct::create(const DoutPrefixProvider *dpp, - rgw::sal::Driver* driver, - const rgw_user& id, - const std::string& name, - const std::string& acl_str) +int create_account_policy(const DoutPrefixProvider* dpp, + rgw::sal::Driver* driver, + const rgw_user& id, + const std::string& name, + const std::string& acl_str, + RGWAccessControlPolicy& policy) { - acl.create_default(id, name); - owner.id = id; - owner.display_name = name; + policy.create_default(id, name); + auto& acl = policy.get_acl(); JSONParser parser; - if (!parser.parse(acl_str.c_str(), acl_str.length())) { ldpp_dout(dpp, 0) << "ERROR: JSONParser::parse returned error=" << dendl; - return false; + return -EINVAL; } JSONObjIter iter = parser.find_first("admin"); @@ -324,9 +321,11 @@ bool RGWAccessControlPolicy_SWIFTAcct::create(const DoutPrefixProvider *dpp, add_grants(dpp, driver, readonly, SWIFT_PERM_READ, acl); } - return true; + return 0; } +} // namespace rgw::swift + boost::optional RGWAccessControlPolicy_SWIFTAcct::to_str() const { std::vector admin; diff --git a/src/rgw/rgw_acl_swift.h b/src/rgw/rgw_acl_swift.h index 68ddf3d95269..dbe89efef796 100644 --- a/src/rgw/rgw_acl_swift.h +++ b/src/rgw/rgw_acl_swift.h @@ -36,6 +36,14 @@ void merge_policy(uint32_t rw_mask, const RGWAccessControlPolicy& src, void format_container_acls(const RGWAccessControlPolicy& policy, std::string& read, std::string& write); +/// Create a policy based on swift account acl header X-Account-Access-Control. +int create_account_policy(const DoutPrefixProvider* dpp, + rgw::sal::Driver* driver, + const rgw_user& id, + const std::string& name, + const std::string& acl_str, + RGWAccessControlPolicy& policy); + } // namespace rgw::swift class RGWAccessControlPolicy_SWIFT : public RGWAccessControlPolicy @@ -45,10 +53,5 @@ class RGWAccessControlPolicy_SWIFT : public RGWAccessControlPolicy class RGWAccessControlPolicy_SWIFTAcct : public RGWAccessControlPolicy { public: - bool create(const DoutPrefixProvider *dpp, - rgw::sal::Driver* driver, - const rgw_user& id, - const std::string& name, - const std::string& acl_str); boost::optional to_str() const; }; diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 930156d4b512..b5ac5a427c3f 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -1064,16 +1064,14 @@ static int get_swift_account_settings(req_state * const s, const char * const acl_attr = s->info.env->get("HTTP_X_ACCOUNT_ACCESS_CONTROL"); if (acl_attr) { - RGWAccessControlPolicy_SWIFTAcct swift_acct_policy; - const bool r = swift_acct_policy.create(s, driver, - s->user->get_id(), - s->user->get_display_name(), - string(acl_attr)); - if (r != true) { - return -EINVAL; + int r = rgw::swift::create_account_policy(s, driver, + s->user->get_id(), + s->user->get_display_name(), + acl_attr, *policy); + if (r < 0) { + return r; } - *policy = swift_acct_policy; *has_policy = true; }