]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: accept 'keyfile' as well as 'key' during mkfs
authorSage Weil <sage@redhat.com>
Thu, 30 Nov 2017 14:32:47 +0000 (08:32 -0600)
committerAndrew Schoen <aschoen@redhat.com>
Thu, 1 Feb 2018 22:34:47 +0000 (16:34 -0600)
Also, don't print the raw key to the log.

Signed-off-by: Sage Weil <sage@redhat.com>
Signed-off-by: Kefu Chai <kefu@redhat.com>
(cherry picked from commit 18aff37ee3a2c2d3016f08c98161a5acc41ff8e5)

src/osd/OSD.cc

index ed480f1cfc95a3da56d8a31c72d63958985de2bc..6f0715bac737206520d92cafa11115f8af8f8edc 100644 (file)
@@ -1824,11 +1824,33 @@ int OSD::write_meta(CephContext *cct, ObjectStore *store, uuid_d& cluster_fsid,
     return r;
 
   string key = cct->_conf->get_val<string>("key");
-  lderr(cct) << "key " << key << dendl;
   if (key.size()) {
     r = store->write_meta("osd_key", key);
     if (r < 0)
       return r;
+  } else {
+    string keyfile = cct->_conf->get_val<string>("keyfile");
+    if (!keyfile.empty()) {
+      bufferlist keybl;
+      string err;
+      if (keyfile == "-") {
+       static_assert(1024 * 1024 >
+                     (sizeof(CryptoKey) - sizeof(bufferptr) +
+                      sizeof(__u16) + 16 /* AES_KEY_LEN */ + 3 - 1) / 3. * 4.,
+                     "1MB should be enough for a base64 encoded CryptoKey");
+       r = keybl.read_fd(STDIN_FILENO, 1024 * 1024);
+      } else {
+       r = keybl.read_file(keyfile.c_str(), &err);
+      }
+      if (r < 0) {
+       derr << __func__ << " failed to read keyfile " << keyfile << ": "
+            << err << ": " << cpp_strerror(r) << dendl;
+       return r;
+      }
+      r = store->write_meta("osd_key", keybl.to_str());
+      if (r < 0)
+       return r;
+    }
   }
 
   r = store->write_meta("ready", "ready");