From c29272a157d09a8125788c1b860e89b63b4cb36c Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Sat, 12 Sep 2020 18:01:19 +0300 Subject: [PATCH] p2p: Add ReadAnchors() --- src/addrdb.cpp | 13 +++++++++++++ src/addrdb.h | 8 ++++++++ 2 files changed, 21 insertions(+) diff --git a/src/addrdb.cpp b/src/addrdb.cpp index ca2d66570bf..27f22826a9e 100644 --- a/src/addrdb.cpp +++ b/src/addrdb.cpp @@ -163,3 +163,16 @@ void DumpAnchors(const fs::path& anchors_db_path, const std::vector& a LOG_TIME_SECONDS(strprintf("Flush %d outbound block-relay-only peer addresses to anchors.dat", anchors.size())); SerializeFileDB("anchors", anchors_db_path, anchors); } + +std::vector ReadAnchors(const fs::path& anchors_db_path) +{ + std::vector anchors; + if (DeserializeFileDB(anchors_db_path, anchors)) { + LogPrintf("Loaded %i addresses from %s\n", anchors.size(), anchors_db_path.filename()); + } else { + anchors.clear(); + } + + fs::remove(anchors_db_path); + return anchors; +} diff --git a/src/addrdb.h b/src/addrdb.h index 614a0c20e30..4ac0e3e1b57 100644 --- a/src/addrdb.h +++ b/src/addrdb.h @@ -81,4 +81,12 @@ public: */ void DumpAnchors(const fs::path& anchors_db_path, const std::vector& anchors); +/** + * Read the anchor IP address database (anchors.dat) + * + * Deleting anchors.dat is intentional as it avoids renewed peering to anchors after + * an unclean shutdown and thus potential exploitation of the anchor peer policy. + */ +std::vector ReadAnchors(const fs::path& anchors_db_path); + #endif // BITCOIN_ADDRDB_H