env_to_vec(args);
DEFINE_CONF_VARS(usage);
- common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
+ common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY,
+ CINIT_FLAG_NO_DEFAULT_CONFIG_FILE);
EntityName ename(*g_conf.name);
const char *me = argv[0];
}
// The defaults for CephInitParameters
-CephInitParameters::CephInitParameters(uint32_t module_type)
- : conf_file(CEPH_CONF_FILE_DEFAULT)
+CephInitParameters::CephInitParameters(uint32_t module_type, const char *conf_file_)
+ : conf_file(conf_file_)
{
- const char *conf_file_ = getenv("CEPH_CONF");
- if (conf_file_)
- conf_file = conf_file_;
+ const char *c = getenv("CEPH_CONF");
+ if (c)
+ conf_file = c;
name.set(module_type, "admin");
}
}
CephInitParameters ceph_argparse_early_args
- (std::vector<const char*>& args, uint32_t module_type)
+ (std::vector<const char*>& args, uint32_t module_type, int flags)
{
-
- CephInitParameters iparams(module_type);
+ const char *conf = (flags & CINIT_FLAG_NO_DEFAULT_CONFIG_FILE) ?
+ "" : CEPH_CONF_FILE_DEFAULT;
+ CephInitParameters iparams(module_type, conf);
std::string val;
for (std::vector<const char*>::iterator i = args.begin(); i != args.end(); ) {
if (strcmp(*i, "--") == 0)
class CephInitParameters
{
public:
- CephInitParameters(uint32_t module_type);
+ CephInitParameters(uint32_t module_type, const char *conf_file_);
std::list<std::string> get_conf_files() const;
std::string conf_file;
bool ceph_argparse_witharg(std::vector<const char*> &args,
std::vector<const char*>::iterator &i, std::string *ret, ...);
extern CephInitParameters ceph_argparse_early_args
- (std::vector<const char*>& args, uint32_t module_type);
+ (std::vector<const char*>& args, uint32_t module_type, int flags);
extern void generic_server_usage();
extern void generic_client_usage();
uint32_t module_type, code_environment_t code_env, int flags)
{
CephInitParameters iparams =
- ceph_argparse_early_args(args, module_type);
+ ceph_argparse_early_args(args, module_type, flags);
md_config_t *conf = common_preinit(iparams, code_env, flags);
int ret = conf->parse_config_files(iparams.get_conf_files());
derr << "common_init: error parsing config file." << dendl;
_exit(1);
}
+ else if (ret == -EINVAL) {
+ if (!(flags & CINIT_FLAG_NO_DEFAULT_CONFIG_FILE)) {
+ derr << "common_init: unable to open config file." << dendl;
+ _exit(1);
+ }
+ }
else if (ret) {
- derr << "common_init: unable to open config file." << dendl;
+ derr << "common_init: error reading config file." << dendl;
_exit(1);
}
enum common_init_flags_t {
// Set up defaults that make sense for an unprivileged deamon
CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS = 0x1,
+
+ // By default, don't read a configuration file
+ CINIT_FLAG_NO_DEFAULT_CONFIG_FILE = 0x2,
};
int keyring_init(md_config_t *conf);
return -EINVAL;
while (true) {
if (c == conf_files.end())
- return -EACCES;
+ return -EINVAL;
ConfFile *cf_ = new ConfFile(c->c_str());
cf_->set_post_process_func(conf_post_process_val);
int res = cf_->parse();
{
rados_init_mutex.Lock();
if (!rados_initialized) {
- CephInitParameters iparams(CEPH_ENTITY_TYPE_CLIENT);
+ CephInitParameters iparams(CEPH_ENTITY_TYPE_CLIENT, CEPH_CONF_FILE_DEFAULT);
iparams.conf_file = "";
if (id) {
iparams.name.set(CEPH_ENTITY_TYPE_CLIENT, id);
map<string,entity_addr_t> add;
list<string> rm;
+ common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY,
+ CINIT_FLAG_NO_DEFAULT_CONFIG_FILE);
FOR_EACH_ARG(args) {
if (CONF_ARG_EQ("print", '\0')) {
CONF_SAFE_SET_ARG_VAL(&print, OPT_BOOL);
env_to_vec(args);
DEFINE_CONF_VARS(usage);
- common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
+ common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY,
+ CINIT_FLAG_NO_DEFAULT_CONFIG_FILE);
const char *me = argv[0];