req_state::req_state(CephContext *_cct, struct RGWEnv *e) : cct(_cct), cio(NULL), op(OP_UNKNOWN),
- bucket_cors(NULL), has_acl_header(false),
+ has_acl_header(false),
os_auth_token(NULL), info(_cct, e)
{
enable_ops_log = e->conf->enable_ops_log;
req_state::~req_state() {
delete formatter;
delete bucket_acl;
- delete bucket_cors;
delete object_acl;
free((void *)object);
free((void *)bucket_name);
*max_age = rule->get_max_age();
}
-int RGWOptionsCORS::validate_cors_request() {
- RGWCORSConfiguration *cc = s->bucket_cors;
+int RGWOptionsCORS::validate_cors_request(RGWCORSConfiguration *cc) {
rule = cc->host_name_rule(origin);
if (!rule) {
dout(10) << "There is no corsrule present for " << origin << dendl;
void RGWOptionsCORS::execute()
{
- if (!s->bucket_cors) {
+ RGWCORSConfiguration bucket_cors;
+ bool cors_exist;
+ ret = read_bucket_cors(store, s, &bucket_cors, &cors_exist);
+ if (ret < 0)
+ return;
+
+ if (!cors_exist) {
dout(2) << "No CORS configuration set yet for this bucket" << dendl;
- ret = -EACCES;
+ ret = -ENOENT;
return;
}
req_meth = s->info.env->get("HTTP_ACCESS_CONTROL_REQUEST_METHOD");
return;
}
req_hdrs = s->info.env->get("HTTP_ACCESS_CONTROL_ALLOW_HEADERS");
- ret = validate_cors_request();
+ ret = validate_cors_request(&bucket_cors);
if (!rule) {
origin = req_meth = NULL;
return;
}
int verify_permission() {return 0;}
- int validate_cors_request();
+ int validate_cors_request(RGWCORSConfiguration *cc);
void execute();
void get_response_params(string& allowed_hdrs, string& exp_hdrs, unsigned *max_age);
virtual void send_response() = 0;