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