]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Monitor: keyring always on mon_data/keyring by default
authorJoao Eduardo Luis <joao.luis@inktank.com>
Mon, 11 Jun 2012 14:13:05 +0000 (15:13 +0100)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Wed, 20 Feb 2013 20:47:45 +0000 (20:47 +0000)
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
src/mon/Monitor.cc
src/mon/Monitor.h

index b28b205375f0d804c72f069191905b6cf1e2a113..cde3eb44d96d493d62f5f78096996f8f69ea4c15 100644 (file)
@@ -409,9 +409,9 @@ int Monitor::preinit()
     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);
@@ -421,7 +421,7 @@ int Monitor::preinit()
       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();
@@ -2839,6 +2839,28 @@ int Monitor::mkfs(bufferlist& osdmapbl)
   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;
@@ -2850,7 +2872,7 @@ void Monitor::extract_save_mon_key(KeyRing& keyring)
     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);
   }
 }
index a2395239db52d769c5598109a343b9bac525e3cd..e98ef5f8695a9285658e7d55687254fa33668165 100644 (file)
@@ -483,6 +483,7 @@ public:
   bool ms_handle_reset(Connection *con);
   void ms_handle_remote_reset(Connection *con) {}
 
+  int write_default_keyring(bufferlist& bl);
   void extract_save_mon_key(KeyRing& keyring);
 
   // features