chiark / gitweb /
journal: count number of entry arrays in header
authorLennart Poettering <lennart@poettering.net>
Thu, 16 Aug 2012 18:51:24 +0000 (20:51 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 16 Aug 2012 19:00:47 +0000 (21:00 +0200)
src/journal/journal-def.h
src/journal/journal-file.c
src/journal/journal-verify.c

index e61e81ca84e1155f9616f992fb7c2a28d9fec111..660a92c147f4907b0e0e01ec7d7f9ee46372a26b 100644 (file)
@@ -185,6 +185,7 @@ _packed_ struct Header {
         le64_t n_fields;
         /* Added in 189 */
         le64_t n_tags;
+        le64_t n_entry_arrays;
 };
 
 #define FSPRG_HEADER_SIGNATURE ((char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
index e0b20ccefd839e3b6613c9082f6bfce173e121e1..81952a08eeac72cf6d2e853f51d6bddd94b5d62d 100644 (file)
@@ -839,6 +839,9 @@ static int link_entry_into_array(JournalFile *f,
                 o->entry_array.next_entry_array_offset = htole64(q);
         }
 
+        if (JOURNAL_HEADER_CONTAINS(f->header, n_entry_arrays))
+                f->header->n_entry_arrays = htole64(le64toh(f->header->n_entry_arrays) + 1);
+
         *idx = htole64(hidx + 1);
 
         return 0;
index 55ca52a64138c15f4b5c73c70db11f5a4b49d9ad..b4e34d18a8f28299cb65e5661f33206cb44c31c2 100644 (file)
@@ -837,6 +837,13 @@ int journal_file_verify(JournalFile *f, const char *key) {
                 goto fail;
         }
 
+        if (JOURNAL_HEADER_CONTAINS(f->header, n_entry_arrays) &&
+            n_entry_arrays != le64toh(f->header->n_entry_arrays)) {
+                log_error("Entry array number mismatch");
+                r = -EBADMSG;
+                goto fail;
+        }
+
         if (n_data_hash_tables != 1) {
                 log_error("Missing data hash table");
                 r = -EBADMSG;