From: RickyMaRui <140392518+RickyMaRui@users.noreply.github.com> Date: Tue, 19 Sep 2023 09:10:52 +0000 (+0800) Subject: rgw: fix SignatureDoesNotMatch when extra headers X-Git-Tag: v17.2.7~31^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ff1103a44f56ae8dace83da605388500db748cc0;p=ceph.git rgw: fix SignatureDoesNotMatch when extra headers Headers start with 'x-amz' but not 'x-amz-', should not be in the list of CanonicalHeaders. Signed-off-by: rui ma (cherry picked from commit aed8d4681ddf2311d18124cc64dd2b64102608c0) --- diff --git a/src/rgw/rgw_common.cc b/src/rgw/rgw_common.cc index 5c51edac9b4a..5c7224f8735d 100644 --- a/src/rgw/rgw_common.cc +++ b/src/rgw/rgw_common.cc @@ -381,13 +381,13 @@ struct str_len { #define STR_LEN_ENTRY(s) { s, sizeof(s) - 1 } -struct str_len meta_prefixes[] = { STR_LEN_ENTRY("HTTP_X_AMZ"), - STR_LEN_ENTRY("HTTP_X_GOOG"), - STR_LEN_ENTRY("HTTP_X_DHO"), - STR_LEN_ENTRY("HTTP_X_RGW"), - STR_LEN_ENTRY("HTTP_X_OBJECT"), - STR_LEN_ENTRY("HTTP_X_CONTAINER"), - STR_LEN_ENTRY("HTTP_X_ACCOUNT"), +struct str_len meta_prefixes[] = { STR_LEN_ENTRY("HTTP_X_AMZ_"), + STR_LEN_ENTRY("HTTP_X_GOOG_"), + STR_LEN_ENTRY("HTTP_X_DHO_"), + STR_LEN_ENTRY("HTTP_X_RGW_"), + STR_LEN_ENTRY("HTTP_X_OBJECT_"), + STR_LEN_ENTRY("HTTP_X_CONTAINER_"), + STR_LEN_ENTRY("HTTP_X_ACCOUNT_"), {NULL, 0} }; void req_info::init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_meta) @@ -407,7 +407,7 @@ void req_info::init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_met const char *name = p+len; /* skip the prefix */ int name_len = header_name.size() - len; - if (found_bad_meta && strncmp(name, "_META_", name_len) == 0) + if (found_bad_meta && strncmp(name, "META_", name_len) == 0) *found_bad_meta = true; char name_low[meta_prefixes[0].len + name_len + 1];