From 585eae46a2bb7ed39ca2f3213801e0f77642c9d4 Mon Sep 17 00:00:00 2001 From: wangzhong Date: Tue, 27 Jul 2021 02:52:44 -0700 Subject: [PATCH] rgw: add the condition of lock mode conversion to PutObjRentention Signed-off-by: wangzhong --- src/rgw/rgw_op.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 25b2afa4435..7f885a95c90 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -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; } } -- 2.39.5