]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw/acl/swift: merge_policy() as free function
authorCasey Bodley <cbodley@redhat.com>
Thu, 16 Nov 2023 18:25:36 +0000 (13:25 -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_op.cc

index a6c23f997202c86d1602498df4f7af1545d14ef8..4bf0ba9251774ad91c99ffc5185f2bc62c8a9e12 100644 (file)
@@ -194,10 +194,8 @@ int create_container_policy(const DoutPrefixProvider *dpp,
   return 0;
 }
 
-} // namespace rgw::swift
-
-void RGWAccessControlPolicy_SWIFT::filter_merge(uint32_t rw_mask,
-                                                RGWAccessControlPolicy_SWIFT *old)
+void merge_policy(uint32_t rw_mask, const RGWAccessControlPolicy& src,
+                  RGWAccessControlPolicy& dest)
 {
   /* rw_mask&SWIFT_PERM_READ => setting read acl,
    * rw_mask&SWIFT_PERM_WRITE => setting write acl
@@ -207,15 +205,13 @@ void RGWAccessControlPolicy_SWIFT::filter_merge(uint32_t rw_mask,
     return;
   }
   rw_mask ^= (SWIFT_PERM_READ|SWIFT_PERM_WRITE);
-  for (auto &iter: old->acl.get_grant_map()) {
-    ACLGrant& grant = iter.second;
+  for (const auto &iter: src.get_acl().get_grant_map()) {
+    const ACLGrant& grant = iter.second;
     uint32_t perm = grant.get_permission().get_permissions();
     rgw_user id;
-    string url_spec;
     if (!grant.get_id(id)) {
       if (grant.get_group() != ACL_GROUP_ALL_USERS) {
-        url_spec = grant.get_referer();
-        if (url_spec.empty()) {
+        if (string url_spec = grant.get_referer(); url_spec.empty()) {
           continue;
         }
         if (perm == 0) {
@@ -225,11 +221,13 @@ void RGWAccessControlPolicy_SWIFT::filter_merge(uint32_t rw_mask,
       }
     }
     if (perm & rw_mask) {
-      acl.add_grant(grant);
+      dest.get_acl().add_grant(grant);
     }
   }
 }
 
+} // namespace rgw::swift
+
 void RGWAccessControlPolicy_SWIFT::to_str(string& read, string& write)
 {
   multimap<string, ACLGrant>& m = acl.get_grant_map();
index e1c51884945401e008a9f79d8bf767f90903b36a..bf983ba2b8c277331dde78c891c2940aa0f2297c 100644 (file)
@@ -27,12 +27,16 @@ int create_container_policy(const DoutPrefixProvider *dpp,
                             uint32_t& rw_mask,
                             RGWAccessControlPolicy& policy);
 
+/// Copy grants matching the permission mask (SWIFT_PERM_READ/WRITE) from
+/// one policy to another.
+void merge_policy(uint32_t rw_mask, const RGWAccessControlPolicy& src,
+                  RGWAccessControlPolicy& dest);
+
 } // namespace rgw::swift
 
 class RGWAccessControlPolicy_SWIFT : public RGWAccessControlPolicy
 {
 public:
-  void filter_merge(uint32_t mask, RGWAccessControlPolicy_SWIFT *policy);
   void to_str(std::string& read, std::string& write);
 };
 
index 39e12a5ab0966ec4286e989142bcddfa880e41be..593d1598aefaa7364b191971c92f56fed0cd9201 100644 (file)
@@ -4988,11 +4988,7 @@ void RGWPutMetadataBucket::execute(optional_yield y)
        * contain such keys yet. */
       if (has_policy) {
        if (s->dialect.compare("swift") == 0) {
-         auto old_policy =                                             \
-           static_cast<RGWAccessControlPolicy_SWIFT*>(s->bucket_acl.get());
-         auto new_policy = static_cast<RGWAccessControlPolicy_SWIFT*>(&policy);
-         new_policy->filter_merge(policy_rw_mask, old_policy);
-         policy = *new_policy;
+         rgw::swift::merge_policy(policy_rw_mask, *s->bucket_acl, policy);
        }
        buffer::list bl;
        policy.encode(bl);