]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Filter internal headers from user visible input stream. Make mailbox_save()
authorTimo Sirainen <tss@iki.fi>
Sun, 20 Jun 2004 06:21:48 +0000 (09:21 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 20 Jun 2004 06:21:48 +0000 (09:21 +0300)
use the same header list.

--HG--
branch : HEAD

src/lib-storage/index/mbox/mbox-mail.c
src/lib-storage/index/mbox/mbox-save.c
src/lib-storage/index/mbox/mbox-storage.c
src/lib-storage/index/mbox/mbox-storage.h

index 29a2988841caecb5fc3c13612263f611b0e23e9d..6e5f03c0ac601167334b96503e4b3c6f7d551481 100644 (file)
@@ -7,6 +7,7 @@
 #include "mbox-file.h"
 #include "mbox-sync-private.h"
 #include "istream-raw-mbox.h"
+#include "istream-header-filter.h"
 
 #include <fcntl.h>
 #include <unistd.h>
@@ -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);
index a3b136ae307f9cdf64f0fde651d816d1825fcdf8..3060cd47ad3d13b188bcf7387d0fc26fef7d3d23 100644 (file)
@@ -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)
index 4bab6232aa52b62834dd37ca954892740a13b6e9..8726677c3bffd9e3cbdadea9f03a60ef52e8d427 100644 (file)
 
 #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;
 
index a5cddcca52ef415c1135ad54187d093976faa23a..610b162faef16fcab98b45df29ede7223c505e3f 100644 (file)
@@ -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);