dovecot: Complain about unknown extension introduction IDs in lo...

dovecot at dovecot.org dovecot at dovecot.org
Sun Sep 2 03:32:48 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/5dcd55d1a47f
changeset: 6346:5dcd55d1a47f
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Sep 02 03:32:45 2007 +0300
description:
Complain about unknown extension introduction IDs in log only once per sync.

diffstat:

3 files changed, 24 insertions(+)
src/lib-index/mail-index-sync-ext.c     |   21 +++++++++++++++++++++
src/lib-index/mail-index-sync-private.h |    1 +
src/lib-index/mail-index-sync-update.c  |    2 ++

diffs (61 lines):

diff -r 1829e8e32ddc -r 5dcd55d1a47f src/lib-index/mail-index-sync-ext.c
--- a/src/lib-index/mail-index-sync-ext.c	Sun Sep 02 03:13:19 2007 +0300
+++ b/src/lib-index/mail-index-sync-ext.c	Sun Sep 02 03:32:45 2007 +0300
@@ -331,6 +331,25 @@ sync_ext_resize(const struct mail_transa
 	}
 }
 
+static bool
+mail_index_sync_ext_unknown_complain(struct mail_index_sync_map_ctx *ctx,
+				     uint32_t ext_id)
+{
+	unsigned char *p;
+
+	if (ctx->unknown_extensions == NULL) {
+		ctx->unknown_extensions =
+			buffer_create_dynamic(default_pool, ext_id + 8);
+	}
+	p = buffer_get_space_unsafe(ctx->unknown_extensions, ext_id, 1);
+	if (*p != 0) {
+		/* we've already complained once */
+		return FALSE;
+	}
+	*p = 1;
+	return TRUE;
+}
+
 int mail_index_sync_ext_intro(struct mail_index_sync_map_ctx *ctx,
 			      const struct mail_transaction_ext_intro *u)
 {
@@ -344,6 +363,8 @@ int mail_index_sync_ext_intro(struct mai
 	if (u->ext_id != (uint32_t)-1 &&
 	    (!array_is_created(&map->extensions) ||
 	     u->ext_id >= array_count(&map->extensions))) {
+		if (!mail_index_sync_ext_unknown_complain(ctx, u->ext_id))
+			return -1;
 		mail_index_sync_set_corrupted(ctx,
 			"Extension introduction for unknown id %u", u->ext_id);
 		return -1;
diff -r 1829e8e32ddc -r 5dcd55d1a47f src/lib-index/mail-index-sync-private.h
--- a/src/lib-index/mail-index-sync-private.h	Sun Sep 02 03:13:19 2007 +0300
+++ b/src/lib-index/mail-index-sync-private.h	Sun Sep 02 03:32:45 2007 +0300
@@ -31,6 +31,7 @@ struct mail_index_sync_map_ctx {
 
 	ARRAY_DEFINE(expunge_handlers, struct mail_index_expunge_handler);
 	ARRAY_DEFINE(extra_contexts, void *);
+	buffer_t *unknown_extensions;
 
         enum mail_index_sync_handler_type type;
 
diff -r 1829e8e32ddc -r 5dcd55d1a47f src/lib-index/mail-index-sync-update.c
--- a/src/lib-index/mail-index-sync-update.c	Sun Sep 02 03:13:19 2007 +0300
+++ b/src/lib-index/mail-index-sync-update.c	Sun Sep 02 03:32:45 2007 +0300
@@ -617,6 +617,8 @@ void mail_index_sync_map_init(struct mai
 
 void mail_index_sync_map_deinit(struct mail_index_sync_map_ctx *sync_map_ctx)
 {
+	if (sync_map_ctx->unknown_extensions != NULL)
+		buffer_free(sync_map_ctx->unknown_extensions);
 	if (sync_map_ctx->expunge_handlers_used)
 		mail_index_sync_deinit_expunge_handlers(sync_map_ctx);
 	mail_index_sync_deinit_handlers(sync_map_ctx);


More information about the dovecot-cvs mailing list