From: Matt Benjamin Date: Mon, 5 Oct 2015 15:13:19 +0000 (-0400) Subject: librgw: fixes for RGWListBucketRequest callback X-Git-Tag: v10.1.0~382^2~219 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f9382815a3048f0407d9cfc27d568ae3c06d075c;p=ceph.git librgw: fixes for RGWListBucketRequest callback The cached req_state is still not correct at RGWOp::execute(). Signed-off-by: Matt Benjamin --- diff --git a/src/rgw/librgw.cc b/src/rgw/librgw.cc index b4bd1c8001cf..3e42d2b10c4d 100644 --- a/src/rgw/librgw.cc +++ b/src/rgw/librgw.cc @@ -265,6 +265,8 @@ int RGWLibProcess::process_request(RGWLibRequest* req, RGWLibIO* io) goto done; } +#warning authorize step disabled (no cached perms) +#if 0 req->log(s, "verifying op permissions"); ret = op->verify_permission(); if (ret < 0) { @@ -275,6 +277,7 @@ int RGWLibProcess::process_request(RGWLibRequest* req, RGWLibIO* io) goto done; } } +#endif req->log(s, "verifying op params"); ret = op->verify_params(); diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 1f67bdf0a027..f438ba0fd7fb 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -309,9 +309,10 @@ int rgw_readdir(struct rgw_fs *rgw_fs, (void) librgw.get_fe()->execute_req(&req); } else { /* - RGWListBucketRequest req(cct, rgw_fs->user_id, uri, rcb, cb_arg, offset); - ... - */ + * bucket? + */ + uri += "/"; + RGWListBucketRequest req(cct, rgw_fs->user_id, uri, rcb, cb_arg, offset); (void) librgw.get_fe()->execute_req(&req); diff --git a/src/rgw/rgw_file.h b/src/rgw/rgw_file.h index b9fa80235838..4ee4f415714d 100644 --- a/src/rgw/rgw_file.h +++ b/src/rgw/rgw_file.h @@ -116,9 +116,10 @@ public: s->info.request_params = ""; s->info.domain = ""; /* XXX ? */ - /* XXX fake user_id (will fix) */ + /* XXX fake user_id and perms (will fix) */ s->user.user_id = user_id; s->user.display_name = user_id; + s->perm_mask = RGW_PERM_READ; return 0; } diff --git a/src/rgw/rgw_rest_lib.cc b/src/rgw/rgw_rest_lib.cc index 76132fd8423a..718ae9da157f 100644 --- a/src/rgw/rgw_rest_lib.cc +++ b/src/rgw/rgw_rest_lib.cc @@ -71,7 +71,7 @@ void RGWListBuckets_ObjStore_Lib::send_response_data(RGWUserBuckets& buckets) if (!sent_data) return; - // XXX we can improve this + // XXX if necessary, we can remove the need for dynamic_cast RGWListBucketsRequest* req = dynamic_cast(this); @@ -114,7 +114,12 @@ int RGWListBucket_ObjStore_Lib::get_params() void RGWListBucket_ObjStore_Lib::send_response() { + // XXX if necessary, we can remove the need for dynamic_cast + RGWListBucketRequest* req + = dynamic_cast(this); + for (const auto& iter : objs) { - // XXXX cb(iter.key.name, iter.key.name); // XXX marker, attributes + /* call me maybe */ + req->operator()(iter.key.name, iter.key.name); // XXX attributes } } diff --git a/src/test/librgw_file.cc b/src/test/librgw_file.cc index 3769de8c4063..08890d2924d4 100644 --- a/src/test/librgw_file.cc +++ b/src/test/librgw_file.cc @@ -98,7 +98,8 @@ TEST(LibRGW, LIST_OBJECTS) { for (auto& fid : fids1) { std::cout << "readdir in bucket " << get<0>(fid) << std::endl; bool eof = false; - int ret = rgw_readdir(fs, get<2>(fid), 0 /* offset */, r2_cb, &fids2, + uint64_t offset = 0; + int ret = rgw_readdir(fs, get<2>(fid), &offset, r2_cb, &fids2, &eof); for (auto& fid2 : fids2) { std::cout << "fname: " << get<0>(fid2) << " fid: " << get<1>(fid2)