/* grab date */
const char *d = info.env->get("HTTP_X_AMZ_DATE");
+
struct tm t;
- if (!parse_iso8601(d, &t, NULL, false)) {
+ if (!d || !parse_iso8601(d, &t, NULL, false)) {
ldpp_dout(dpp, 10) << "error reading date via http_x_amz_date" << dendl;
return -EACCES;
}
return -ERR_REQUEST_TIME_SKEWED;
}
- if (info.env->exists("HTTP_X_AMZ_SECURITY_TOKEN")) {
- sessiontoken = info.env->get("HTTP_X_AMZ_SECURITY_TOKEN");
+ auto token = info.env->get_optional("HTTP_X_AMZ_SECURITY_TOKEN");
+ if (token) {
+ sessiontoken = *token;
}
return 0;
}; // RGWHTTPArgs
const char *rgw_conf_get(const std::map<std::string, std::string, ltstr_nocase>& conf_map, const char *name, const char *def_val);
+boost::optional<const std::string&> rgw_conf_get_optional(const std::map<std::string, std::string, ltstr_nocase>& conf_map, const std::string& name);
int rgw_conf_get_int(const std::map<std::string, std::string, ltstr_nocase>& conf_map, const char *name, int def_val);
bool rgw_conf_get_bool(const std::map<std::string, std::string, ltstr_nocase>& conf_map, const char *name, bool def_val);
void init(CephContext *cct, char **envp);
void set(std::string name, std::string val);
const char *get(const char *name, const char *def_val = nullptr) const;
+ boost::optional<const std::string&>
+ get_optional(const std::string& name) 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) const;
return iter->second.c_str();
}
+boost::optional<const std::string&> rgw_conf_get_optional(const map<string, string, ltstr_nocase>& conf_map, const std::string& name)
+{
+ auto iter = conf_map.find(name);
+ if (iter == conf_map.end())
+ return boost::none;
+
+ return boost::optional<const std::string&>(iter->second);
+}
+
const char *RGWEnv::get(const char *name, const char *def_val) const
{
return rgw_conf_get(env_map, name, def_val);
}
+boost::optional<const std::string&>
+RGWEnv::get_optional(const std::string& name) const
+{
+ return rgw_conf_get_optional(env_map, name);
+}
+
int rgw_conf_get_int(const map<string, string, ltstr_nocase>& conf_map, const char *name, int def_val)
{
auto iter = conf_map.find(name);
JSONFormatter jf;
jf.open_object_section("");
jf.open_object_section("input");
- jf.dump_string("method", s->info.env->get("REQUEST_METHOD"));
+ const char *request_method = s->info.env->get("REQUEST_METHOD");
+ if (request_method) {
+ jf.dump_string("method", request_method);
+ }
jf.dump_string("relative_uri", s->relative_uri.c_str());
jf.dump_string("decoded_uri", s->decoded_uri.c_str());
jf.dump_string("params", s->info.request_params.c_str());
s->info.args.get_bool(RGW_SYS_PARAM_PREFIX "copy-if-newer", ©_if_newer, false);
}
- copy_source = s->info.env->get("HTTP_X_AMZ_COPY_SOURCE");
+ const char *copy_source_temp = s->info.env->get("HTTP_X_AMZ_COPY_SOURCE");
+ if (copy_source_temp) {
+ copy_source = copy_source_temp;
+ }
auto tmp_md_d = s->info.env->get("HTTP_X_AMZ_METADATA_DIRECTIVE");
if (tmp_md_d) {
if (strcasecmp(tmp_md_d, "COPY") == 0) {
signature = auth_str.substr(pos + 1);
}
- if (s->info.env->exists("HTTP_X_AMZ_SECURITY_TOKEN")) {
- session_token = s->info.env->get("HTTP_X_AMZ_SECURITY_TOKEN");
+ auto token = s->info.env->get_optional("HTTP_X_AMZ_SECURITY_TOKEN");
+ if (token) {
+ session_token = *token;
if (session_token.size() == 0) {
throw -EPERM;
}
if (!s->cct->_conf->rgw_swift_custom_header.empty()) {
string custom_header = s->cct->_conf->rgw_swift_custom_header;
- if (s->info.env->exists(custom_header.c_str())) {
- user_data = s->info.env->get(custom_header.c_str());
+ auto data = s->info.env->get_optional(custom_header);
+ if (data) {
+ user_data = *data;
}
}
if (swift_url.size() == 0) {
bool add_port = false;
- const char *server_port = s->info.env->get("SERVER_PORT_SECURE");
+ auto server_port = s->info.env->get_optional("SERVER_PORT_SECURE");
const char *protocol;
if (server_port) {
- add_port = (strcmp(server_port, "443") != 0);
+ add_port = (*server_port != "443");
protocol = "https";
} else {
- server_port = s->info.env->get("SERVER_PORT");
- add_port = (strcmp(server_port, "80") != 0);
+ server_port = s->info.env->get_optional("SERVER_PORT");
+ if (server_port) {
+ add_port = (*server_port != "80");
+ }
protocol = "http";
}
const char *host = s->info.env->get("HTTP_HOST");
swift_url.append(host);
if (add_port && !strchr(host, ':')) {
swift_url.append(":");
- swift_url.append(server_port);
+ swift_url.append(*server_port);
}
}