diff options
author | Sage Weil <sage@inktank.com> | 2012-05-19 16:11:39 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2012-05-23 16:31:43 -0700 |
commit | a980d018f059228df584c34f4130ed892d35431c (patch) | |
tree | 8a36ec04b01d14ab9c76a5b13ef42204d7d0748e /src/ceph_osd.cc | |
parent | c18e4d80a1c6920bbc68680cc81d327749497ce6 (diff) | |
download | ceph-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.cc | 28 |
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); |