changeset 19686:d3aa060852e6

lib-mail, dsync: Moved dsync_mail_hash_more() to lib-mail/message-header-hash.*
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 29 Jan 2016 00:08:33 +0200
parents 71627df01608
children 2166e0f25e43
files src/doveadm/dsync/Makefile.am src/doveadm/dsync/dsync-mail.c src/doveadm/dsync/dsync-mail.h src/doveadm/dsync/test-dsync-mail.c src/lib-mail/Makefile.am src/lib-mail/message-header-hash.c src/lib-mail/message-header-hash.h src/lib-mail/test-message-header-hash.c
diffstat 8 files changed, 104 insertions(+), 89 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/dsync/Makefile.am	Mon Feb 01 14:44:11 2016 +0200
+++ b/src/doveadm/dsync/Makefile.am	Fri Jan 29 00:08:33 2016 +0200
@@ -58,7 +58,6 @@
 	dsync-transaction-log-scan.h
 
 test_programs = \
-	test-dsync-mail \
 	test-dsync-mailbox-tree-sync
 
 noinst_PROGRAMS = $(test_programs)
@@ -67,10 +66,6 @@
 	../../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)
--- a/src/doveadm/dsync/dsync-mail.c	Mon Feb 01 14:44:11 2016 +0200
+++ b/src/doveadm/dsync/dsync-mail.c	Fri Jan 29 00:08:33 2016 +0200
@@ -6,6 +6,7 @@
 #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"
@@ -24,45 +25,6 @@
 	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)
 {
@@ -88,7 +50,7 @@
 			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)
--- a/src/doveadm/dsync/dsync-mail.h	Mon Feb 01 14:44:11 2016 +0200
+++ b/src/doveadm/dsync/dsync-mail.h	Fri Jan 29 00:08:33 2016 +0200
@@ -96,8 +96,4 @@
 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
--- a/src/doveadm/dsync/test-dsync-mail.c	Mon Feb 01 14:44:11 2016 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/* Copyright (c) 2016 Dovecot authors, see the included COPYING file */
-
-#include "lib.h"
-#include "md5.h"
-#include "dsync-mail.h"
-#include "test-common.h"
-
-static const unsigned char test_input[] =
-	"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
-	"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
-	"\x20!?x??yz\x7f\x80\x90\xff-plop\xff";
-static const unsigned char test_output[] =
-	"?\t\n? !?x?yz?-plop?";
-
-static void test_dsync_mail_hash_more(void)
-{
-	struct md5_context md5_ctx;
-	unsigned char md5_input[MD5_RESULTLEN], md5_output[MD5_RESULTLEN];
-
-	test_begin("dsync_mail_hash_more v2");
-	md5_init(&md5_ctx);
-	dsync_mail_hash_more(&md5_ctx, 2, test_input, sizeof(test_input)-1);
-	md5_final(&md5_ctx, md5_input);
-
-	md5_init(&md5_ctx);
-	md5_update(&md5_ctx, test_output, sizeof(test_output)-1);
-	md5_final(&md5_ctx, md5_output);
-
-	test_assert(memcmp(md5_input, md5_output, MD5_RESULTLEN) == 0);
-	test_end();
-}
-
-int main(void)
-{
-	static void (*test_functions[])(void) = {
-		test_dsync_mail_hash_more,
-		NULL
-	};
-	return test_run(test_functions);
-}
--- a/src/lib-mail/Makefile.am	Mon Feb 01 14:44:11 2016 +0200
+++ b/src/lib-mail/Makefile.am	Fri Jan 29 00:08:33 2016 +0200
@@ -22,6 +22,7 @@
 	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 \
@@ -57,6 +58,7 @@
 	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 \
@@ -87,6 +89,7 @@
 	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 \
@@ -157,6 +160,10 @@
 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-mail/message-header-hash.c	Fri Jan 29 00:08:33 2016 +0200
@@ -0,0 +1,45 @@
+/* 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-mail/message-header-hash.h	Fri Jan 29 00:08:33 2016 +0200
@@ -0,0 +1,10 @@
+#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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-mail/test-message-header-hash.c	Fri Jan 29 00:08:33 2016 +0200
@@ -0,0 +1,40 @@
+/* Copyright (c) 2016 Dovecot authors, see the included COPYING file */
+
+#include "lib.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"
+	"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+	"\x20!?x??yz\x7f\x80\x90\xff-plop\xff";
+static const unsigned char test_output[] =
+	"?\t\n? !?x?yz?-plop?";
+
+static void test_dsync_mail_hash_more(void)
+{
+	struct md5_context md5_ctx;
+	unsigned char md5_input[MD5_RESULTLEN], md5_output[MD5_RESULTLEN];
+
+	test_begin("dsync_mail_hash_more v2");
+	md5_init(&md5_ctx);
+	message_header_hash_more(&md5_ctx, 2, test_input, sizeof(test_input)-1);
+	md5_final(&md5_ctx, md5_input);
+
+	md5_init(&md5_ctx);
+	md5_update(&md5_ctx, test_output, sizeof(test_output)-1);
+	md5_final(&md5_ctx, md5_output);
+
+	test_assert(memcmp(md5_input, md5_output, MD5_RESULTLEN) == 0);
+	test_end();
+}
+
+int main(void)
+{
+	static void (*test_functions[])(void) = {
+		test_dsync_mail_hash_more,
+		NULL
+	};
+	return test_run(test_functions);
+}