@@ -8665,8 +8665,9 @@ int RGWPutBucketObjectLock::verify_permission(optional_yield y)
86658665
86668666void RGWPutBucketObjectLock::execute (optional_yield y)
86678667{
8668- if (!s->bucket ->get_info ().obj_lock_enabled ()) {
8669- s->err .message = " object lock configuration can't be set if bucket object lock not enabled" ;
8668+ if (!s->bucket ->get_info ().versioning_enabled ()) {
8669+ s->err .message = " Object lock cannot be enabled unless the "
8670+ " bucket has versioning enabled" ;
86708671 ldpp_dout (this , 4 ) << " ERROR: " << s->err .message << dendl;
86718672 op_ret = -ERR_INVALID_BUCKET_STATE;
86728673 return ;
@@ -8709,6 +8710,17 @@ void RGWPutBucketObjectLock::execute(optional_yield y)
87098710 }
87108711
87118712 op_ret = retry_raced_bucket_write (this , s->bucket .get (), [this , y] {
8713+ if (!s->bucket ->get_info ().obj_lock_enabled ()) {
8714+ // automatically enable object lock if the bucket is versioning-enabled
8715+ if (!s->bucket ->get_info ().versioning_enabled ()) {
8716+ s->err .message = " Object lock cannot be enabled unless the "
8717+ " bucket has versioning enabled" ;
8718+ ldpp_dout (this , 4 ) << " ERROR: " << s->err .message << dendl;
8719+ return -ERR_INVALID_BUCKET_STATE;
8720+ }
8721+ s->bucket ->get_info ().flags |= BUCKET_OBJ_LOCK_ENABLED;
8722+ }
8723+
87128724 s->bucket ->get_info ().obj_lock = obj_lock;
87138725 op_ret = s->bucket ->put_info (this , false , real_time (), y);
87148726 return op_ret;
0 commit comments