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: v14.2.12~98^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8af9f11bfee854c9cda44ac80fe9d0d19435237e;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 (cherry picked from commit 350dd304c6daae00dbe8781d855393e5b40f0218) --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index a0c0e81801e..6ab721e070b 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -2453,6 +2453,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(); @@ -2474,6 +2479,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 34012e99152..79e554fa285 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -1183,6 +1183,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);