}
// modifiers
- void add(EntityName& name, EntityAuth &a) {
+ void add(const EntityName& name, EntityAuth &a) {
keys[name] = a;
}
void set_caps(EntityName& name, map<string, bufferlist>& caps) {
#include "config.h"
+#include "auth/KeyRing.h"
#include "CephxProtocol.h"
#include "common/Timer.h"
Mutex::Locker l(lock);
dst = data;
}
+ void export_keyring(KeyRing& keyring) {
+ for (map<EntityName, EntityAuth>::iterator p = data.secrets.begin();
+ p != data.secrets.end();
+ p++) {
+ keyring.add(p->first, p->second);
+ }
+ }
bool updated_rotating(bufferlist& rotating_bl, version_t& rotating_ver);
m->cmd[1] == "list") {
return false;
}
+ else if (m->cmd[1] == "export") {
+ KeyRing keyring;
+ export_keyring(keyring);
+ if (m->cmd.size() > 2) {
+ EntityName ename;
+ EntityAuth eauth;
+ if (ename.from_str(m->cmd[2])) {
+ if (keyring.get_auth(ename, eauth)) {
+ KeyRing kr;
+ kr.add(ename, eauth);
+ ::encode(kr, rdata);
+ ss << "export " << eauth;
+ r = 0;
+ } else {
+ ss << "no key for " << eauth;
+ r = -ENOENT;
+ }
+ } else {
+ ss << "invalid entity_auth " << m->cmd[2];
+ r = -EINVAL;
+ }
+ } else {
+ ::encode(keyring, rdata);
+ ss << "exported master keyring";
+ r = 0;
+ }
+ } else {
+ auth_usage(ss);
+ r = -EINVAL;
+ }
+ } else {
+ auth_usage(ss);
+ r = -EINVAL;
}
- auth_usage(ss);
- r = -EINVAL;
-
string rs;
getline(ss, rs, '\0');
mon->reply_command(m, r, rs, rdata, paxos->get_version());
return true;
}
+void AuthMonitor::export_keyring(KeyRing& keyring)
+{
+ mon->key_server.export_keyring(keyring);
+}
+
void AuthMonitor::import_keyring(KeyRing& keyring)
{
for (map<EntityName, EntityAuth>::iterator p = keyring.get_keys().begin();
uint64_t max_global_id;
uint64_t last_allocated_id;
+ void export_keyring(KeyRing& keyring);
void import_keyring(KeyRing& keyring);
void push_cephx_inc(KeyServerData::Incremental& auth_inc) {