]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Give binary MIME part data only to FTS backends that support it.
authorTimo Sirainen <tss@iki.fi>
Tue, 22 Jun 2010 20:38:18 +0000 (21:38 +0100)
committerTimo Sirainen <tss@iki.fi>
Tue, 22 Jun 2010 20:38:18 +0000 (21:38 +0100)
--HG--
branch : HEAD

src/plugins/fts/fts-api-private.h
src/plugins/fts/fts-storage.c

index 51186df7727c0399fc2c1c1a7159aae7c579c741..359508c02fba4505f4df356d8c4daca4520e8952 100644 (file)
@@ -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 {
index c82720be17e8622e901c2237a3016bd5f2bb28a0..605d7ee41ac0a69e34982ab5e13bdaa9e7d9ae94 100644 (file)
@@ -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);