diff options
author | Yehuda Sadeh <yehuda@inktank.com> | 2013-05-29 13:50:50 -0700 |
---|---|---|
committer | Yehuda Sadeh <yehuda@inktank.com> | 2013-05-29 13:50:50 -0700 |
commit | 45873b57f05482582c74c9a82851a67801d8e32e (patch) | |
tree | 93cf96cb381f7b42905f1ace0bec087332adc190 | |
parent | 81a9608640aeae878cb27b4d6a78cde0e4b02151 (diff) | |
download | ceph-45873b57f05482582c74c9a82851a67801d8e32e.tar.gz |
rgw: verify bucket location only if exists
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r-- | src/rgw/rgw_op.cc | 10 | ||||
-rw-r--r-- | src/rgw/rgw_rados.cc | 9 |
2 files changed, 9 insertions, 10 deletions
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 1fc9229ebc7..a1b46bcefbd 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -298,10 +298,14 @@ static int rgw_build_policies(RGWRados *store, struct req_state *s, bool only_bu RGWBucketInfo bucket_info; if (s->bucket_name_str.size()) { + bool exists = true; ret = store->get_bucket_info(s->obj_ctx, s->bucket_name_str, bucket_info, &s->objv_tracker); if (ret < 0) { - ldout(s->cct, 0) << "NOTICE: couldn't get bucket from bucket_name (name=" << s->bucket_name_str << ")" << dendl; - return ret; + if (ret != -ENOENT) { + ldout(s->cct, 0) << "NOTICE: couldn't get bucket from bucket_name (name=" << s->bucket_name_str << ")" << dendl; + return ret; + } + exists = false; } s->bucket = bucket_info.bucket; @@ -312,7 +316,7 @@ static int rgw_build_policies(RGWRados *store, struct req_state *s, bool only_bu s->bucket_owner = s->bucket_acl->get_owner(); string& region = bucket_info.region; - if ((region.empty() && !store->region.is_master) && + if (exists && (region.empty() && !store->region.is_master) && (region != store->region.name)) { ldout(s->cct, 0) << "NOTICE: request for data in a different region (" << region << " != " << store->region.name << ")" << dendl; return -ERR_PERMANENT_REDIRECT; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index c547f0d0375..73e0c48f6a8 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -3776,13 +3776,8 @@ int RGWRados::get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& inf int ret = rgw_get_system_obj(this, ctx, zone.domain_root, bucket_name, bl, objv_tracker, pattrs); if (ret < 0) { - if (ret != -ENOENT) - return ret; - - info.bucket.name = bucket_name; - info.bucket.data_pool = bucket_name; // for now - info.bucket.index_pool = bucket_name; // for now - return 0; + info.bucket.name = bucket_name; /* only init this field */ + return ret; } bufferlist::iterator iter = bl.begin(); |