From: Piotr Dałek Date: Thu, 12 Nov 2015 09:09:46 +0000 (+0100) Subject: mon/Monitor.cc: attempt to decode and extract keyring only if it is found. X-Git-Tag: v10.0.3~218^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bb4936aa61d809f8a72cb8d83846c9c48ebcf92e;p=ceph.git mon/Monitor.cc: attempt to decode and extract keyring only if it is found. 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 --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index e99f151a0019..935792fb54bb 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -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";