void req_info::init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_meta)
{
x_meta_map.clear();
+ crypt_attribute_map.clear();
for (const auto& kv: env->get_map()) {
const char *prefix;
} else {
x_meta_map[name_low] = val;
}
+ if (strncmp(name_low, "x-amz-server-side-encryption", 20) == 0) {
+ crypt_attribute_map[name_low] = val;
+ }
}
}
}
}
}
+bool rgw_set_amz_meta_header(
+ meta_map_t& x_meta_map,
+ const std::string& k,
+ const std::string& v,
+ rgw_set_action_if_set a)
+{
+ auto it { x_meta_map.find(k) };
+ bool r { it != x_meta_map.end() };
+ switch(a) {
+ default:
+ ceph_assert(a == 0);
+ case DISCARD:
+ break;
+ case APPEND:
+ if (r) {
+ std::string old { it->second };
+ boost::algorithm::trim_right(old);
+ old.append(",");
+ old.append(v);
+ x_meta_map[k] = old;
+ break;
+ }
+ /* fall through */
+ case OVERWRITE:
+ x_meta_map[k] = v;
+ }
+ return r;
+}
+
string rgw_string_unquote(const string& s)
{
if (s[0] != '"' || s.size() < 2)
const RGWEnv *env;
RGWHTTPArgs args;
meta_map_t x_meta_map;
+ meta_map_t crypt_attribute_map;
std::string host;
const char *method;
const std::string& k,
const std::string& v);
+enum rgw_set_action_if_set {
+ DISCARD=0, OVERWRITE, APPEND
+};
+
+bool rgw_set_amz_meta_header(
+ meta_map_t& x_meta_map,
+ const std::string& k,
+ const std::string& v, rgw_set_action_if_set f);
+
extern std::string rgw_string_unquote(const std::string& s);
extern void parse_csv_string(const std::string& ival, std::vector<std::string>& ovals);
extern int parse_key_value(std::string& in_str, std::string& key, std::string& val);