]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Check user permissions for governance retention bypass in multi-object delete.
authorMark Houghton <mhoughton@microfocus.com>
Wed, 28 Oct 2020 14:44:03 +0000 (14:44 +0000)
committerMark Houghton <mhoughton@microfocus.com>
Fri, 20 Nov 2020 17:40:09 +0000 (17:40 +0000)
fixes: https://tracker.ceph.com/issues/47586
Signed-off-by: Mark Houghton <mhoughton@microfocus.com>
src/rgw/rgw_op.cc

index edd7264e2b2d0ebc54ce88a42a48fc5baf85fba9..2e112af098685eccec2d04732592cf0cc01e7fb0 100644 (file)
@@ -6385,6 +6385,19 @@ void RGWGetHealthCheck::execute(optional_yield y)
 int RGWDeleteMultiObj::verify_permission(optional_yield y)
 {
   if (s->iam_policy || ! s->iam_user_policies.empty()) {
+    if (s->bucket->get_info().obj_lock_enabled() && bypass_governance_mode) {
+      auto r = eval_user_policies(s->iam_user_policies, s->env, boost::none,
+                                               rgw::IAM::s3BypassGovernanceRetention, ARN(s->bucket->get_key()));
+      if (r == Effect::Deny) {
+        bypass_perm = false;
+      } else if (r == Effect::Pass && s->iam_policy) {
+        r = s->iam_policy->eval(s->env, *s->auth.identity, rgw::IAM::s3BypassGovernanceRetention,
+                                     ARN(s->bucket->get_key()));
+        if (r == Effect::Deny) {
+          bypass_perm = false;
+        }
+      }
+    }
     auto usr_policy_res = eval_user_policies(s->iam_user_policies, s->env,
                                               boost::none,
                                               s->object->get_instance().empty() ?