dsync-transaction-log-scan.h
test_programs = \
- test-dsync-mail \
test-dsync-mailbox-tree-sync
noinst_PROGRAMS = $(test_programs)
../../lib-test/libtest.la \
../../lib/liblib.la
-test_dsync_mail_SOURCES = test-dsync-mail.c
-test_dsync_mail_LDADD = $(pkglib_LTLIBRARIES) $(test_libs)
-test_dsync_mail_DEPENDENCIES = $(pkglib_LTLIBRARIES) $(test_libs)
-
test_dsync_mailbox_tree_sync_SOURCES = test-dsync-mailbox-tree-sync.c
test_dsync_mailbox_tree_sync_LDADD = dsync-mailbox-tree-sync.lo dsync-mailbox-tree.lo $(test_libs)
test_dsync_mailbox_tree_sync_DEPENDENCIES = $(pkglib_LTLIBRARIES) $(test_libs)
#include "md5.h"
#include "istream.h"
#include "istream-crlf.h"
+#include "message-header-hash.h"
#include "message-size.h"
#include "mail-storage.h"
#include "dsync-mail.h"
return mailbox_header_lookup_init(box, hashed_headers);
}
-void dsync_mail_hash_more(struct md5_context *md5_ctx, unsigned int version,
- const unsigned char *data, size_t size)
-{
- size_t i, start;
-
- i_assert(version == 1 || version == 2);
-
- if (version == 1) {
- md5_update(md5_ctx, data, size);
- return;
- }
- /* - Dovecot IMAP replaces NULs with 0x80 character.
- - Dovecot POP3 with outlook-no-nuls workaround replaces NULs
- with 0x80 character.
- - Zimbra replaces 8bit chars with '?' in header fetches,
- but not body fetches.
- - Yahoo replaces 8bit chars with '?' in partial header
- fetches, but not POP3 TOP. UTF-8 character sequence writes only a
- single '?'
-
- So we'll just replace all control and 8bit chars with '?' and
- remove any repeated '?', which hopefully will satisfy everybody.
-
- (Keep this code in sync with pop3-migration plugin.)
- */
- for (i = start = 0; i < size; i++) {
- if ((data[i] < 0x20 || data[i] >= 0x7f || data[i] == '?') &&
- (data[i] != '\t' && data[i] != '\n')) {
- /* remove repeated '?' */
- if (start < i || i == 0) {
- md5_update(md5_ctx, data + start, i-start);
- md5_update(md5_ctx, "?", 1);
- }
- start = i+1;
- }
- }
- md5_update(md5_ctx, data + start, i-start);
-}
-
int dsync_mail_get_hdr_hash(struct mail *mail, unsigned int version,
const char **hdr_hash_r)
{
break;
if (size == 0)
break;
- dsync_mail_hash_more(&md5_ctx, version, data, size);
+ message_header_hash_more(&md5_ctx, version, data, size);
i_stream_skip(input, size);
}
if (input->stream_errno != 0)
void dsync_mail_change_dup(pool_t pool, const struct dsync_mail_change *src,
struct dsync_mail_change *dest_r);
-/* private: */
-void dsync_mail_hash_more(struct md5_context *md5_ctx, unsigned int version,
- const unsigned char *data, size_t size);
-
#endif
message-decoder.c \
message-header-decode.c \
message-header-encode.c \
+ message-header-hash.c \
message-header-parser.c \
message-id.c \
message-parser.c \
message-decoder.h \
message-header-decode.h \
message-header-encode.h \
+ message-header-hash.h \
message-header-parser.h \
message-id.h \
message-parser.h \
test-message-decoder \
test-message-header-decode \
test-message-header-encode \
+ test-message-header-hash \
test-message-header-parser \
test-message-id \
test-message-parser \
test_message_header_encode_LDADD = message-header-encode.lo $(test_libs)
test_message_header_encode_DEPENDENCIES = $(test_deps)
+test_message_header_hash_SOURCES = test-message-header-hash.c
+test_message_header_hash_LDADD = message-header-hash.lo $(test_libs)
+test_message_header_hash_DEPENDENCIES = $(test_deps)
+
test_message_header_parser_SOURCES = test-message-header-parser.c
test_message_header_parser_LDADD = message-header-parser.lo $(test_libs)
test_message_header_parser_DEPENDENCIES = $(test_deps)
--- /dev/null
+/* Copyright (c) 2013-2016 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "md5.h"
+#include "message-header-hash.h"
+
+void message_header_hash_more(struct md5_context *md5_ctx,
+ unsigned int version,
+ const unsigned char *data, size_t size)
+{
+ size_t i, start;
+
+ i_assert(version == 1 || version == 2);
+
+ if (version == 1) {
+ md5_update(md5_ctx, data, size);
+ return;
+ }
+ /* - Dovecot IMAP replaces NULs with 0x80 character.
+ - Dovecot POP3 with outlook-no-nuls workaround replaces NULs
+ with 0x80 character.
+ - Zimbra replaces 8bit chars with '?' in header fetches,
+ but not body fetches.
+ - Yahoo replaces 8bit chars with '?' in partial header
+ fetches, but not POP3 TOP. UTF-8 character sequence writes only a
+ single '?'
+
+ So we'll just replace all control and 8bit chars with '?' and
+ remove any repeated '?', which hopefully will satisfy everybody.
+
+ (Keep this code in sync with pop3-migration plugin.)
+ */
+ for (i = start = 0; i < size; i++) {
+ if ((data[i] < 0x20 || data[i] >= 0x7f || data[i] == '?') &&
+ (data[i] != '\t' && data[i] != '\n')) {
+ /* remove repeated '?' */
+ if (start < i || i == 0) {
+ md5_update(md5_ctx, data + start, i-start);
+ md5_update(md5_ctx, "?", 1);
+ }
+ start = i+1;
+ }
+ }
+ md5_update(md5_ctx, data + start, i-start);
+}
--- /dev/null
+#ifndef MESSAGE_HEADER_HASH_H
+#define MESSAGE_HEADER_HASH_H
+
+struct md5_context;
+
+void message_header_hash_more(struct md5_context *md5_ctx,
+ unsigned int version,
+ const unsigned char *data, size_t size);
+
+#endif
/* Copyright (c) 2016 Dovecot authors, see the included COPYING file */
#include "lib.h"
-#include "md5.h"
-#include "dsync-mail.h"
#include "test-common.h"
+#include "md5.h"
+#include "message-header-hash.h"
static const unsigned char test_input[] =
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
test_begin("dsync_mail_hash_more v2");
md5_init(&md5_ctx);
- dsync_mail_hash_more(&md5_ctx, 2, test_input, sizeof(test_input)-1);
+ message_header_hash_more(&md5_ctx, 2, test_input, sizeof(test_input)-1);
md5_final(&md5_ctx, md5_input);
md5_init(&md5_ctx);