extract_save_mon_key(keyring);
}
- ostringstream os;
- os << g_conf->mon_data << "/keyring";
- int r = keyring.load(cct, os.str());
+ string keyring_loc = g_conf->mon_data + "/keyring";
+
+ int r = keyring.load(cct, keyring_loc);
if (r < 0) {
EntityName mon_name;
mon_name.set_type(CEPH_ENTITY_TYPE_MON);
keyring.add(mon_name, mon_key);
bufferlist bl;
keyring.encode_plaintext(bl);
- store->put_bl_ss(bl, "keyring", NULL);
+ write_default_keyring(bl);
} else {
derr << "unable to load initial keyring " << g_conf->keyring << dendl;
lock.Unlock();
return 0;
}
+int Monitor::write_default_keyring(bufferlist& bl)
+{
+ ostringstream os;
+ os << g_conf->mon_data << "/keyring";
+
+ int err = 0;
+ int fd = ::open(os.str().c_str(), O_WRONLY|O_CREAT, 0644);
+ if (fd < 0) {
+ err = -errno;
+ dout(0) << __func__ << " failed to open " << os.str()
+ << ": " << cpp_strerror(err) << dendl;
+ return err;
+ }
+
+ err = bl.write_fd(fd);
+ if (!err)
+ ::fsync(fd);
+ ::close(fd);
+
+ return err;
+}
+
void Monitor::extract_save_mon_key(KeyRing& keyring)
{
EntityName mon_name;
pkey.add(mon_name, mon_key);
bufferlist bl;
pkey.encode_plaintext(bl);
- store->put_bl_ss(bl, "keyring", NULL);
+ write_default_keyring(bl);
keyring.remove(mon_name);
}
}