]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add the condition of lock mode conversion to PutObjRentention 45441/head
authorwangzhong <wangzhong@cmss.chinamobile.com>
Tue, 27 Jul 2021 09:52:44 +0000 (02:52 -0700)
committerCory Snyder <csnyder@iland.com>
Wed, 16 Mar 2022 17:14:00 +0000 (13:14 -0400)
Signed-off-by: wangzhong <wangzhong@cmss.chinamobile.com>
(cherry picked from commit 585eae46a2bb7ed39ca2f3213801e0f77642c9d4)

src/rgw/rgw_op.cc

index 2339dccb7fd0e092f2677cf5d8847fdf5390b548..9885fcc44e78fb310d018adea3a2d841a7142d7e 100644 (file)
@@ -8021,10 +8021,20 @@ void RGWPutObjRetention::execute()
     }
     if (ceph::real_clock::to_time_t(obj_retention.get_retain_until_date()) < ceph::real_clock::to_time_t(old_obj_retention.get_retain_until_date())) {
       if (old_obj_retention.get_mode().compare("GOVERNANCE") != 0 || !bypass_perm || !bypass_governance_mode) {
-       s->err.message = "proposed retain-until date shortens an existing retention period and governance bypass check failed";
+         s->err.message = "proposed retain-until date shortens an existing retention period and governance bypass check failed";
         op_ret = -EACCES;
         return;
       }
+    } else if (old_obj_retention.get_mode() == obj_retention.get_mode()) {
+      // ok if retention mode doesn't change
+    } else if (obj_retention.get_mode() == "GOVERNANCE") {
+      s->err.message = "can't change retention mode from COMPLIANCE to GOVERNANCE";
+      op_ret = -EACCES;
+      return;
+    } else if (!bypass_perm || !bypass_governance_mode) {
+      s->err.message = "can't change retention mode from GOVERNANCE without governance bypass";
+      op_ret = -EACCES;
+      return;
     }
   }