]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix issues with 'enforce bounds' patch
authorJoao Eduardo Luis <joao@suse.de>
Thu, 29 Nov 2018 01:05:31 +0000 (01:05 +0000)
committerAbhishek Lekshmanan <abhishek@suse.com>
Fri, 4 Jan 2019 14:52:46 +0000 (15:52 +0100)
The patch to enforce bounds on max-keys/max-uploads/max-parts had a few
issues that would prevent us from compiling it. Instead of changing the
code provided by the submitter, we're addressing them in a separate
commit to maintain the DCO.

Signed-off-by: Joao Eduardo Luis <joao@suse.de>
Signed-off-by: Abhishek Lekshmanan <abhishek@suse.com>
(cherry picked from commit 29bc434a6a81a2e5c5b8cfc4c8d5c82ca5bf538a)
mimic specific fixes:
As the largeish change from master g_conf() isn't in mimic yet, use the g_conf
global structure, also make rgw_op use the value from req_info ceph context as
we do for all the requests

src/common/options.cc
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest.cc

index a543256d8ad33bafd12b66acd9b76c882eaa7193..d906d1d04e107f9df1cf576ce258c4564dc9dbcd 100644 (file)
@@ -6238,7 +6238,7 @@ std::vector<Option> get_rgw_options() {
     .set_default(1000)
     .set_min_max(1, 100000)
     .add_service("rgw")
-    .set_description("Upper bound on results in listing operations, ListBucket max-keys"),
+    .set_description("Upper bound on results in listing operations, ListBucket max-keys")
     .set_long_description("This caps the maximum permitted value for listing-like operations in RGW S3. "
                          "Affects ListBucket(max-keys), "
                          "ListBucketVersions(max-keys), "
index 509592943c67bb955b08a170c66438f046329122..1863d7933375b5e2cd969f3948857ba51350bfd5 100644 (file)
@@ -2383,7 +2383,9 @@ int RGWListBucket::parse_max_keys()
   // Bound min value of max-keys to '0'
   // Some S3 clients explicitly send max-keys=0 to detect if the bucket is
   // empty without listing any items.
-  op_ret = parse_value_and_bound(max_keys, &max, 0, g_conf()->rgw_max_listing_results, default_max);
+  return parse_value_and_bound(max_keys, max, 0,
+                       s->cct->_conf->get_val<uint64_t>("rgw_max_listing_results"),
+                       default_max);
 }
 
 void RGWListBucket::pre_exec()
index 57352ae8c1427167a239e8c5d2a577847a98de96..21bc8c7a6fb9978f5fef27a106d13b1707cc253d 100644 (file)
@@ -2235,11 +2235,16 @@ public:
   virtual const string name() { return "get_cluster_stat"; }
 };
 
-static inline int parse_value_and_bound(const string &input, long *output, const long lower_bound, const long upper_bound, const long default_val)
+static inline int parse_value_and_bound(
+    const string &input,
+    int &output,
+    const long lower_bound,
+    const long upper_bound,
+    const long default_val)
 {
   if (!input.empty()) {
     char *endptr;
-    *output = strtol(input.c_str(), &endptr, 10);
+    output = strtol(input.c_str(), &endptr, 10);
     if (endptr) {
       if (endptr == input.c_str()) return -EINVAL;
       while (*endptr && isspace(*endptr)) // ignore white space
@@ -2248,14 +2253,14 @@ static inline int parse_value_and_bound(const string &input, long *output, const
         return -EINVAL;
       }
     }
-    if(*output > upper_bound) {
-      *output = upper_bound;
+    if(output > upper_bound) {
+      output = upper_bound;
     }
-    if(*output < lower_bound) {
-      *output = lower_bound;
+    if(output < lower_bound) {
+      output = lower_bound;
     }
   } else {
-    *output = default_val;
+    output = default_val;
   }
 
   return 0;
index c87192d5674b82e4f9e3673fa9a9d582c59263a6..fdb1a713efe0e29f45249b8729f3c2e6c123c498 100644 (file)
@@ -1588,7 +1588,9 @@ int RGWListMultipart_ObjStore::get_params()
   }
   
   string str = s->info.args.get("max-parts");
-  op_ret = parse_value_and_bound(str, &max_parts, 0, g_conf()->rgw_max_listing_results, max_parts);
+  op_ret = parse_value_and_bound(str, max_parts, 0,
+                                 g_conf->get_val<uint64_t>("rgw_max_listing_results"),
+                                 max_parts);
 
   return op_ret;
 }
@@ -1598,7 +1600,9 @@ int RGWListBucketMultiparts_ObjStore::get_params()
   delimiter = s->info.args.get("delimiter");
   prefix = s->info.args.get("prefix");
   string str = s->info.args.get("max-uploads");
-  op_ret = parse_value_and_bound(str, &max_uploads, 0, g_conf()->rgw_max_listing_results, default_max);
+  op_ret = parse_value_and_bound(str, max_uploads, 0,
+                       g_conf->get_val<uint64_t>("rgw_max_listing_results"),
+                       default_max);
   if (op_ret < 0) {
     return op_ret;
   }