using namespace std;
+KeyRing g_keyring;
+
+static void hexdump(string msg, const char *s, int len)
+{
+ int buf_len = len*4;
+ char buf[buf_len];
+ int pos = 0;
+ for (int i=0; i<len && pos<buf_len - 8; i++) {
+ if (i && !(i%8))
+ pos += snprintf(&buf[pos], buf_len-pos, " ");
+ if (i && !(i%16))
+ pos += snprintf(&buf[pos], buf_len-pos, "\n");
+ pos += snprintf(&buf[pos], buf_len-pos, "%.2x ", (int)(unsigned char)s[i]);
+ }
+ dout(0) << msg << ":\n" << buf << dendl;
+}
+
bool KeyRing::load_master(const char *filename)
bool need_rotating_secrets();
};
+extern KeyRing g_keyring;
+
#endif
#include "include/color.h"
+#include "auth/KeyRing.h"
+
void common_init(std::vector<const char*>& args, const char *module_type, bool daemon)
{
tls_init();
// open log file?
if (!g_conf.log_to_stdout)
_dout_open_log();
+
+ if (g_keyring.load_master(g_conf.keys_file)) {
+ dout(0) << "successfuly loaded secret key from " << g_conf.keys_file << dendl;
+ } else {
+ dout(0) << "failed to load secret key from " << g_conf.keys_file << dendl;
+ }
}
bool RadosClient::init()
{
+ dout(0) << "entity name=" << g_conf.entity_name->to_str() << dendl;
// get monmap
if (monclient.build_initial_monmap() < 0)
return false;
#include "auth/Auth.h"
#include "auth/AuthProtocol.h"
#include "auth/KeysServer.h"
+#include "auth/KeyRing.h"
#include "config.h"
dout(10) << "init" << dendl;
messenger->add_dispatcher_head(this);
- auth.init(*g_conf.entity_name);
+ entity_name = *g_conf.entity_name;
+
+ auth.init(entity_name);
Mutex::Locker l(monc_lock);
timer.add_event_after(10.0, new C_Tick(this));
if (state == MC_STATE_AUTHENTICATING)
return;
- if (keyring && keyring->need_rotating_secrets())
+ if (g_keyring.need_rotating_secrets())
_start_auth_rotating(KEY_ROTATE_TIME);
dout(0) << "_reopen_session 2" << dendl;
{
dout(10) << "tick" << dendl;
- if (keyring && keyring->need_rotating_secrets()) {
+ if (g_keyring.need_rotating_secrets()) {
dout(0) << "MonClient::tick: need rotating secret" << dendl;
_start_auth_rotating(KEY_ROTATE_TIME);
}
auth_cond.Signal();
- assert(keyring);
-
dout(0) << "MonClient::handle_auth_rotating_response got_response status=" << m->status << " length=" << m->response_bl.length() << dendl;
if (!m->status) {
RotatingSecrets secrets;
CryptoKey secret_key;
- keyring->get_master(secret_key);
+ g_keyring.get_master(secret_key);
bufferlist::iterator iter = m->response_bl.begin();
if (decode_decrypt(secrets, secret_key, iter) == 0) {
- keyring->set_rotating(secrets);
+ g_keyring.set_rotating(secrets);
} else {
derr(0) << "could not set rotating key: decode_decrypt failed" << dendl;
}
#include "auth/AuthClient.h"
#include "auth/AuthClientHandler.h"
-#include "auth/KeyRing.h"
#include "messages/MMonSubscribe.h"
Context *auth_timeout_event;
bool auth_got_timeout;
Cond auth_cond;
- KeyRing *keyring;
class C_AuthRotatingTimeout : public Context {
protected:
hunting(false),
auth_timeout_event(NULL),
auth_got_timeout(false),
- keyring(NULL),
mounting(0), mount_err(0),
auth_handler(&auth, 0, 0) { }
~MonClient() {
int get_monmap();
int get_monmap_privately();
- void set_keyring(KeyRing *ring) { keyring = ring; }
-
void send_mon_message(Message *m) {
Mutex::Locker l(monc_lock);
_send_mon_message(m);
monc->init();
- EntityName ename;
- ename.entity_type = CEPHX_PRINCIPAL_OSD;
- ename.name = g_conf.id;
-
- monc->set_keyring(&keyring);
-
- if (keyring.load_master(g_conf.keys_file)) {
- dout(0) << "successfuly loaded secret key from " << g_conf.keys_file << dendl;
- } else {
- dout(0) << "failed to load secret key from" << g_conf.keys_file << dendl;
- }
-
- monc->set_entity_name(ename);
-
monc->sub_want("monmap", 0);
monc->renew_subs();