Merge pull request #30970 from theanalyst/rgw/list-common-prefix

rgw: url encode common prefixes for List Objects response 

Reviewed-by: Casey Bodley <cbodley@redhat.com>
This commit is contained in:
J. Eric Ivancich 2019-10-27 14:39:46 -04:00 committed by GitHub
commit 2d5bac020e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 15 deletions

View File

@ -867,7 +867,12 @@ void RGWListBucket_ObjStore_S3::send_common_versioned_response()
for (pref_iter = common_prefixes.begin();
pref_iter != common_prefixes.end(); ++pref_iter) {
s->formatter->open_array_section("CommonPrefixes");
if (encode_key) {
s->formatter->dump_string("Prefix", url_encode(pref_iter->first, false));
} else {
s->formatter->dump_string("Prefix", pref_iter->first);
}
s->formatter->close_section();
}
}
@ -876,6 +881,10 @@ void RGWListBucket_ObjStore_S3::send_common_versioned_response()
void RGWListBucket_ObjStore_S3::send_versioned_response()
{
s->formatter->open_object_section_in_ns("ListVersionsResult", XMLNS_AWS_S3);
if (strcasecmp(encoding_type.c_str(), "url") == 0) {
s->formatter->dump_string("EncodingType", "url");
encode_key = true;
}
RGWListBucket_ObjStore_S3::send_common_versioned_response();
s->formatter->dump_string("KeyMarker", marker.name);
s->formatter->dump_string("VersionIdMarker", marker.instance);
@ -888,11 +897,6 @@ void RGWListBucket_ObjStore_S3::send_versioned_response()
s->formatter->dump_string("NextVersionIdMarker", next_marker.instance);
}
}
bool encode_key = false;
if (strcasecmp(encoding_type.c_str(), "url") == 0) {
s->formatter->dump_string("EncodingType", "url");
encode_key = true;
}
if (op_ret >= 0) {
if (objs_container) {
@ -973,7 +977,11 @@ void RGWListBucket_ObjStore_S3::send_common_response()
for (pref_iter = common_prefixes.begin();
pref_iter != common_prefixes.end(); ++pref_iter) {
s->formatter->open_array_section("CommonPrefixes");
if (encode_key) {
s->formatter->dump_string("Prefix", url_encode(pref_iter->first, false));
} else {
s->formatter->dump_string("Prefix", pref_iter->first);
}
s->formatter->close_section();
}
}
@ -999,12 +1007,11 @@ void RGWListBucket_ObjStore_S3::send_response()
}
s->formatter->open_object_section_in_ns("ListBucketResult", XMLNS_AWS_S3);
RGWListBucket_ObjStore_S3::send_common_response();
bool encode_key = false;
if (strcasecmp(encoding_type.c_str(), "url") == 0) {
s->formatter->dump_string("EncodingType", "url");
encode_key = true;
}
RGWListBucket_ObjStore_S3::send_common_response();
if (op_ret >= 0) {
vector<rgw_bucket_dir_entry>::iterator iter;
for (iter = objs.begin(); iter != objs.end(); ++iter) {
@ -1053,7 +1060,6 @@ void RGWListBucket_ObjStore_S3v2::send_versioned_response()
s->formatter->dump_string("NextVersionIdContinuationToken", next_marker.instance);
}
bool encode_key = false;
if (strcasecmp(encoding_type.c_str(), "url") == 0) {
s->formatter->dump_string("EncodingType", "url");
encode_key = true;
@ -1118,7 +1124,12 @@ void RGWListBucket_ObjStore_S3v2::send_versioned_response()
for (pref_iter = common_prefixes.begin();
pref_iter != common_prefixes.end(); ++pref_iter) {
s->formatter->open_array_section("CommonPrefixes");
if (encode_key) {
s->formatter->dump_string("Prefix", url_encode(pref_iter->first, false));
} else {
s->formatter->dump_string("Prefix", pref_iter->first);
}
s->formatter->dump_int("KeyCount",objs.size());
if (start_after_exist) {
s->formatter->dump_string("StartAfter", startAfter);
@ -1152,13 +1163,12 @@ void RGWListBucket_ObjStore_S3v2::send_response()
}
s->formatter->open_object_section_in_ns("ListBucketResult", XMLNS_AWS_S3);
RGWListBucket_ObjStore_S3::send_common_response();
bool encode_key = false;
if (strcasecmp(encoding_type.c_str(), "url") == 0) {
s->formatter->dump_string("EncodingType", "url");
encode_key = true;
}
RGWListBucket_ObjStore_S3::send_common_response();
if (op_ret >= 0) {
vector<rgw_bucket_dir_entry>::iterator iter;
for (iter = objs.begin(); iter != objs.end(); ++iter) {

View File

@ -126,7 +126,9 @@ public:
};
class RGWListBucket_ObjStore_S3 : public RGWListBucket_ObjStore {
protected: bool objs_container;
protected:
bool objs_container;
bool encode_key {false};
int get_common_params();
void send_common_response();
void send_common_versioned_response();