From: Matt Benjamin Date: Mon, 24 Feb 2020 22:56:49 +0000 (-0500) Subject: rgw: fail when get/set-bucket-versioning attempted on a non-existent bucket X-Git-Tag: v16.1.0~2108^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=350dd304c6daae00dbe8781d855393e5b40f0218;p=ceph.git 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 --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index cb8e8a90d533..94828defb157 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 532d738b5807..831f812a46d8 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);