Mercurial > dovecot > original-hg > dovecot-1.2
changeset 1414:dcc9b7b868d8 HEAD
Rewrite Content-length header if it's broken. UID-validity change checking
was broken when first message was added to empty mbox.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 03 May 2003 20:31:13 +0300 |
parents | f9f69a6fdd63 |
children | c1a7da406bbd |
files | src/lib-index/mbox/mbox-append.c src/lib-index/mbox/mbox-index.c src/lib-index/mbox/mbox-index.h |
diffstat | 3 files changed, 17 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mbox/mbox-append.c Sat May 03 20:28:20 2003 +0300 +++ b/src/lib-index/mbox/mbox-append.c Sat May 03 20:31:13 2003 +0300 @@ -19,7 +19,7 @@ const unsigned char *data; unsigned char md5_digest[16]; size_t size, pos; - int ret; + int ret, dirty; /* get the From-line */ pos = 0; @@ -91,7 +91,7 @@ ret = 1; if (index->header->messages_count == 0 && - ctx.uid_validity != index->header->messages_count) { + ctx.uid_validity != index->header->uid_validity) { /* UID validity is different */ if (ctx.uid_validity == 0) { /* we have to write it to mbox */ @@ -116,8 +116,19 @@ /* X-UID header looks ok */ if (ret != 0) index->header->next_uid = ctx.uid; + dirty = ctx.content_length_broken && !index->mailbox_readonly; } else if (!index->mailbox_readonly) { /* Write X-UID for it */ + dirty = TRUE; + } else { + /* save MD5 */ + md5_final(&ctx.md5, md5_digest); + index->update_field_raw(update, DATA_FIELD_MD5, + md5_digest, sizeof(md5_digest)); + dirty = FALSE; + } + + if (dirty) { if (index->mbox_lock_type != MAIL_LOCK_EXCLUSIVE) { /* try again */ ret = 0; @@ -125,11 +136,6 @@ index->header->flags |= MAIL_INDEX_FLAG_DIRTY_MESSAGES; rec->index_flags |= INDEX_MAIL_FLAG_DIRTY; } - } else { - /* save MD5 */ - md5_final(&ctx.md5, md5_digest); - index->update_field_raw(update, DATA_FIELD_MD5, - md5_digest, sizeof(md5_digest)); } if (ret <= 0) {
--- a/src/lib-index/mbox/mbox-index.c Sat May 03 20:28:20 2003 +0300 +++ b/src/lib-index/mbox/mbox-index.c Sat May 03 20:31:13 2003 +0300 @@ -268,8 +268,10 @@ end_offset = start_offset + ctx->content_length; if (ctx->content_length == (uoff_t)-1 || !mbox_verify_end_of_body(ctx->input, end_offset)) { - if (ctx->content_length != (uoff_t)-1) + if (ctx->content_length != (uoff_t)-1) { i_stream_seek(ctx->input, start_offset); + ctx->content_length_broken = TRUE; + } mbox_skip_message(ctx->input); end_offset = ctx->input->v_offset; ctx->content_length = end_offset - start_offset;
--- a/src/lib-index/mbox/mbox-index.h Sat May 03 20:28:20 2003 +0300 +++ b/src/lib-index/mbox/mbox-index.h Sat May 03 20:31:13 2003 +0300 @@ -18,7 +18,7 @@ struct istream *input; uoff_t content_length; - int set_read_limit; + int set_read_limit, content_length_broken; }; int mbox_set_syscall_error(struct mail_index *index, const char *function);