int KeyServer::start_server()
{
std::scoped_lock l{lock};
-
_dump_rotating_secrets();
return 0;
}
return data.get_service_secret(cct, service_id, secret_id, secret);
}
+void KeyServer::note_used_pending_key(const EntityName& name, const CryptoKey& key)
+{
+ std::scoped_lock l(lock);
+ used_pending_keys[name] = key;
+}
+
+void KeyServer::clear_used_pending_keys()
+{
+ std::scoped_lock l(lock);
+ used_pending_keys.clear();
+}
+
+void KeyServer::get_used_pending_keys(std::map<EntityName,CryptoKey> *used)
+{
+ std::scoped_lock l(lock);
+ used->swap(used_pending_keys);
+}
+
bool KeyServer::generate_secret(CryptoKey& secret)
{
bufferptr bp;
class KeyServer : public KeyStore {
CephContext *cct;
KeyServerData data;
+ std::map<EntityName, CryptoKey> used_pending_keys;
mutable ceph::mutex lock;
int _rotate_secret(uint32_t service_id, KeyServerData &pending_data);
bool get_auth(const EntityName& name, EntityAuth& auth) const;
bool get_caps(const EntityName& name, const std::string& type, AuthCapsInfo& caps) const;
bool get_active_rotating_secret(const EntityName& name, CryptoKey& secret) const;
+
+ void note_used_pending_key(const EntityName& name, const CryptoKey& key);
+ void clear_used_pending_keys();
+ void get_used_pending_keys(std::map<EntityName,CryptoKey> *used);
+
int start_server();
void rotate_timeout(double timeout);
error);
if (error.empty()) {
used_key = &eauth.pending_key;
+ key_server->note_used_pending_key(entity_name, eauth.pending_key);
}
}
if (!error.empty()) {