]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/Monitor.cc: attempt to decode and extract keyring only if it is found.
authorPiotr Dałek <piotr.dalek@ts.fujitsu.com>
Thu, 12 Nov 2015 09:09:46 +0000 (10:09 +0100)
committerPiotr Dałek <piotr.dalek@ts.fujitsu.com>
Mon, 7 Dec 2015 13:26:37 +0000 (14:26 +0100)
Monitor::preinit wrongly assumes that keyring always exists. This worked
so far because the logic that followed made this error invisible.
Change the logic so no attempt is taken to decode empty bufferlist, and
in turn - to extract_save_mon_key from empty keyring.

Signed-off-by: Piotr Dałek <piotr.dalek@ts.fujitsu.com>
src/mon/Monitor.cc

index e99f151a0019072431c3d2b1d982798c2298e53b..935792fb54bbeb124a667a5f2dbda803b2017b6d 100644 (file)
@@ -674,11 +674,14 @@ int Monitor::preinit()
     if (authmon()->get_last_committed() == 0) {
       dout(10) << "loading initial keyring to bootstrap authentication for mkfs" << dendl;
       bufferlist bl;
-      store->get("mkfs", "keyring", bl);
-      KeyRing keyring;
-      bufferlist::iterator p = bl.begin();
-      ::decode(keyring, p);
-      extract_save_mon_key(keyring);
+      int err = store->get("mkfs", "keyring", bl);
+      if (err == 0 && bl.length() > 0) {
+        // Attempt to decode and extract keyring only if it is found.
+        KeyRing keyring;
+        bufferlist::iterator p = bl.begin();
+        ::decode(keyring, p);
+        extract_save_mon_key(keyring);
+      }
     }
 
     string keyring_loc = g_conf->mon_data + "/keyring";