doveadm-dump-index.c revision 0374f48baf19b33bff02f309f9bbe52632972eba
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2007-2011 Dovecot authors, see the included COPYING file */
3fe44a0df5a0bdd80c495f79cbf0e384441d6fccTimo Sirainen uint32_t new_check_time, new_mtime, new_mtime_nsecs;
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen uint32_t cur_check_time, cur_mtime, cur_mtime_nsecs;
b87436ebb957a9eb182be72ba00e2c8eae59a2e4Timo Sirainen uint32_t uidlist_mtime, uidlist_mtime_nsecs, uidlist_size;
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen const struct mail_index_header *hdr = &index->map->hdr;
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen unsigned int i;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen printf("version .................. = %u.%u\n", hdr->major_version, hdr->minor_version);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("base header size ......... = %u\n", hdr->base_header_size);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("header size .............. = %u\n", hdr->header_size);
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen printf("record size .............. = %u\n", hdr->record_size);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("compat flags ............. = %u\n", hdr->compat_flags);
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen printf("index id ................. = %u (%s)\n", hdr->indexid, unixdate2str(hdr->indexid));
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainen printf("flags .................... = %u\n", hdr->flags);
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainen printf("uid validity ............. = %u (%s)\n", hdr->uid_validity, unixdate2str(hdr->uid_validity));
2521fd0986302cdabc8b0711eef63ac188f32cd6Timo Sirainen printf("next uid ................. = %u\n", hdr->next_uid);
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen printf("messages count ........... = %u\n", hdr->messages_count);
bc7a4cf2c06702ebaedba9a7c15ce657d5856f63Timo Sirainen printf("seen messages count ...... = %u\n", hdr->seen_messages_count);
bc7a4cf2c06702ebaedba9a7c15ce657d5856f63Timo Sirainen printf("deleted messages count ... = %u\n", hdr->deleted_messages_count);
bc7a4cf2c06702ebaedba9a7c15ce657d5856f63Timo Sirainen printf("first recent uid ......... = %u\n", hdr->first_recent_uid);
ad0fe438255666726723a93f3112df6e103028afTimo Sirainen printf("first unseen uid lowwater = %u\n", hdr->first_unseen_uid_lowwater);
bc7a4cf2c06702ebaedba9a7c15ce657d5856f63Timo Sirainen printf("first deleted uid lowwater = %u\n", hdr->first_deleted_uid_lowwater);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("log file seq ............. = %u\n", hdr->log_file_seq);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("log file int offset ...... = %u\n", hdr->log_file_tail_offset);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("log file ext offset ...... = %u\n", hdr->log_file_head_offset);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("log file tail offset ..... = %u\n", hdr->log_file_tail_offset);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("log file head offset ..... = %u\n", hdr->log_file_head_offset);
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf("day stamp ................ = %u (%s)\n", hdr->day_stamp, unixdate2str(hdr->day_stamp));
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen for (i = 0; i < N_ELEMENTS(hdr->day_first_uid); i++)
2521fd0986302cdabc8b0711eef63ac188f32cd6Timo Sirainen printf("day first uid[%u] ......... = %u\n", i, hdr->day_first_uid[i]);
2d8b23805db6f06b8b38174fb6e135386694f429Timo Sirainenstatic void dump_extension_header(struct mail_index *index,
766115d2b2e6dbcf59f90d3b3866851cf6f740feTimo Sirainen if (strcmp(ext->name, MAIL_INDEX_EXT_KEYWORDS) == 0)
b1678954f83e1059b981e2def52a70054fa71399Timo Sirainen data = CONST_PTR_OFFSET(index->map->hdr_base, ext->hdr_offset);
0e5819a061034f1636b124c03a89f67d37c852b1Timo Sirainen printf(" - highest uid . = %u\n", hdr->highest_uid);
0e5819a061034f1636b124c03a89f67d37c852b1Timo Sirainen printf(" - message count = %u\n", hdr->message_count);
b1678954f83e1059b981e2def52a70054fa71399Timo Sirainen printf(" - vsize ....... = %llu\n", (unsigned long long)hdr->vsize);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen } else if (strcmp(ext->name, "maildir") == 0) {
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainen const struct maildir_index_header *hdr = data;
d5d23d5ff8b7a06d2ead489ddcf55ee8fb5ca7b6Timo Sirainen printf(" - new_check_time .... = %s\n", unixdate2str(hdr->new_check_time));
d19d3aa4eafa34b48b7d7d311c9db31e1898576aTimo Sirainen printf(" - new_mtime ......... = %s\n", unixdate2str(hdr->new_mtime));
d19d3aa4eafa34b48b7d7d311c9db31e1898576aTimo Sirainen printf(" - new_mtime_nsecs ... = %u\n", hdr->new_mtime_nsecs);
8eb223b84389a7b75a39d46484f5166d221305ebTimo Sirainen printf(" - cur_check_time .... = %s\n", unixdate2str(hdr->cur_check_time));
8eb223b84389a7b75a39d46484f5166d221305ebTimo Sirainen printf(" - cur_mtime ......... = %s\n", unixdate2str(hdr->cur_mtime));
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen printf(" - cur_mtime_nsecs.... = %u\n", hdr->cur_mtime_nsecs);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen printf(" - uidlist_mtime ..... = %s\n", unixdate2str(hdr->uidlist_mtime));
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen printf(" - uidlist_mtime_nsecs = %u\n", hdr->uidlist_mtime_nsecs);
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen printf(" - uidlist_size ...... = %u\n", hdr->uidlist_size);
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen printf(" - sync_mtime . = %s\n", unixdate2str(hdr->sync_mtime));
bc7a4cf2c06702ebaedba9a7c15ce657d5856f63Timo Sirainen printf(" - dirty_flag . = %d\n", hdr->dirty_flag);
bc7a4cf2c06702ebaedba9a7c15ce657d5856f63Timo Sirainen } else if (strcmp(ext->name, "mdbox-hdr") == 0) {
b863b7e3fccf75f90f613b875f02fd1781e14e5eTimo Sirainen printf(" - map_uid_validity .. = %u\n", hdr->map_uid_validity);
fbdd091ef000e3ec4db34c054736c91ef9bc48ceTimo Sirainen } else if (strcmp(ext->name, "dbox-hdr") == 0) {
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen printf(" - rebuild_count . = %u\n", hdr->rebuild_count);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen } else if (strcmp(ext->name, "modseq") == 0) {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen const struct mail_index_modseq_header *hdr = data;
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen printf(" - log_seq ...... = %u\n", hdr->log_seq);
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen printf(" - log_offset ... = %u\n", hdr->log_offset);
2b682d8d3661800f16aceaa45fa4de9b6b140a59Timo Sirainen } else if (strcmp(ext->name, "virtual") == 0) {
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen const struct virtual_mail_index_header *hdr = data;
b863b7e3fccf75f90f613b875f02fd1781e14e5eTimo Sirainen const struct virtual_mail_index_mailbox_record *rec;
b863b7e3fccf75f90f613b875f02fd1781e14e5eTimo Sirainen const unsigned char *name;
b863b7e3fccf75f90f613b875f02fd1781e14e5eTimo Sirainen unsigned int i;
b863b7e3fccf75f90f613b875f02fd1781e14e5eTimo Sirainen printf(" - change_counter ... = %u\n", hdr->change_counter);
b863b7e3fccf75f90f613b875f02fd1781e14e5eTimo Sirainen printf(" - mailbox_count .... = %u\n", hdr->mailbox_count);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen printf(" - highest_mailbox_id = %u\n", hdr->highest_mailbox_id);
unsigned int i, count;
count = 0;
if (count == 0) {
for (i = 0; i < count; i++) {
const unsigned int *kw_indexes;
const char *const *keywords;
unsigned int i, count;
if (count == 0)
for (i = 0; i < count; i++)
const char *str;
case MAIL_CACHE_DECISION_NO:
case MAIL_CACHE_DECISION_TEMP:
case MAIL_CACHE_DECISION_YES:
return str;
switch (type) {
case MAIL_CACHE_FIELD_STRING:
case MAIL_CACHE_FIELD_BITMASK:
case MAIL_CACHE_FIELD_HEADER:
&count);
const char *error;
const void *data;
unsigned int size;
int ret;
case MAIL_CACHE_FIELD_BITMASK:
case MAIL_CACHE_FIELD_STRING:
if (size > 0)
case MAIL_CACHE_FIELD_HEADER: {
if (i == 0 && size == 0) {
size = 0;
if (lines[i] == 0)
size--;
if (size > 0)
case MAIL_CACHE_FIELD_COUNT:
i_unreached();
if (ret < 0)
const void *data;
unsigned int i, ext_count;
bool expunged;
for (i = 0; i < ext_count; i++) {
return NULL;
if (uid == 0) {
T_BEGIN {
} T_END;
bool ret;
return FALSE;
if (ret > 0)
return ret;