]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm dump index: Add support for virtual2 header
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 11 Apr 2023 11:26:52 +0000 (14:26 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Fri, 14 Apr 2023 15:59:41 +0000 (15:59 +0000)
src/doveadm/doveadm-dump-index.c

index dada1817d3476dff69afebe201fb4bbbbb773517..9cb1842c35dc8d0f105f708b30affe2b189082ea 100644 (file)
@@ -106,6 +106,15 @@ struct virtual_mail_index_mailbox_record {
        uint32_t next_uid;
        uint64_t highest_modseq;
 };
+struct virtual_mail_index_ext2_header {
+       uint8_t version;
+       uint8_t ext_record_size;
+       uint16_t hdr_size;
+       uint32_t change_counter;
+};
+struct virtual_mail_index_mailbox_ext2_record {
+       uint8_t guid[16];
+};
 struct virtual_mail_index_record {
        uint32_t mailbox_id;
        uint32_t real_uid;
@@ -313,6 +322,23 @@ static void dump_extension_header(struct mail_index *index,
 
                        name += rec->name_len;
                }
+       } else if (strcmp(ext->name, "virtual2") == 0) {
+               const struct virtual_mail_index_ext2_header *hdr = data;
+               const struct virtual_mail_index_mailbox_ext2_record *rec;
+               unsigned int i, count;
+
+               printf("header\n");
+               printf(" - version .......... = %u\n", hdr->version);
+               printf(" - ext_record_size .. = %u\n", hdr->ext_record_size);
+               printf(" - hdr_size ......... = %u\n", hdr->hdr_size);
+               printf(" - change_counter ... = %u\n", hdr->change_counter);
+
+               count = (ext->hdr_size - hdr->hdr_size) / hdr->ext_record_size;
+               for (i = 0; i < count; i++, rec++) {
+                       rec = CONST_PTR_OFFSET(data, hdr->hdr_size +
+                                              i * hdr->ext_record_size);
+                       printf(" - guid = %s\n", guid_128_to_string(rec->guid));
+               }
        } else if (strcmp(ext->name, "list") == 0) {
                printf("header ........ = %s\n",
                       binary_to_hex(data, ext->hdr_size));