summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-05-29 13:50:50 -0700
committerYehuda Sadeh <yehuda@inktank.com>2013-05-29 13:50:50 -0700
commit45873b57f05482582c74c9a82851a67801d8e32e (patch)
tree93cf96cb381f7b42905f1ace0bec087332adc190
parent81a9608640aeae878cb27b4d6a78cde0e4b02151 (diff)
downloadceph-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.cc10
-rw-r--r--src/rgw/rgw_rados.cc9
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();