chiark / gitweb /
journald: don't reposition window if we don't have to
authorLennart Poettering <lennart@poettering.net>
Thu, 13 Sep 2012 15:06:04 +0000 (17:06 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 13 Sep 2012 15:06:04 +0000 (17:06 +0200)
src/journal/journal-authenticate.c
src/journal/journal-authenticate.h
src/journal/journal-file.c
src/journal/journal-verify.c

index 593bf7eb2ac0d95fd568f7ac62bcff91357116cd..674f81218f4c3489fb570f8461e7e62ea58a8537 100644 (file)
@@ -66,7 +66,7 @@ int journal_file_append_tag(JournalFile *f) {
 
         /* Add the tag object itself, so that we can protect its
          * header. This will exclude the actual hash value in it */
 
         /* Add the tag object itself, so that we can protect its
          * header. This will exclude the actual hash value in it */
-        r = journal_file_hmac_put_object(f, OBJECT_TAG, p);
+        r = journal_file_hmac_put_object(f, OBJECT_TAG, o, p);
         if (r < 0)
                 return r;
 
         if (r < 0)
                 return r;
 
@@ -229,9 +229,8 @@ int journal_file_maybe_append_tag(JournalFile *f, uint64_t realtime) {
         return 0;
 }
 
         return 0;
 }
 
-int journal_file_hmac_put_object(JournalFile *f, int type, uint64_t p) {
+int journal_file_hmac_put_object(JournalFile *f, int type, Object *o, uint64_t p) {
         int r;
         int r;
-        Object *o;
 
         assert(f);
 
 
         assert(f);
 
@@ -242,9 +241,14 @@ int journal_file_hmac_put_object(JournalFile *f, int type, uint64_t p) {
         if (r < 0)
                 return r;
 
         if (r < 0)
                 return r;
 
-        r = journal_file_move_to_object(f, type, p, &o);
-        if (r < 0)
-                return r;
+        if (!o) {
+                r = journal_file_move_to_object(f, type, p, &o);
+                if (r < 0)
+                        return r;
+        } else {
+                if (type >= 0 && o->object.type != type)
+                        return -EBADMSG;
+        }
 
         gcry_md_write(f->hmac, o, offsetof(ObjectHeader, payload));
 
 
         gcry_md_write(f->hmac, o, offsetof(ObjectHeader, payload));
 
@@ -460,7 +464,7 @@ int journal_file_append_first_tag(JournalFile *f) {
                 return -EINVAL;
         p -= offsetof(Object, hash_table.items);
 
                 return -EINVAL;
         p -= offsetof(Object, hash_table.items);
 
-        r = journal_file_hmac_put_object(f, OBJECT_FIELD_HASH_TABLE, p);
+        r = journal_file_hmac_put_object(f, OBJECT_FIELD_HASH_TABLE, NULL, p);
         if (r < 0)
                 return r;
 
         if (r < 0)
                 return r;
 
@@ -469,7 +473,7 @@ int journal_file_append_first_tag(JournalFile *f) {
                 return -EINVAL;
         p -= offsetof(Object, hash_table.items);
 
                 return -EINVAL;
         p -= offsetof(Object, hash_table.items);
 
-        r = journal_file_hmac_put_object(f, OBJECT_DATA_HASH_TABLE, p);
+        r = journal_file_hmac_put_object(f, OBJECT_DATA_HASH_TABLE, NULL, p);
         if (r < 0)
                 return r;
 
         if (r < 0)
                 return r;
 
index 3586464d1e9744715107df1ab27124fae9b41a69..0aaf83672136f43bfdd1ebf571c01a479cfe043a 100644 (file)
@@ -33,7 +33,7 @@ int journal_file_append_first_tag(JournalFile *f);
 int journal_file_hmac_setup(JournalFile *f);
 int journal_file_hmac_start(JournalFile *f);
 int journal_file_hmac_put_header(JournalFile *f);
 int journal_file_hmac_setup(JournalFile *f);
 int journal_file_hmac_start(JournalFile *f);
 int journal_file_hmac_put_header(JournalFile *f);
-int journal_file_hmac_put_object(JournalFile *f, int type, uint64_t p);
+int journal_file_hmac_put_object(JournalFile *f, int type, Object *o, uint64_t p);
 
 int journal_file_fss_load(JournalFile *f);
 int journal_file_parse_verification_key(JournalFile *f, const char *key);
 
 int journal_file_fss_load(JournalFile *f);
 int journal_file_parse_verification_key(JournalFile *f, const char *key);
index 8016852b9163d2f4f1e34d3e022f50f1606bba67..e55162ab2c0361babbf941d9368b2e8502ad5059 100644 (file)
@@ -775,18 +775,18 @@ static int journal_file_append_data(
         if (r < 0)
                 return r;
 
         if (r < 0)
                 return r;
 
-#ifdef HAVE_GCRYPT
-        r = journal_file_hmac_put_object(f, OBJECT_DATA, p);
-        if (r < 0)
-                return r;
-#endif
-
         /* The linking might have altered the window, so let's
          * refresh our pointer */
         r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
         if (r < 0)
                 return r;
 
         /* The linking might have altered the window, so let's
          * refresh our pointer */
         r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
         if (r < 0)
                 return r;
 
+#ifdef HAVE_GCRYPT
+        r = journal_file_hmac_put_object(f, OBJECT_DATA, o, p);
+        if (r < 0)
+                return r;
+#endif
+
         if (ret)
                 *ret = o;
 
         if (ret)
                 *ret = o;
 
@@ -866,7 +866,7 @@ static int link_entry_into_array(JournalFile *f,
                 return r;
 
 #ifdef HAVE_GCRYPT
                 return r;
 
 #ifdef HAVE_GCRYPT
-        r = journal_file_hmac_put_object(f, OBJECT_ENTRY_ARRAY, q);
+        r = journal_file_hmac_put_object(f, OBJECT_ENTRY_ARRAY, o, q);
         if (r < 0)
                 return r;
 #endif
         if (r < 0)
                 return r;
 #endif
@@ -1012,7 +1012,7 @@ static int journal_file_append_entry_internal(
         o->entry.boot_id = f->header->boot_id;
 
 #ifdef HAVE_GCRYPT
         o->entry.boot_id = f->header->boot_id;
 
 #ifdef HAVE_GCRYPT
-        r = journal_file_hmac_put_object(f, OBJECT_ENTRY, np);
+        r = journal_file_hmac_put_object(f, OBJECT_ENTRY, o, np);
         if (r < 0)
                 return r;
 #endif
         if (r < 0)
                 return r;
 #endif
index 5d134bdb9763d7c495f0c7708d40119b8b2d1835..629b2389bc5ea24bc0c18cade52e3635f91825ea 100644 (file)
@@ -959,7 +959,7 @@ int journal_file_verify(
                                         if (r < 0)
                                                 goto fail;
 
                                         if (r < 0)
                                                 goto fail;
 
-                                        r = journal_file_hmac_put_object(f, -1, q);
+                                        r = journal_file_hmac_put_object(f, -1, o, q);
                                         if (r < 0)
                                                 goto fail;
 
                                         if (r < 0)
                                                 goto fail;