X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Frgw%2Frgw_env.cc;fp=src%2Fceph%2Fsrc%2Frgw%2Frgw_env.cc;h=bc195f71e76af405d333b46580d6ca747e10b9e9;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/rgw/rgw_env.cc b/src/ceph/src/rgw/rgw_env.cc new file mode 100644 index 0000000..bc195f7 --- /dev/null +++ b/src/ceph/src/rgw/rgw_env.cc @@ -0,0 +1,141 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#include "rgw_common.h" +#include "rgw_log.h" + +#include +#include +#include "include/assert.h" +#include "rgw_crypt_sanitize.h" + +#define dout_context g_ceph_context +#define dout_subsys ceph_subsys_rgw + +void RGWEnv::init(CephContext *cct) +{ + conf.init(cct, this); +} + +void RGWEnv::set(const boost::string_ref& name, const boost::string_ref& val) +{ + env_map[std::string{name}] = std::string{val}; +} + +void RGWEnv::init(CephContext *cct, char **envp) +{ + const char *p; + + env_map.clear(); + + for (int i=0; (p = envp[i]); ++i) { + string s(p); + int pos = s.find('='); + if (pos <= 0) // should never be 0 + continue; + string name = s.substr(0, pos); + string val = s.substr(pos + 1); + env_map[name] = val; + } + + init(cct); +} + +const char *rgw_conf_get(const map& conf_map, const char *name, const char *def_val) +{ + auto iter = conf_map.find(name); + if (iter == conf_map.end()) + return def_val; + + return iter->second.c_str(); +} + +const char *RGWEnv::get(const char *name, const char *def_val) const +{ + return rgw_conf_get(env_map, name, def_val); +} + +int rgw_conf_get_int(const map& conf_map, const char *name, int def_val) +{ + auto iter = conf_map.find(name); + if (iter == conf_map.end()) + return def_val; + + const char *s = iter->second.c_str(); + return atoi(s); +} + +int RGWEnv::get_int(const char *name, int def_val) const +{ + return rgw_conf_get_int(env_map, name, def_val); +} + +bool rgw_conf_get_bool(const map& conf_map, const char *name, bool def_val) +{ + auto iter = conf_map.find(name); + if (iter == conf_map.end()) + return def_val; + + const char *s = iter->second.c_str(); + return rgw_str_to_bool(s, def_val); +} + +bool RGWEnv::get_bool(const char *name, bool def_val) +{ + return rgw_conf_get_bool(env_map, name, def_val); +} + +size_t RGWEnv::get_size(const char *name, size_t def_val) const +{ + const auto iter = env_map.find(name); + if (iter == env_map.end()) + return def_val; + + size_t sz; + try{ + sz = stoull(iter->second); + } catch(...){ + /* it is very unlikely that we'll ever encounter out_of_range, but let's + return the default eitherway */ + sz = def_val; + } + + return sz; +} + +bool RGWEnv::exists(const char *name) const +{ + return env_map.find(name)!= env_map.end(); +} + +bool RGWEnv::exists_prefix(const char *prefix) const +{ + if (env_map.empty() || prefix == NULL) + return false; + + const auto iter = env_map.lower_bound(prefix); + if (iter == env_map.end()) + return false; + + return (strncmp(iter->first.c_str(), prefix, strlen(prefix)) == 0); +} + +void RGWEnv::remove(const char *name) +{ + map::iterator iter = env_map.find(name); + if (iter != env_map.end()) + env_map.erase(iter); +} + +void RGWConf::init(CephContext *cct, RGWEnv *env) +{ + enable_ops_log = cct->_conf->rgw_enable_ops_log; + enable_usage_log = cct->_conf->rgw_enable_usage_log; + + defer_to_bucket_acls = 0; // default + if (cct->_conf->rgw_defer_to_bucket_acls == "recurse") { + defer_to_bucket_acls = RGW_DEFER_TO_BUCKET_ACLS_RECURSE; + } else if (cct->_conf->rgw_defer_to_bucket_acls == "full_control") { + defer_to_bucket_acls = RGW_DEFER_TO_BUCKET_ACLS_FULL_CONTROL; + } +}