From: Yehuda Sadeh Date: Wed, 31 Oct 2018 20:22:48 +0000 (-0700) Subject: rgw: prevent creation of bucket with non-existent storage class X-Git-Tag: v14.1.0~314^2~39 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c3b504df07cb83e34aa3d9f4f882f1b3c99f066e;p=ceph.git rgw: prevent creation of bucket with non-existent storage class Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_zone.h b/src/rgw/rgw_zone.h index 22f638eecef9..adee749d6574 100644 --- a/src/rgw/rgw_zone.h +++ b/src/rgw/rgw_zone.h @@ -208,6 +208,11 @@ public: return true; } + bool exists(const string& sc) const { + auto iter = m.find(sc); + return (iter != m.end()); + } + const map& get_all() const { return m; } @@ -330,6 +335,10 @@ struct RGWZonePlacementInfo { return storage_class->compression_type.get_value_or(no_compression); } + bool storage_class_exists(const string& sc) const { + return storage_classes.exists(sc); + } + void dump(Formatter *f) const; void decode_json(JSONObj *obj); diff --git a/src/rgw/services/svc_zone.cc b/src/rgw/services/svc_zone.cc index aa3d74580844..d8368fb7c2f6 100644 --- a/src/rgw/services/svc_zone.cc +++ b/src/rgw/services/svc_zone.cc @@ -1038,7 +1038,12 @@ int RGWSI_Zone::select_bucket_location_by_rule(const rgw_placement_rule& locatio return -EINVAL; } -#warning FIXME check that location_rule.storage_class exists in piter->second + auto storage_class = location_rule.get_storage_class(); + if (!piter->second.storage_class_exists(storage_class)) { + ldout(cct, 5) << "requested storage class does not exist: " << storage_class << dendl; + return -EINVAL; + } + RGWZonePlacementInfo& placement_info = piter->second;