]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: do not clobber existing key with --mkkey
authorSage Weil <sage@inktank.com>
Sat, 19 May 2012 23:11:39 +0000 (16:11 -0700)
committerSage Weil <sage@inktank.com>
Wed, 23 May 2012 23:31:43 +0000 (16:31 -0700)
Signed-off-by: Sage Weil <sage@inktank.com>
src/ceph_osd.cc

index 57406e12ed69394fe4c1674d9881e28abae18f41..aa115d66e101e48b4718d92d346374ffe15c98a2 100644 (file)
@@ -185,18 +185,26 @@ int main(int argc, const char **argv)
       derr << "Unable to get a Ceph keyring." << dendl;
       return 1;
     }
+
     EntityName ename(g_conf->name);
     EntityAuth eauth;
-    eauth.key.create(g_ceph_context, CEPH_CRYPTO_AES);
-    keyring->add(ename, eauth);
-    bufferlist bl;
-    keyring->encode_plaintext(bl);
-    int r = bl.write_file(g_conf->keyring.c_str(), 0600);
-    if (r)
-      derr << TEXT_RED << " ** ERROR: writing new keyring to " << g_conf->keyring
-          << ": " << cpp_strerror(r) << TEXT_NORMAL << dendl;
-    else
-      derr << "created new key in keyring " << g_conf->keyring << dendl;
+
+    int ret = keyring->load(g_ceph_context, g_conf->keyring);
+    if (ret == 0 &&
+       keyring->get_auth(ename, eauth)) {
+      derr << "already have key in keyring " << g_conf->keyring << dendl;
+    } else {
+      eauth.key.create(g_ceph_context, CEPH_CRYPTO_AES);
+      keyring->add(ename, eauth);
+      bufferlist bl;
+      keyring->encode_plaintext(bl);
+      int r = bl.write_file(g_conf->keyring.c_str(), 0600);
+      if (r)
+       derr << TEXT_RED << " ** ERROR: writing new keyring to " << g_conf->keyring
+            << ": " << cpp_strerror(r) << TEXT_NORMAL << dendl;
+      else
+       derr << "created new key in keyring " << g_conf->keyring << dendl;
+    }
   }
   if (mkfs || mkkey)
     exit(0);