const char *http_header;
};
-static const char *get_acl_header(RGWEnv *env,
+static const char *get_acl_header(const RGWEnv *env,
const struct s3_acl_header *perm)
{
const char *header = perm->http_header;
return 0;
}
-static int parse_acl_header(RGWRados *store, RGWEnv *env,
+static int parse_acl_header(RGWRados *store, const RGWEnv *env,
const struct s3_acl_header *perm, std::list<ACLGrant>& _grants)
{
std::list<string> grantees;
{0, NULL}
};
-int RGWAccessControlPolicy_S3::create_from_headers(RGWRados *store, RGWEnv *env, ACLOwner& _owner)
+int RGWAccessControlPolicy_S3::create_from_headers(RGWRados *store, const RGWEnv *env, ACLOwner& _owner)
{
std::list<ACLGrant> grants;
owner = _owner;
return ret;
}
- int create_from_headers(RGWRados *store, RGWEnv *env, ACLOwner& _owner);
+ int create_from_headers(RGWRados *store, const RGWEnv *env, ACLOwner& _owner);
};
/**
return request_uri.substr(beg_pos, len - beg_pos);
}
-req_info::req_info(CephContext *cct, class RGWEnv *e) : env(e) {
+req_info::req_info(CephContext *cct, const class RGWEnv *env) : env(env) {
method = env->get("REQUEST_METHOD", "");
script_uri = env->get("SCRIPT_URI", cct->_conf->rgw_script_uri.c_str());
request_uri = env->get("REQUEST_URI", cct->_conf->rgw_request_uri.c_str());
{
x_meta_map.clear();
- map<string, string, ltstr_nocase>& m = env->get_map();
- map<string, string, ltstr_nocase>::iterator iter;
- for (iter = m.begin(); iter != m.end(); ++iter) {
+ for (const auto& kv: env->get_map()) {
const char *prefix;
- const string& header_name = iter->first;
- const string& val = iter->second;
+ const string& header_name = kv.first;
+ const string& val = kv.second;
for (int prefix_num = 0; (prefix = meta_prefixes[prefix_num].str) != NULL; prefix_num++) {
int len = meta_prefixes[prefix_num].len;
const char *p = header_name.c_str();
}
name_low[j] = 0;
- map<string, string>::iterator iter;
- iter = x_meta_map.find(name_low);
- if (iter != x_meta_map.end()) {
- string old = iter->second;
- int pos = old.find_last_not_of(" \t"); /* get rid of any whitespaces after the value */
- old = old.substr(0, pos + 1);
+ auto it = x_meta_map.find(name_low);
+ if (it != x_meta_map.end()) {
+ string old = it->second;
+ boost::algorithm::trim_right(old);
old.append(",");
old.append(val);
x_meta_map[name_low] = old;
}
}
}
- for (iter = x_meta_map.begin(); iter != x_meta_map.end(); ++iter) {
- dout(10) << "x>> " << iter->first << ":" << rgw::crypt_sanitize::x_meta_map{iter->first, iter->second} << dendl;
+ for (const auto& kv: x_meta_map) {
+ dout(10) << "x>> " << kv.first << ":" << rgw::crypt_sanitize::x_meta_map{kv.first, kv.second} << dendl;
}
}
void init(CephContext *cct);
void init(CephContext *cct, char **envp);
void set(const boost::string_ref& name, const boost::string_ref& val);
- const char *get(const char *name, const char *def_val = NULL);
- int get_int(const char *name, int def_val = 0);
+ const char *get(const char *name, const char *def_val = nullptr) const;
+ int get_int(const char *name, int def_val = 0) const;
bool get_bool(const char *name, bool def_val = 0);
- size_t get_size(const char *name, size_t def_val = 0);
- bool exists(const char *name);
- bool exists_prefix(const char *prefix);
+ size_t get_size(const char *name, size_t def_val = 0) const;
+ bool exists(const char *name) const;
+ bool exists_prefix(const char *prefix) const;
void remove(const char *name);
- std::map<string, string, ltstr_nocase>& get_map() { return env_map; }
+ const std::map<string, string, ltstr_nocase>& get_map() const { return env_map; }
};
enum http_op {
struct req_info {
- RGWEnv *env;
+ const RGWEnv *env;
RGWHTTPArgs args;
map<string, string> x_meta_map;
string request_params;
string domain;
- req_info(CephContext *cct, RGWEnv *_env);
+ req_info(CephContext *cct, const RGWEnv *env);
void rebuild_from(req_info& src);
void init_meta_info(bool *found_bad_meta);
};
};
static boost::string_view get_crypt_attribute(
- RGWEnv* env,
+ const RGWEnv* env,
std::map<std::string,
RGWPostObj_ObjStore::post_form_part,
const ltstr_nocase>* parts,
return iter->second.c_str();
}
-const char *RGWEnv::get(const char *name, const char *def_val)
+const char *RGWEnv::get(const char *name, const char *def_val) const
{
return rgw_conf_get(env_map, name, def_val);
}
return atoi(s);
}
-int RGWEnv::get_int(const char *name, int def_val)
+int RGWEnv::get_int(const char *name, int def_val) const
{
return rgw_conf_get_int(env_map, name, def_val);
}
return rgw_conf_get_bool(env_map, name, def_val);
}
-size_t RGWEnv::get_size(const char *name, size_t def_val)
+size_t RGWEnv::get_size(const char *name, size_t def_val) const
{
- map<string, string, ltstr_nocase>::iterator iter = env_map.find(name);
+ const auto iter = env_map.find(name);
if (iter == env_map.end())
return def_val;
- const char *s = iter->second.c_str();
- return atoll(s);
+ size_t sz;
+ try{
+ sz = stoull(iter->second);
+ } catch(...){
+ /* it is very unlikely that we'll ever encounter out_of_range, but let's
+ return the default eitherway */
+ sz = def_val;
+ }
+
+ return sz;
}
-bool RGWEnv::exists(const char *name)
+bool RGWEnv::exists(const char *name) const
{
- map<string, string, ltstr_nocase>::iterator iter = env_map.find(name);
- return (iter != env_map.end());
+ return env_map.find(name)!= env_map.end();
}
-bool RGWEnv::exists_prefix(const char *prefix)
+bool RGWEnv::exists_prefix(const char *prefix) const
{
if (env_map.empty() || prefix == NULL)
return false;
- map<string, string, ltstr_nocase>::iterator iter = env_map.lower_bound(prefix);
+ const auto iter = env_map.lower_bound(prefix);
if (iter == env_map.end())
return false;
return 0;
}
- map<string, string, ltstr_nocase>& m = env.get_map();
-
if (cct->_conf->subsys.should_gather(ceph_subsys_rgw, 20)) {
- map<string, string>::iterator i;
- for (i = m.begin(); i != m.end(); ++i) {
- ldout(cct, 20) << "> " << i->first << " -> " << rgw::crypt_sanitize::x_meta_map{i->first, i->second} << dendl;
+ for (const auto& i: env.get_map()) {
+ ldout(cct, 20) << "> " << i.first << " -> " << rgw::crypt_sanitize::x_meta_map{i.first, i.second} << dendl;
}
}
string auth_hdr = "AWS " + key.id + ":" + digest;
ldout(cct, 15) << "generated auth header: " << auth_hdr << dendl;
- m["AUTHORIZATION"] = auth_hdr;
+ env.set("AUTHORIZATION", auth_hdr);
return 0;
}
return ret;
}
- map<string, string, ltstr_nocase>& m = new_env.get_map();
- map<string, string>::iterator iter;
- for (iter = m.begin(); iter != m.end(); ++iter) {
- headers.push_back(pair<string, string>(iter->first, iter->second));
+ for (const auto& kv: new_env.get_map()) {
+ headers.emplace_back(kv);
}
map<string, string>& meta_map = new_info.x_meta_map;
- for (iter = meta_map.begin(); iter != meta_map.end(); ++iter) {
- headers.push_back(pair<string, string>(iter->first, iter->second));
+ for (const auto& kv: meta_map) {
+ headers.emplace_back(kv);
}
string params_str;
}
}
-static void add_grants_headers(map<int, string>& grants, map<string, string, ltstr_nocase>& attrs, map<string, string>& meta_map)
+static void add_grants_headers(map<int, string>& grants, RGWEnv& env, map<string, string>& meta_map)
{
struct grant_type_to_header *t;
for (t = grants_headers_def; t->header; t++) {
map<int, string>::iterator iter = grants.find(t->type);
if (iter != grants.end()) {
- attrs[t->header] = iter->second;
+ env.set(t->header,iter->second);
meta_map[t->header] = iter->second;
}
}
new_info.script_uri.append(resource);
new_info.request_uri = new_info.script_uri;
- map<string, string, ltstr_nocase>& m = new_env.get_map();
- map<string, bufferlist>::iterator bliter;
-
/* merge send headers */
- for (bliter = attrs.begin(); bliter != attrs.end(); ++bliter) {
- bufferlist& bl = bliter->second;
- const string& name = bliter->first;
+ for (auto& attr: attrs) {
+ bufferlist& bl = attr.second;
+ const string& name = attr.first;
string val = bl.c_str();
if (name.compare(0, sizeof(RGW_ATTR_META_PREFIX) - 1, RGW_ATTR_META_PREFIX) == 0) {
string header_name = RGW_AMZ_META_PREFIX;
header_name.append(name.substr(sizeof(RGW_ATTR_META_PREFIX) - 1));
- m[header_name] = val;
+ new_env.set(header_name, val);
new_info.x_meta_map[header_name] = val;
}
}
ACLPermission& perm = grant.get_permission();
grants_by_type_add_perm(grants_by_type, perm.get_permissions(), grant);
}
- add_grants_headers(grants_by_type, m, new_info.x_meta_map);
+ add_grants_headers(grants_by_type, new_env, new_info.x_meta_map);
ret = sign_request(key, new_env, new_info);
if (ret < 0) {
ldout(cct, 0) << "ERROR: failed to sign request" << dendl;
return ret;
}
- map<string, string>::iterator iter;
- for (iter = m.begin(); iter != m.end(); ++iter) {
- headers.push_back(pair<string, string>(iter->first, iter->second));
+ for (const auto& kv: new_env.get_map()) {
+ headers.emplace_back(kv);
}
cb = new RGWRESTStreamOutCB(this);
}
}
- map<string, string, ltstr_nocase>& m = new_env.get_map();
- map<string, string>::iterator iter;
- for (iter = m.begin(); iter != m.end(); ++iter) {
- headers.push_back(pair<string, string>(iter->first, iter->second));
+ for (const auto& kv: new_env.get_map()) {
+ headers.emplace_back(kv);
}
bool send_data_hint = false;
}
map<string, string> extra_headers;
if (info) {
- map<string, string, ltstr_nocase>& orig_map = info->env->get_map();
+ const auto& orig_map = info->env->get_map();
/* add original headers that start with HTTP_X_AMZ_ */
-#define SEARCH_AMZ_PREFIX "HTTP_X_AMZ_"
- for (map<string, string>::iterator iter = orig_map.lower_bound(SEARCH_AMZ_PREFIX); iter != orig_map.end(); ++iter) {
+ static constexpr char SEARCH_AMZ_PREFIX[] = "HTTP_X_AMZ_";
+ for (auto iter= orig_map.lower_bound(SEARCH_AMZ_PREFIX); iter != orig_map.end(); ++iter) {
const string& name = iter->first;
if (name == "HTTP_X_AMZ_DATE") /* dont forward date from original request */
continue;
- if (name.compare(0, sizeof(SEARCH_AMZ_PREFIX) - 1, "HTTP_X_AMZ_") != 0)
+ if (name.compare(0, strlen(SEARCH_AMZ_PREFIX), SEARCH_AMZ_PREFIX) != 0)
break;
extra_headers[iter->first] = iter->second;
}
const char * const del_prefix,
set<string>& rmattr_names)
{
- map<string, string, ltstr_nocase>& m = s->info.env->get_map();
- map<string, string, ltstr_nocase>::const_iterator iter;
const size_t put_prefix_len = strlen(put_prefix);
const size_t del_prefix_len = strlen(del_prefix);
- for (iter = m.begin(); iter != m.end(); ++iter) {
+ for (const auto& kv : s->info.env->get_map()) {
size_t prefix_len = 0;
- const char * const p = iter->first.c_str();
+ const char * const p = kv.first.c_str();
if (strncasecmp(p, del_prefix, del_prefix_len) == 0) {
/* Explicitly requested removal. */
prefix_len = del_prefix_len;
} else if ((strncasecmp(p, put_prefix, put_prefix_len) == 0)
- && iter->second.empty()) {
+ && kv.second.empty()) {
/* Removal requested by putting an empty value. */
prefix_len = put_prefix_len;
}