mirror of
https://github.com/ceph/ceph
synced 2025-02-20 17:37:29 +00:00
rgw: replace '+' with "%20" in canonical query string for s3 v4 auth.
( note: this patch modified: now replaces "+" with " ". mwatts@redhat.com ) Fixes: http://tracker.ceph.com/issues/20501 Signed-off-by: Zhang Shaowen <zhangshaowen@cmss.chinamobile.com>
This commit is contained in:
parent
50724db8e5
commit
8ef21a05e6
@ -501,15 +501,22 @@ static inline std::string aws4_uri_recode(const boost::string_view& src)
|
||||
|
||||
std::string get_v4_canonical_qs(const req_info& info, const bool using_qs)
|
||||
{
|
||||
if (info.request_params.empty()) {
|
||||
const std::string *params = &info.request_params;
|
||||
std::string copy_params;
|
||||
if (params->empty()) {
|
||||
/* Optimize the typical flow. */
|
||||
return std::string();
|
||||
}
|
||||
if (params->find_first_of('+') != std::string::npos) {
|
||||
copy_params = *params;
|
||||
boost::replace_all(copy_params, "+", " ");
|
||||
params = ©_params;
|
||||
}
|
||||
|
||||
/* Handle case when query string exists. Step 3 described in: http://docs.
|
||||
* aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html */
|
||||
std::map<std::string, std::string> canonical_qs_map;
|
||||
for (const auto& s : get_str_vec<5>(info.request_params, "&")) {
|
||||
for (const auto& s : get_str_vec<5>(*params, "&")) {
|
||||
boost::string_view key, val;
|
||||
const auto parsed_pair = parse_key_value(s);
|
||||
if (parsed_pair) {
|
||||
|
Loading…
Reference in New Issue
Block a user