From 1e1796f60ce3016fe88a117729f300c4e9c453e5 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 11 Apr 2023 14:26:52 +0300 Subject: [PATCH] doveadm dump index: Add support for virtual2 header --- src/doveadm/doveadm-dump-index.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/doveadm/doveadm-dump-index.c b/src/doveadm/doveadm-dump-index.c index dada1817d3..9cb1842c35 100644 --- a/src/doveadm/doveadm-dump-index.c +++ b/src/doveadm/doveadm-dump-index.c @@ -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)); -- 2.47.3