Mercurial > dovecot > core-2.2
changeset 9702:9f1616eeffb8 HEAD
index-storage: Moved mail MD5 calculation code to mbox-specific code.
Nothing else used it.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 30 Jul 2009 19:37:50 -0400 |
parents | fa5e27725f6b |
children | 1b537cceb640 |
files | src/lib-storage/index/index-mail.c src/lib-storage/index/index-storage.c src/lib-storage/index/index-storage.h src/lib-storage/index/mbox/mbox-mail.c src/lib-storage/index/mbox/mbox-save.c src/lib-storage/index/mbox/mbox-storage.c src/lib-storage/index/mbox/mbox-storage.h src/lib-storage/index/mbox/mbox-sync-parse.c src/lib-storage/index/mbox/mbox-sync.c |
diffstat | 9 files changed, 25 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/index-mail.c Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/index-mail.c Thu Jul 30 19:37:50 2009 -0400 @@ -5,7 +5,6 @@ #include "buffer.h" #include "ioloop.h" #include "istream.h" -#include "hex-binary.h" #include "str.h" #include "message-date.h" #include "message-part-serialize.h" @@ -943,7 +942,6 @@ struct index_mail_data *data = &mail->data; struct mail_cache_field *cache_fields = mail->ibox->cache_fields; string_t *str; - const void *ext_data; switch (field) { case MAIL_FETCH_IMAP_BODY: { @@ -1038,18 +1036,9 @@ case MAIL_FETCH_UIDL_BACKEND: case MAIL_FETCH_SEARCH_SCORE: case MAIL_FETCH_GUID: + case MAIL_FETCH_HEADER_MD5: *value_r = ""; return 0; - case MAIL_FETCH_HEADER_MD5: - mail_index_lookup_ext(mail->trans->trans_view, data->seq, - mail->ibox->md5hdr_ext_idx, - &ext_data, NULL); - if (ext_data == NULL) { - *value_r = ""; - return 0; - } - *value_r = binary_to_hex(ext_data, 16); - return 0; case MAIL_FETCH_MAILBOX_NAME: *value_r = _mail->box->name; return 0;
--- a/src/lib-storage/index/index-storage.c Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/index-storage.c Thu Jul 30 19:37:50 2009 -0400 @@ -487,8 +487,6 @@ ibox->next_lock_notify = time(NULL) + LOCK_NOTIFY_INTERVAL; ibox->commit_log_file_seq = 0; ibox->index = index_storage_alloc(box->list, name, flags, index_prefix); - ibox->md5hdr_ext_idx = - mail_index_ext_register(ibox->index, "header-md5", 0, 16, 1); if (box->file_create_mode == 0) { mailbox_list_get_permissions(box->list, name,
--- a/src/lib-storage/index/index-storage.h Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/index-storage.h Thu Jul 30 19:37:50 2009 -0400 @@ -26,8 +26,6 @@ struct mail_cache *cache; struct mail_vfuncs *mail_vfuncs; - uint32_t md5hdr_ext_idx; - struct timeout *notify_to; struct index_notify_file *notify_files; struct index_notify_io *notify_ios;
--- a/src/lib-storage/index/mbox/mbox-mail.c Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/mbox/mbox-mail.c Thu Jul 30 19:37:50 2009 -0400 @@ -3,6 +3,7 @@ #include "lib.h" #include "ioloop.h" #include "istream.h" +#include "hex-binary.h" #include "index-mail.h" #include "mbox-storage.h" #include "mbox-file.h" @@ -148,9 +149,11 @@ mbox_mail_get_special(struct mail *_mail, enum mail_fetch_field field, const char **value_r) { -#define EMPTY_MD5_SUM "00000000000000000000000000000000" + static uint8_t empty_md5[16] = + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; struct index_mail *mail = (struct index_mail *)_mail; struct mbox_mailbox *mbox = (struct mbox_mailbox *)mail->ibox; + const void *ext_data; switch (field) { case MAIL_FETCH_FROM_ENVELOPE: @@ -160,12 +163,18 @@ *value_r = istream_raw_mbox_get_sender(mbox->mbox_stream); return 0; case MAIL_FETCH_HEADER_MD5: - if (index_mail_get_special(_mail, field, value_r) < 0) - return -1; - if (**value_r != '\0' && strcmp(*value_r, EMPTY_MD5_SUM) != 0) + mail_index_lookup_ext(mail->trans->trans_view, _mail->seq, + mbox->md5hdr_ext_idx, &ext_data, NULL); + if (ext_data == NULL) { + *value_r = ""; return 0; + } + if (memcmp(ext_data, empty_md5, 16) != 0) { + *value_r = binary_to_hex(ext_data, 16); + return 0; + } - /* i guess in theory the EMPTY_MD5_SUM is valid and can happen, + /* i guess in theory the empty_md5 is valid and can happen, but it's almost guaranteed that it means the MD5 sum is missing. recalculate it. */ mbox->mbox_save_md5 = TRUE;
--- a/src/lib-storage/index/mbox/mbox-save.c Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/mbox/mbox-save.c Thu Jul 30 19:37:50 2009 -0400 @@ -642,7 +642,7 @@ } mbox_md5_finish(ctx->mbox_md5_ctx, hdr_md5_sum); mail_index_update_ext(ctx->trans, ctx->seq, - ctx->mbox->ibox.md5hdr_ext_idx, + ctx->mbox->md5hdr_ext_idx, hdr_md5_sum, NULL); }
--- a/src/lib-storage/index/mbox/mbox-storage.c Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/mbox/mbox-storage.c Thu Jul 30 19:37:50 2009 -0400 @@ -358,6 +358,9 @@ mail_index_ext_register(mbox->ibox.index, "mbox", sizeof(mbox->mbox_hdr), sizeof(uint64_t), sizeof(uint64_t)); + mbox->md5hdr_ext_idx = + mail_index_ext_register(mbox->ibox.index, "header-md5", + 0, 16, 1); if ((storage->flags & MAIL_STORAGE_FLAG_KEEP_HEADER_MD5) != 0) mbox->mbox_save_md5 = TRUE;
--- a/src/lib-storage/index/mbox/mbox-storage.h Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/mbox/mbox-storage.h Thu Jul 30 19:37:50 2009 -0400 @@ -46,7 +46,7 @@ struct timeout *keep_lock_to; bool mbox_writeonly; - uint32_t mbox_ext_idx; + uint32_t mbox_ext_idx, md5hdr_ext_idx; struct mbox_index_header mbox_hdr; const struct mailbox_update *sync_hdr_update;
--- a/src/lib-storage/index/mbox/mbox-sync-parse.c Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/mbox/mbox-sync-parse.c Thu Jul 30 19:37:50 2009 -0400 @@ -592,8 +592,7 @@ /* match by MD5 sum */ mbox->mbox_save_md5 = TRUE; - mail_index_lookup_ext(view, seq, mbox->ibox.md5hdr_ext_idx, - &data, NULL); + mail_index_lookup_ext(view, seq, mbox->md5hdr_ext_idx, &data, NULL); return data == NULL ? 0 : memcmp(data, ctx.hdr_md5_sum, 16) == 0; }
--- a/src/lib-storage/index/mbox/mbox-sync.c Thu Jul 30 19:30:15 2009 -0400 +++ b/src/lib-storage/index/mbox/mbox-sync.c Thu Jul 30 19:37:50 2009 -0400 @@ -252,7 +252,7 @@ rec = mail_index_lookup(sync_ctx->sync_view, sync_ctx->idx_seq); mail_index_lookup_ext(sync_ctx->sync_view, sync_ctx->idx_seq, - sync_ctx->mbox->ibox.md5hdr_ext_idx, + sync_ctx->mbox->md5hdr_ext_idx, &data, NULL); if (data != NULL && memcmp(data, hdr_md5_sum, 16) == 0) break; @@ -311,12 +311,11 @@ const void *ext_data; mail_index_lookup_ext(sync_ctx->sync_view, sync_ctx->idx_seq, - sync_ctx->mbox->ibox.md5hdr_ext_idx, - &ext_data, NULL); + sync_ctx->mbox->md5hdr_ext_idx, &ext_data, NULL); if (ext_data == NULL || memcmp(mail_ctx->hdr_md5_sum, ext_data, 16) != 0) { mail_index_update_ext(sync_ctx->t, sync_ctx->idx_seq, - sync_ctx->mbox->ibox.md5hdr_ext_idx, + sync_ctx->mbox->md5hdr_ext_idx, mail_ctx->hdr_md5_sum, NULL); } } @@ -425,7 +424,7 @@ if (sync_ctx->mbox->mbox_save_md5 != 0) { mail_index_update_ext(sync_ctx->t, sync_ctx->idx_seq, - sync_ctx->mbox->ibox.md5hdr_ext_idx, + sync_ctx->mbox->md5hdr_ext_idx, mail_ctx->hdr_md5_sum, NULL); } } else {