[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