]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix the bug of rgw not doing necessary checking to website configuration
authorEnming Zhang <enming.zhang@umcloud.com>
Fri, 5 Jul 2019 15:09:22 +0000 (08:09 -0700)
committerNathan Cutler <ncutler@suse.com>
Thu, 17 Oct 2019 16:55:39 +0000 (18:55 +0200)
Fixes: http://tracker.ceph.com/issues/40678
Signed-off-by: Enming Zhang <enming.zhang@umcloud.com>
(cherry picked from commit 355f392ad26631f44dac250296e96f421d86fb8f)

Conflicts:
src/rgw/rgw_rest_s3.cc
3275dffa45ae08d3818562d2d11a8d1c0afa326b is not being backported

src/rgw/rgw_rest_s3.cc
src/rgw/rgw_website.h
src/rgw/rgw_xml_enc.cc

index d50a4ad7464360bcc666443b99572cba47ff1ad4..b48f93685507dc3301552ae48adb52868efbdb45 100644 (file)
@@ -1040,6 +1040,21 @@ int RGWSetBucketWebsite_ObjStore_S3::get_params()
     return -EINVAL;
   }
 
+  if (website_conf.is_redirect_all && website_conf.redirect_all.hostname.empty()) {
+    s->err.message = "A host name must be provided to redirect all requests (e.g. \"example.com\").";
+    ldout(s->cct, 5) << s->err.message << dendl;
+    return -EINVAL;
+  } else if (!website_conf.is_redirect_all && !website_conf.is_set_index_doc) {
+    s->err.message = "A value for IndexDocument Suffix must be provided if RedirectAllRequestsTo is empty";
+    ldout(s->cct, 5) << s->err.message << dendl;
+    return -EINVAL;
+  } else if (!website_conf.is_redirect_all && website_conf.is_set_index_doc &&
+             website_conf.index_doc_suffix.empty()) {
+    s->err.message = "The IndexDocument Suffix is not well formed";
+    ldout(s->cct, 5) << s->err.message << dendl;
+    return -EINVAL;
+  }
+
   return 0;
 }
 
index c689ef73685f106e0c925e348d40774114059a0a..68f41018420f71778f8d472bed4b5ace9adde1bd 100644 (file)
@@ -180,10 +180,14 @@ struct RGWBucketWebsiteConf
   std::string subdir_marker;
   std::string listing_css_doc;
   bool listing_enabled;
+  bool is_redirect_all;
+  bool is_set_index_doc;
   RGWBWRoutingRules routing_rules;
 
   RGWBucketWebsiteConf()
     : listing_enabled(false) {
+    is_redirect_all = false;
+    is_set_index_doc = false;
   }
 
   void encode(bufferlist& bl) const {
index ff64efca7223b82a5f219d8348d62147ee498428..f456ba710ee174b0cbf5aef9ff29f731c884db2e 100644 (file)
@@ -114,11 +114,13 @@ void decode_xml_obj(list<RGWBWRoutingRule>& l, XMLObj *obj)
 void RGWBucketWebsiteConf::decode_xml(XMLObj *obj) {
   XMLObj *o = obj->find_first("RedirectAllRequestsTo");
   if (o) {
+    is_redirect_all = true;
     RGWXMLDecoder::decode_xml("HostName", redirect_all.hostname, o, true);
     RGWXMLDecoder::decode_xml("Protocol", redirect_all.protocol, o);
   } else {
     o = obj->find_first("IndexDocument");
     if (o) {
+      is_set_index_doc = true;
       RGWXMLDecoder::decode_xml("Suffix", index_doc_suffix, o);
     }
     o = obj->find_first("ErrorDocument");