return data.contains(name);
}
-void KeyServer::list_secrets(stringstream& ss, stringstream &ds) const
+int KeyServer::encode_secrets(Formatter *f, stringstream *ds) const
{
Mutex::Locker l(lock);
+ if (f)
+ f->open_array_section("auth_dump");
+
map<EntityName, EntityAuth>::const_iterator mapiter = data.secrets_begin();
- if (mapiter != data.secrets_end()) {
- ss << "installed auth entries: " << std::endl;
-
- while (mapiter != data.secrets_end()) {
- const EntityName& name = mapiter->first;
- ds << name.to_str() << std::endl;
-
- ds << "\tkey: " << mapiter->second.key << std::endl;
-
- map<string, bufferlist>::const_iterator capsiter =
- mapiter->second.caps.begin();
- for (; capsiter != mapiter->second.caps.end(); ++capsiter) {
- // FIXME: need a const_iterator for bufferlist, but it doesn't exist yet.
- bufferlist *bl = const_cast<bufferlist*>(&capsiter->second);
- bufferlist::iterator dataiter = bl->begin();
- string caps;
- ::decode(caps, dataiter);
- ds << "\tcaps: [" << capsiter->first << "] " << caps << std::endl;
- }
-
- ++mapiter;
+
+ if (mapiter == data.secrets_end())
+ return -ENOENT;
+
+ while (mapiter != data.secrets_end()) {
+ const EntityName& name = mapiter->first;
+ if (ds) {
+ *ds << name.to_str() << std::endl;
+ *ds << "\tkey: " << mapiter->second.key << std::endl;
+ }
+ if (f) {
+ f->open_object_section("auth_entities");
+ f->dump_string("entity", name.to_str());
+ f->dump_stream("key") << mapiter->second.key;
+ f->open_object_section("caps");
}
- } else {
- ss << "no installed auth entries!";
+
+ map<string, bufferlist>::const_iterator capsiter =
+ mapiter->second.caps.begin();
+ for (; capsiter != mapiter->second.caps.end(); ++capsiter) {
+ // FIXME: need a const_iterator for bufferlist, but it doesn't exist yet.
+ bufferlist *bl = const_cast<bufferlist*>(&capsiter->second);
+ bufferlist::iterator dataiter = bl->begin();
+ string caps;
+ ::decode(caps, dataiter);
+ if (ds)
+ *ds << "\tcaps: [" << capsiter->first << "] " << caps << std::endl;
+ if (f)
+ f->dump_string(capsiter->first.c_str(), caps);
+ }
+ if (f) {
+ f->close_section(); // caps
+ f->close_section(); // auth_entities
+ }
+
+ ++mapiter;
}
+
+ if (f)
+ f->close_section(); // auth_dump
+ return 0;
+}
+
+void KeyServer::encode_formatted(string label, Formatter *f, bufferlist &bl)
+{
+ assert(f != NULL);
+ f->open_object_section(label.c_str());
+ encode_secrets(f, NULL);
+ f->close_section();
+ f->flush(bl);
+}
+
+void KeyServer::encode_plaintext(bufferlist &bl)
+{
+ stringstream os;
+ encode_secrets(NULL, &os);
+ bl.append(os.str());
}
bool KeyServer::updated_rotating(bufferlist& rotating_bl, version_t& rotating_ver)