From a94ba173e9a21d14fc1a695f44769b4ae251dd0d Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Fri, 26 Jun 2020 18:35:16 +0200 Subject: [PATCH] always try empty passphrase first --- passphrase_cache.cc | 3 +++ passphrase_cache.hh | 1 + test/test_passphrase_cache.cc | 8 ++++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/passphrase_cache.cc b/passphrase_cache.cc index 6b372bf..7fbe209 100644 --- a/passphrase_cache.cc +++ b/passphrase_cache.cc @@ -14,6 +14,9 @@ namespace pEp { std::lock_guard lock(_mtx); cleanup(); + if (callee("")) + return true; + for (auto entry=_cache.begin(); entry!=_cache.end(); ++entry) { if (callee(entry->passphrase)) { refresh(entry); diff --git a/passphrase_cache.hh b/passphrase_cache.hh index 5d328c1..a85940a 100644 --- a/passphrase_cache.hh +++ b/passphrase_cache.hh @@ -35,6 +35,7 @@ namespace pEp { // for each passphrase call the callee until it returns true for a // matching passphrase or no passphrases are left + // always tests empty passphrase first // returns true if a passphrase was matching, false otherwise using passphrase_callee = std::function; bool for_each_passphrase(const passphrase_callee& callee); diff --git a/test/test_passphrase_cache.cc b/test/test_passphrase_cache.cc index 22df2b5..16ca78f 100644 --- a/test/test_passphrase_cache.cc +++ b/test/test_passphrase_cache.cc @@ -12,18 +12,18 @@ int main() cache.add("world"); std::cout << "expected: two passphrases\n"; - cache.for_each_passphrase([&](std::string passphrase){std::cout << passphrase << "\n"; return false;}); + cache.for_each_passphrase([&](std::string passphrase){std::cout << "'" << passphrase << "'\n"; return false;}); std::cout << "expected: one passphrase\n"; - cache.for_each_passphrase([&](std::string passphrase){std::cout << passphrase << "\n"; return true;}); + cache.for_each_passphrase([&](std::string passphrase){std::cout << "'" << passphrase << "'\n"; return passphrase != "";}); std::cout << "expected: two passphrases but reverse order\n"; - cache.for_each_passphrase([&](std::string passphrase){std::cout << passphrase << "\n"; return false;}); + cache.for_each_passphrase([&](std::string passphrase){std::cout << "'" << passphrase << "'\n"; return false;}); sleep(2); std::cout << "expected: no passphrase\n"; - cache.for_each_passphrase([&](std::string passphrase){std::cout << passphrase << "\n"; return false;}); + cache.for_each_passphrase([&](std::string passphrase){std::cout << "'" << passphrase << "'\n"; return false;}); return 0; }