From 350dd304c6daae00dbe8781d855393e5b40f0218 Mon Sep 17 00:00:00 2001 From: Matt Benjamin Date: Mon, 24 Feb 2020 17:56:49 -0500 Subject: [PATCH] rgw: fail when get/set-bucket-versioning attempted on a non-existent bucket These should not succeed, but fail w/HTTP 404 and NoSuchBucket as the API error. Fixes: https://tracker.ceph.com/issues/44280 Signed-off-by: Matt Benjamin --- src/rgw/rgw_op.cc | 10 ++++++++++ src/rgw/rgw_rest_s3.cc | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index cb8e8a90d53..94828defb15 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -2651,6 +2651,11 @@ void RGWGetBucketVersioning::pre_exec() void RGWGetBucketVersioning::execute() { + if (! s->bucket_exists) { + op_ret = -ERR_NO_SUCH_BUCKET; + return; + } + versioned = s->bucket_info.versioned(); versioning_enabled = s->bucket_info.versioning_enabled(); mfa_enabled = s->bucket_info.mfa_enabled(); @@ -2672,6 +2677,11 @@ void RGWSetBucketVersioning::execute() if (op_ret < 0) return; + if (! s->bucket_exists) { + op_ret = -ERR_NO_SUCH_BUCKET; + return; + } + if (s->bucket_info.obj_lock_enabled() && versioning_status != VersioningEnabled) { op_ret = -ERR_INVALID_BUCKET_STATE; return; diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 532d738b580..831f812a46d 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -1824,6 +1824,8 @@ void RGWGetBucketLocation_ObjStore_S3::send_response() void RGWGetBucketVersioning_ObjStore_S3::send_response() { + if (op_ret) + set_req_state_err(s, op_ret); dump_errno(s); end_header(s, this, "application/xml"); dump_start(s); -- 2.47.3