From db0661dbb51e9082e47926c31e93bdc97b491bf9 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Wed, 22 Nov 2023 16:47:21 -0800 Subject: Add support for hash chaining to detect modifications in postings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The following details of a posting contribute to its hash: fullname of account string representation of amount Each posting hashes contributes to the transaction hash, which is compromised of: previous transaction’s hash (as encountered in parsing order) actual date optional auxiliary date optional code payee hashes of all postings Note that this means that changes in the “code” or any of the comments --- src/session.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/session.cc') diff --git a/src/session.cc b/src/session.cc index 7cf1a666..6958603e 100644 --- a/src/session.cc +++ b/src/session.cc @@ -134,7 +134,7 @@ std::size_t session_t::read_data(const string& master_account) parsing_context.push(*price_db_path); parsing_context.get_current().journal = journal.get(); try { - if (journal->read(parsing_context) > 0) + if (journal->read(parsing_context, HANDLED(hashes)) > 0) throw_(parse_error, _("Transactions not allowed in price history file")); } catch (...) { @@ -169,7 +169,7 @@ std::size_t session_t::read_data(const string& master_account) parsing_context.get_current().journal = journal.get(); parsing_context.get_current().master = acct; try { - xact_count += journal->read(parsing_context); + xact_count += journal->read(parsing_context, HANDLED(hashes)); } catch (...) { parsing_context.pop(); @@ -230,7 +230,7 @@ journal_t * session_t::read_journal_from_string(const string& data) parsing_context.get_current().journal = journal.get(); parsing_context.get_current().master = journal->master; try { - journal->read(parsing_context); + journal->read(parsing_context, HANDLED(hashes)); } catch (...) { parsing_context.pop(); @@ -331,6 +331,9 @@ option_t * session_t::lookup_option(const char * p) case 'f': OPT_(file_); // -f break; + case 'h': + OPT(hashes); + break; case 'i': OPT(input_date_format_); break; -- cgit v1.2.3