STR_LEN_ENTRY("HTTP_X_ACCOUNT_"),
{NULL, 0} };
-void req_info::init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_meta)
+void req_info::init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_meta, const int prot_flags)
{
x_meta_map.clear();
crypt_attribute_map.clear();
if (found_bad_meta && strncmp(name, "META_", name_len) == 0)
*found_bad_meta = true;
- stringstream ss;
- ss << meta_prefixes[0].str + 5 /* skip HTTP_ */ << name;
- string name_low = lowercase_dash_underscore_http_attr(ss.str());
+ string name_low = lowercase_dash_http_attr(string(meta_prefixes[0].str + 5) + name,
+ !(prot_flags & RGW_REST_SWIFT));
auto it = x_meta_map.find(name_low);
if (it != x_meta_map.end()) {
}
}
-/*
- * make attrs look-like_this
- * converts underscores to dashes, and dashes to underscores
- */
-string lowercase_dash_underscore_http_attr(const string& orig)
-{
- const char *s = orig.c_str();
- char buf[orig.size() + 1];
- buf[orig.size()] = '\0';
-
- for (size_t i = 0; i < orig.size(); ++i, ++s) {
- switch (*s) {
- case '_':
- buf[i] = '-';
- break;
- case '-':
- buf[i] = '_';
- break;
- default:
- buf[i] = tolower(*s);
- }
- }
- return string(buf);
-}
-
/*
* make attrs look-like-this
* converts underscores to dashes
*/
-string lowercase_dash_http_attr(const string& orig)
+string lowercase_dash_http_attr(const string& orig, bool bidirection)
{
const char *s = orig.c_str();
char buf[orig.size() + 1];
case '_':
buf[i] = '-';
break;
- default:
- buf[i] = tolower(*s);
- }
- }
- return string(buf);
-}
-
-/*
- * make attrs Look-Like-This or Look_Like_This
- * converts attrs to camelcase
- */
-string camelcase_http_attr(const string& orig)
-{
- const char *s = orig.c_str();
- char buf[orig.size() + 1];
- buf[orig.size()] = '\0';
-
- bool last_sep = true;
-
- for (size_t i = 0; i < orig.size(); ++i, ++s) {
- switch (*s) {
- case '_':
case '-':
- buf[i] = *s;
- last_sep = true;
+ if (bidirection)
+ buf[i] = '_';
+ else
+ buf[i] = tolower(*s);
break;
default:
- if (last_sep) {
- buf[i] = toupper(*s);
- } else {
- buf[i] = tolower(*s);
- }
- last_sep = false;
+ buf[i] = tolower(*s);
}
}
return string(buf);
* make attrs Look-Like-This
* converts underscores to dashes
*/
-string camelcase_dash_http_attr(const string& orig)
+string camelcase_dash_http_attr(const string& orig, bool convert2dash)
{
const char *s = orig.c_str();
char buf[orig.size() + 1];
switch (*s) {
case '_':
case '-':
- buf[i] = '-';
+ buf[i] = convert2dash ? '-' : *s;
last_sep = true;
break;
default:
req_info(CephContext *cct, const RGWEnv *env);
void rebuild_from(const req_info& src);
- void init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_meta);
+ void init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_meta, const int prot_flags);
};
struct req_init_state {
extern bool match_policy(std::string_view pattern, std::string_view input,
uint32_t flag);
-extern std::string camelcase_dash_http_attr(const std::string& orig);
-extern std::string camelcase_http_attr(const std::string& orig);
-extern std::string lowercase_dash_http_attr(const std::string& orig);
-extern std::string lowercase_dash_underscore_http_attr(const std::string& orig);
+extern std::string camelcase_dash_http_attr(const std::string& orig, bool convert2dash = true);
+extern std::string lowercase_dash_http_attr(const std::string& orig, bool bidirection = false);
void rgw_setup_saved_curl_handles();
void rgw_release_all_curl_handles();
}
s->op = op_from_method(info.method);
- info.init_meta_info(s, &s->has_bad_meta);
-
return 0;
}
return nullptr;
}
+ s->info.init_meta_info(s, &s->has_bad_meta, s->prot_flags);
+
return handler;
} /* get stream handler */
dump_header(s, geniter->second, iter->second);
} else if (strncmp(name, RGW_ATTR_META_PREFIX, PREFIX_LEN) == 0) {
dump_header_prefixed(s, "X-Account-Meta-",
- camelcase_http_attr(name + PREFIX_LEN),
+ camelcase_dash_http_attr(name + PREFIX_LEN, false),
iter->second);
}
}
dump_header(s, geniter->second, iter->second);
} else if (strncmp(name, RGW_ATTR_META_PREFIX, PREFIX_LEN) == 0) {
dump_header_prefixed(s, "X-Container-Meta-",
- camelcase_http_attr(name + PREFIX_LEN),
+ camelcase_dash_http_attr(name + PREFIX_LEN, false),
iter->second);
}
}
if (prefix_len > 0) {
string name(RGW_ATTR_META_PREFIX);
- name.append(lowercase_dash_underscore_http_attr(p + prefix_len));
+ /* For backward compatibility */
+ name.append(lowercase_dash_http_attr(p + prefix_len, true));
+ rmattr_names.insert(name);
+
+ name = RGW_ATTR_META_PREFIX;
+ name.append(lowercase_dash_http_attr(p + prefix_len, false));
rmattr_names.insert(name);
}
}
sizeof(RGW_ATTR_META_PREFIX)-1) == 0) {
name += sizeof(RGW_ATTR_META_PREFIX) - 1;
dump_header_prefixed(s, "X-Object-Meta-",
- camelcase_http_attr(name), kv.second);
+ camelcase_dash_http_attr(name, false), kv.second);
}
}