From: Timo Sirainen Date: Sun, 20 Jun 2004 06:21:48 +0000 (+0300) Subject: Filter internal headers from user visible input stream. Make mailbox_save() X-Git-Tag: 1.1.alpha1~3909 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=18565c69efcd7db003dbf27cf625ed822e889fb1;p=thirdparty%2Fdovecot%2Fcore.git Filter internal headers from user visible input stream. Make mailbox_save() use the same header list. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/mbox/mbox-mail.c b/src/lib-storage/index/mbox/mbox-mail.c index 29a2988841..6e5f03c0ac 100644 --- a/src/lib-storage/index/mbox/mbox-mail.c +++ b/src/lib-storage/index/mbox/mbox-mail.c @@ -7,6 +7,7 @@ #include "mbox-file.h" #include "mbox-sync-private.h" #include "istream-raw-mbox.h" +#include "istream-header-filter.h" #include #include @@ -121,8 +122,14 @@ static struct istream *mbox_mail_get_stream(struct mail *_mail, // FIXME: need to hide the headers raw_stream = mail->ibox->mbox_stream; offset = istream_raw_mbox_get_header_offset(raw_stream); - data->stream = i_stream_create_limit(default_pool, raw_stream, - offset, (uoff_t)-1); + raw_stream = i_stream_create_limit(default_pool, raw_stream, + offset, (uoff_t)-1); + data->stream = + i_stream_create_header_filter(default_pool, + raw_stream, + mbox_hide_headers, + mbox_hide_headers_count); + i_stream_unref(raw_stream); } return index_mail_init_stream(mail, hdr_size, body_size); diff --git a/src/lib-storage/index/mbox/mbox-save.c b/src/lib-storage/index/mbox/mbox-save.c index a3b136ae30..3060cd47ad 100644 --- a/src/lib-storage/index/mbox/mbox-save.c +++ b/src/lib-storage/index/mbox/mbox-save.c @@ -170,33 +170,8 @@ static int save_header_callback(const char *name, write_func_t *write_func, return 1; } - switch (*name) { - case 'C': - case 'c': - if (strcasecmp(name, "Content-Length") == 0) - return 0; - break; - case 'S': - case 's': - if (strcasecmp(name, "Status") == 0) - return 0; - break; - case 'X': - case 'x': - if (strcasecmp(name, "X-UID") == 0) - return 0; - if (strcasecmp(name, "X-Status") == 0) - return 0; - if (strcasecmp(name, "X-Keywords") == 0) - return 0; - if (strcasecmp(name, "X-IMAP") == 0) - return 0; - if (strcasecmp(name, "X-IMAPbase") == 0) - return 0; - break; - } - - return 1; + return bsearch(name, mbox_hide_headers, mbox_hide_headers_count, + sizeof(*mbox_hide_headers), bsearch_strcasecmp) == NULL; } static int mbox_save_init_sync(struct mbox_transaction_context *t) diff --git a/src/lib-storage/index/mbox/mbox-storage.c b/src/lib-storage/index/mbox/mbox-storage.c index 4bab6232aa..8726677c3b 100644 --- a/src/lib-storage/index/mbox/mbox-storage.c +++ b/src/lib-storage/index/mbox/mbox-storage.c @@ -19,6 +19,18 @@ #define CREATE_MODE 0770 /* umask() should limit it more */ +/* NOTE: must be sorted for istream-header-filter. */ +const char *mbox_hide_headers[] = { + "Content-Length", + "Status", + "X-IMAP", + "X-IMAPbase", + "X-Keywords", + "X-Status", + "X-UID", +}; +size_t mbox_hide_headers_count = 7; + extern struct mail_storage mbox_storage; extern struct mailbox mbox_mailbox; diff --git a/src/lib-storage/index/mbox/mbox-storage.h b/src/lib-storage/index/mbox/mbox-storage.h index a5cddcca52..610b162fae 100644 --- a/src/lib-storage/index/mbox/mbox-storage.h +++ b/src/lib-storage/index/mbox/mbox-storage.h @@ -18,6 +18,8 @@ struct mbox_transaction_context { }; extern struct mail mbox_mail; +extern const char *mbox_hide_headers[]; +extern size_t mbox_hide_headers_count; int mbox_set_syscall_error(struct index_mailbox *ibox, const char *function);