summaryrefslogtreecommitdiff
path: root/src/ceph_osd.cc
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-05-19 16:11:39 -0700
committerSage Weil <sage@inktank.com>2012-05-23 16:31:43 -0700
commita980d018f059228df584c34f4130ed892d35431c (patch)
tree8a36ec04b01d14ab9c76a5b13ef42204d7d0748e /src/ceph_osd.cc
parentc18e4d80a1c6920bbc68680cc81d327749497ce6 (diff)
downloadceph-a980d018f059228df584c34f4130ed892d35431c.tar.gz
osd: do not clobber existing key with --mkkey
Signed-off-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'src/ceph_osd.cc')
-rw-r--r--src/ceph_osd.cc28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc
index 57406e12ed6..aa115d66e10 100644
--- a/src/ceph_osd.cc
+++ b/src/ceph_osd.cc
@@ -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);