]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add the condition of lock mode conversion to PutObjRentention 42505/head
authorwangzhong <wangzhong@cmss.chinamobile.com>
Tue, 27 Jul 2021 09:52:44 +0000 (02:52 -0700)
committerwangzhong <wangzhong@cmss.chinamobile.com>
Tue, 3 Aug 2021 08:03:15 +0000 (01:03 -0700)
Signed-off-by: wangzhong <wangzhong@cmss.chinamobile.com>
src/rgw/rgw_op.cc

index 25b2afa4435f5ded61235c78c96c83184668b101..7f885a95c90e57e94678f93a5f108fe44fabdf55 100644 (file)
@@ -8255,10 +8255,20 @@ void RGWPutObjRetention::execute(optional_yield y)
     }
     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;
     }
   }