}
-req_state::req_state(CephContext* _cct, RGWEnv* e, uint64_t id)
- : cct(_cct), info(_cct, e), id(id)
+req_state::req_state(CephContext* _cct, const RGWProcessEnv& penv,
+ RGWEnv* e, uint64_t id)
+ : cct(_cct), penv(penv), info(_cct, e), id(id)
{
enable_ops_log = e->get_enable_ops_log();
enable_usage_log = e->get_enable_usage_log();
class Background;
}
+struct RGWProcessEnv;
+
using ceph::crypto::MD5;
#define RGW_ATTR_PREFIX "user.rgw."
/** Store all the state necessary to complete and respond to an HTTP request*/
struct req_state : DoutPrefixProvider {
CephContext *cct;
+ const RGWProcessEnv& penv;
rgw::io::BasicClient *cio{nullptr};
http_op op{OP_UNKNOWN};
RGWOpType op_type{};
rgw::lua::Background* lua_background = nullptr;
rgw::sal::LuaManager* lua_manager = nullptr;
- req_state(CephContext* _cct, RGWEnv* e, uint64_t id);
+ req_state(CephContext* _cct, const RGWProcessEnv& penv, RGWEnv* e, uint64_t id);
~req_state();
return -EIO;
}
+ const RGWProcessEnv& penv = g_rgwlib->get_fe()->get_process()->get_env();
+
/* start */
std::string object_name = relative_object_name();
f->write_req =
- new RGWWriteRequest(g_rgwlib->get_driver(),
+ new RGWWriteRequest(g_rgwlib->get_driver(), penv,
g_rgwlib->get_driver()->get_user(fs->get_user()->user_id),
this, bucket_name(), object_name);
rc = g_rgwlib->get_fe()->start_req(f->write_req);
size_t bytes_written;
bool eio;
- RGWWriteRequest(rgw::sal::Driver* driver,
+ RGWWriteRequest(rgw::sal::Driver* driver, const RGWProcessEnv& penv,
std::unique_ptr<rgw::sal::User> _user,
RGWFileHandle* _fh, const std::string& _bname,
const std::string& _oname)
- : RGWLibContinuedReq(driver->ctx(), std::move(_user)),
+ : RGWLibContinuedReq(driver->ctx(), penv, std::move(_user)),
bucket_name(_bname), obj_name(_oname),
rgw_fh(_fh), filter(nullptr), timer_id(0), real_ofs(0),
bytes_written(0), eio(false) {
rgw_env.set("HTTP_HOST", "");
/* XXX and -then- bloat up req_state with string copies from it */
- req_state rstate(req->cct, &rgw_env, req->id);
+ req_state rstate(req->cct, env, &rgw_env, req->id);
req_state *s = &rstate;
// XXX fix this
req_state rstate;
public:
- RGWLibContinuedReq(CephContext* _cct,
+ RGWLibContinuedReq(CephContext* _cct, const RGWProcessEnv& penv,
std::unique_ptr<rgw::sal::User> _user)
: RGWLibRequest(_cct, std::move(_user)), io_ctx(),
- rstate(_cct, &io_ctx.get_env(), id)
+ rstate(_cct, penv, &io_ctx.get_env(), id)
{
io_ctx.init(_cct);
RGWEnv& rgw_env = client_io->get_env();
- req_state rstate(g_ceph_context, &rgw_env, req->id);
+ req_state rstate(g_ceph_context, penv, &rgw_env, req->id);
req_state *s = &rstate;
s->ratelimit_data = penv.ratelimiting->get_active();
virtual ~RGWProcess() = default;
+ const RGWProcessEnv& get_env() const { return env; }
+
virtual void run() = 0;
virtual void handle_request(const DoutPrefixProvider *dpp, RGWRequest *req) = 0;
}
TEST_F(IPPolicyTest, IPEnvironment) {
+ RGWProcessEnv penv;
// Unfortunately RGWCivetWeb is too tightly tied to civetweb to test RGWCivetWeb::init_env.
RGWEnv rgw_env;
rgw::sal::RadosStore store;
std::unique_ptr<rgw::sal::User> user = store.get_user(rgw_user());
rgw_env.set("REMOTE_ADDR", "192.168.1.1");
rgw_env.set("HTTP_HOST", "1.2.3.4");
- req_state rgw_req_state(cct.get(), &rgw_env, 0);
+ req_state rgw_req_state(cct.get(), penv, &rgw_env, 0);
rgw_req_state.set_user(user);
rgw_build_iam_environment(&store, &rgw_req_state);
auto ip = rgw_req_state.env.find("aws:SourceIp");