#define STATUS_ACCEPTED 1901
#define STATUS_NO_CONTENT 1902
#define STATUS_PARTIAL_CONTENT 1903
+#define STATUS_REDIRECT 1904
#define ERR_INVALID_BUCKET_NAME 2000
#define ERR_INVALID_OBJECT_NAME 2001
{ STATUS_ACCEPTED, 202, "Accepted" },
{ STATUS_NO_CONTENT, 204, "NoContent" },
{ STATUS_PARTIAL_CONTENT, 206, "" },
+ { STATUS_REDIRECT, 303, "" },
{ ERR_NOT_MODIFIED, 304, "NotModified" },
{ EINVAL, 400, "InvalidArgument" },
{ ERR_INVALID_REQUEST, 400, "InvalidRequest" },
bool data_pending;
string content_type;
RGWAccessControlPolicy policy;
- map<string, string> form_param;
map<string, bufferlist> attrs;
public:
}
}
-void dump_redirect(struct req_state *s, const char *url)
+void dump_redirect(struct req_state *s, const string& redirect)
{
- if (strlen(url) > 0) {
- dump_errno(s, 301);
- s->cio->print("Location: %s\n", url);
- }
+ if (redirect.empty())
+ return;
+
+ s->cio->print("Location: %s\n", redirect.c_str());
}
void dump_last_modified(struct req_state *s, time_t t)
extern void dump_bucket_from_state(struct req_state *s);
extern void dump_object_from_state(struct req_state *s);
extern void dump_uri_from_state(struct req_state *s);
-extern void dump_redirect(struct req_state *s, const char *url);
+extern void dump_redirect(struct req_state *s, const string& redirect);
extern void dump_pair(struct req_state *s, const char *key, const char *value);
extern bool is_valid_url(const char *url);
void RGWPostObj_ObjStore_S3::send_response()
{
- set_req_state_err(s, ret);
-
if (ret == 0 && parts.count("success_action_redirect")) {
string success_action_redirect;
part_str("success_action_redirect", &success_action_redirect);
- if (check_utf8(success_action_redirect.c_str(), success_action_redirect.size())) {
- dump_redirect(s, form_param["success_action_redirect"].c_str());
+ if (check_utf8(success_action_redirect.c_str(), success_action_redirect.size()) == 0) {
+ dump_redirect(s, success_action_redirect);
+ set_req_state_err(s, STATUS_REDIRECT);
+ dump_errno(s);
end_header(s, "text/plain");
return;
}
} else if (ret == 0 && parts.count("success_action_status")) {
- string status_string = form_param["success_action_status"];
+ string status_string;
+ part_str("success_action_status", &status_string);
int status_int;
if ( !(istringstream(status_string) >> status_int) )
status_int = 200;
} else {
dump_errno(s);
}
+ set_req_state_err(s, ret);
+
end_header(s);
if (ret < 0)
return;