Ignore historical service open in global hook (#3547)

This commit is contained in:
Julien Maffre 2022-02-14 16:08:54 +00:00 коммит произвёл GitHub
Родитель cc247f73eb
Коммит d983540b17
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 24 добавлений и 10 удалений

Просмотреть файл

@ -1 +1 @@
trigger happy
meow

Просмотреть файл

@ -1830,13 +1830,27 @@ namespace ccf
network.tables->set_global_hook(
network.service.get_name(),
network.service.wrap_commit_hook(
[this](kv::Version hook_version, const Service::Write& w) {
network.service.wrap_commit_hook([this](
kv::Version hook_version,
const Service::Write& w) {
if (!w.has_value())
{
throw std::logic_error("Unexpected deletion in service value");
}
// Service open on historical service has no effect
auto hook_pubk_pem =
crypto::public_key_pem_from_cert(crypto::cert_pem_to_der(w->cert));
auto current_pubk_pem =
crypto::make_key_pair(network.identity->priv_key)->public_key_pem();
if (hook_pubk_pem != current_pubk_pem)
{
LOG_TRACE_FMT(
"Ignoring historical service open at seqno {} for {}",
hook_version,
w->cert.str());
return;
}
network.identity->set_certificate(w->cert);
open_user_frontend();
}));