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>
(cherry picked from commit
29bc434a6a81a2e5c5b8cfc4c8d5c82ca5bf538a)
.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), "
// 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,
+ g_conf().get_val<uint64_t>("rgw_max_listing_results"),
+ default_max);
}
void RGWListBucket::pre_exec()
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
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;
}
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;
}
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;
}