]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw/acl/swift: create_account_policy() as free function
authorCasey Bodley <cbodley@redhat.com>
Thu, 16 Nov 2023 18:59:18 +0000 (13:59 -0500)
committerCasey Bodley <cbodley@redhat.com>
Thu, 30 Nov 2023 15:40:45 +0000 (10:40 -0500)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_acl_swift.cc
src/rgw/rgw_acl_swift.h
src/rgw/rgw_rest_swift.cc

index 55766a336135718c1f9952a6b19e43c10fb886cc..16b03e41ab6c798341647510ab14bb4d90583ada 100644 (file)
@@ -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<std::string> RGWAccessControlPolicy_SWIFTAcct::to_str() const
 {
   std::vector<std::string> admin;
index 68ddf3d95269db71cd2d840b826a67e844cc0429..dbe89efef796d583227119e4c8dd5a7df7a8c866 100644 (file)
@@ -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<std::string> to_str() const;
 };
index 930156d4b5127933b4954af04b8fa15e00b046fe..b5ac5a427c3fba549499cdf9695887f4310c74e1 100644 (file)
@@ -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;
   }