]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/acl/swift: create_container_policy() as free function
authorCasey Bodley <cbodley@redhat.com>
Thu, 16 Nov 2023 18:08:45 +0000 (13:08 -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 74d5e9bbaa73c625fb530dc29558a94d224b0ae7..a6c23f997202c86d1602498df4f7af1545d14ef8 100644 (file)
@@ -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)
 {
index 50b020701623d63b497dd23484262cba6a100732..e1c51884945401e008a9f79d8bf767f90903b36a 100644 (file)
 
 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);
 };
index a92d1f56f810e5c18aad77eb22e17cecadd86e6a..b486042e00f855bcfecbe246417b9e0f5452e542 100644 (file)
@@ -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;
   }