map<string, string>& meta_map = info.x_meta_map;
map<string, string>& sub_resources = info.args.get_sub_resources();
+ string request_uri;
+ if (info.effective_uri.empty())
+ request_uri = info.request_uri;
+ else
+ request_uri = info.effective_uri;
+
rgw_create_s3_canonical_header(info.method, content_md5, content_type, date.c_str(),
- meta_map, info.request_uri.c_str(), sub_resources,
+ meta_map, request_uri.c_str(), sub_resources,
dest);
return true;
{
method = src.method;
script_uri = src.script_uri;
- request_uri = src.request_uri;
+ if (src.effective_uri.empty()) {
+ request_uri = src.request_uri;
+ } else {
+ request_uri = src.effective_uri;
+ }
+ effective_uri.clear();
host = src.host;
x_meta_map = src.x_meta_map;
const char *method;
string script_uri;
string request_uri;
+ string effective_uri;
string request_params;
req_info(CephContext *cct, RGWEnv *_env);
int format;
ceph::Formatter *formatter;
string decoded_uri;
- string effective_uri;
+ string relative_uri;
const char *length;
uint64_t content_length;
map<string, string> generic_attrs;
if (*init_error < 0)
return NULL;
- RGWRESTMgr *m = mgr.get_resource_mgr(s, s->decoded_uri, &s->effective_uri);
+ RGWRESTMgr *m = mgr.get_resource_mgr(s, s->decoded_uri, &s->relative_uri);
if (!m) {
*init_error = -ERR_METHOD_NOT_ALLOWED;
return NULL;
new_info.script_uri = "/";
new_info.script_uri.append(resource);
new_info.request_uri = new_info.script_uri;
+ new_info.effective_uri = new_info.effective_uri;
map<string, string>& m = new_env.get_map();
map<string, bufferlist>::iterator bliter;
new_info.script_uri = "/";
new_info.script_uri.append(resource);
new_info.request_uri = new_info.script_uri;
+ new_info.effective_uri = new_info.effective_uri;
new_info.init_meta_info(NULL);
string req;
string first;
- const char *req_name = s->effective_uri.c_str();
+ const char *req_name = s->relative_uri.c_str();
const char *p;
if (*req_name == '?') {
s->bucket_name_str = first;
s->bucket_name = strdup(s->bucket_name_str.c_str());
+
+ s->info.effective_uri = "/" + s->bucket_name_str;
+
if (req.size()) {
s->object_str = req;
s->object = strdup(s->object_str.c_str());
+ s->info.effective_uri.append("/" + s->object_str);
}
+
return 0;
}