From: Timo Sirainen Date: Tue, 22 Jun 2010 20:38:18 +0000 (+0100) Subject: fts: Give binary MIME part data only to FTS backends that support it. X-Git-Tag: 2.0.rc1~104 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2116e38edb504e72eadaf5a51c3dd9b1a81039ea;p=thirdparty%2Fdovecot%2Fcore.git fts: Give binary MIME part data only to FTS backends that support it. --HG-- branch : HEAD --- diff --git a/src/plugins/fts/fts-api-private.h b/src/plugins/fts/fts-api-private.h index 51186df772..359508c02f 100644 --- a/src/plugins/fts/fts-api-private.h +++ b/src/plugins/fts/fts-api-private.h @@ -50,7 +50,9 @@ enum fts_backend_flags { optimized. */ FTS_BACKEND_FLAG_SUBSTRING_LOOKUPS = 0x01, /* Backend supports virtual mailbox lookups. */ - FTS_BACKEND_FLAG_VIRTUAL_LOOKUPS = 0x02 + FTS_BACKEND_FLAG_VIRTUAL_LOOKUPS = 0x02, + /* Backend supports indexing binary MIME parts */ + FTS_BACKEND_FLAG_BINARY_MIME_PARTS = 0x04 }; struct fts_backend { diff --git a/src/plugins/fts/fts-storage.c b/src/plugins/fts/fts-storage.c index c82720be17..605d7ee41a 100644 --- a/src/plugins/fts/fts-storage.c +++ b/src/plugins/fts/fts-storage.c @@ -143,6 +143,7 @@ static void fts_build_mail_header(struct fts_storage_build_context *ctx, static int fts_build_mail(struct fts_storage_build_context *ctx, uint32_t uid) { + enum message_decoder_flags decoder_flags = MESSAGE_DECODER_FLAG_DTCASE; struct istream *input; struct message_parser_ctx *parser; struct message_decoder_context *decoder; @@ -160,8 +161,11 @@ static int fts_build_mail(struct fts_storage_build_context *ctx, uint32_t uid) parser = message_parser_init(pool_datastack_create(), input, MESSAGE_HEADER_PARSER_FLAG_CLEAN_ONELINE, 0); - decoder = message_decoder_init(MESSAGE_DECODER_FLAG_DTCASE | - MESSAGE_DECODER_FLAG_RETURN_BINARY); + + + if ((ctx->build->backend->flags & FTS_BACKEND_FLAG_BINARY_MIME_PARTS) != 0) + decoder_flags |= MESSAGE_DECODER_FLAG_RETURN_BINARY; + decoder = message_decoder_init(decoder_flags); for (;;) { ret = message_parser_parse_next_block(parser, &raw_block); i_assert(ret != 0);