[dovecot-cvs] dovecot/src/lib-index/mbox mbox-append.c,1.40,1.41 mbox-index.c,1.68,1.69 mbox-index.h,1.27,1.28
cras at procontrol.fi
cras at procontrol.fi
Sat May 3 21:31:15 EEST 2003
Update of /home/cvs/dovecot/src/lib-index/mbox
In directory danu:/tmp/cvs-serv27686
Modified Files:
mbox-append.c mbox-index.c mbox-index.h
Log Message:
Rewrite Content-length header if it's broken. UID-validity change checking
was broken when first message was added to empty mbox.
Index: mbox-append.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-append.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- mbox-append.c 6 Mar 2003 19:23:45 -0000 1.40
+++ mbox-append.c 3 May 2003 17:31:13 -0000 1.41
@@ -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) {
Index: mbox-index.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-index.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -d -r1.68 -r1.69
--- mbox-index.c 27 Apr 2003 16:11:30 -0000 1.68
+++ mbox-index.c 3 May 2003 17:31:13 -0000 1.69
@@ -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;
Index: mbox-index.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-index.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- mbox-index.h 13 Apr 2003 18:02:14 -0000 1.27
+++ mbox-index.h 3 May 2003 17:31:13 -0000 1.28
@@ -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);
More information about the dovecot-cvs
mailing list