From f55d974cc88f02d8a3071dbba55b626756fa4a75 Mon Sep 17 00:00:00 2001 From: Carlo Landmeter Date: Thu, 3 Nov 2011 14:34:44 +0000 Subject: testing/dbmail: add missing patches --- testing/dbmail/gmime-2.6.patch | 32 ++++ testing/dbmail/post-rc3.patch | 329 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 361 insertions(+) create mode 100644 testing/dbmail/gmime-2.6.patch create mode 100644 testing/dbmail/post-rc3.patch diff --git a/testing/dbmail/gmime-2.6.patch b/testing/dbmail/gmime-2.6.patch new file mode 100644 index 000000000..105ec5e6b --- /dev/null +++ b/testing/dbmail/gmime-2.6.patch @@ -0,0 +1,32 @@ +--- a/acinclude.m4.orig ++++ b/acinclude.m4 +@@ -407,7 +407,7 @@ + AC_MSG_ERROR([pkg-config executable not found. Make sure pkg-config is in your path]) + else + AC_MSG_CHECKING([GMime headers]) +- ac_gmime_cflags=`${gmimeconfig} --cflags gmime-2.4` ++ ac_gmime_cflags=`${gmimeconfig} --cflags gmime-2.6` + if test -z "$ac_gmime_cflags" + then + AC_MSG_RESULT([no]) +@@ -418,7 +418,7 @@ + fi + + AC_MSG_CHECKING([GMime libraries]) +- ac_gmime_libs=`${gmimeconfig} --libs gmime-2.4` ++ ac_gmime_libs=`${gmimeconfig} --libs gmime-2.6` + if test -z "$ac_gmime_libs" + then + AC_MSG_RESULT([no]) +@@ -427,9 +427,9 @@ + LDFLAGS="$LDFLAGS $ac_gmime_libs" + AC_MSG_RESULT([$ac_gmime_libs]) + fi +- ac_gmime_minvers="2.4.6" ++ ac_gmime_minvers="2.6.0" + AC_MSG_CHECKING([GMime version >= $ac_gmime_minvers]) +- ac_gmime_vers=`${gmimeconfig} --atleast-version=$ac_gmime_minvers gmime-2.4 && echo yes` ++ ac_gmime_vers=`${gmimeconfig} --atleast-version=$ac_gmime_minvers gmime-2.6 && echo yes` + if test -z "$ac_gmime_vers" + then + AC_MSG_ERROR([At least GMime version $ac_gmime_minvers is required.]) diff --git a/testing/dbmail/post-rc3.patch b/testing/dbmail/post-rc3.patch new file mode 100644 index 000000000..86726a114 --- /dev/null +++ b/testing/dbmail/post-rc3.patch @@ -0,0 +1,329 @@ +From b73172be67b4665b04c791f914cf284e01dea33c Mon Sep 17 00:00:00 2001 +From: Paul J Stevens +Date: Mon, 15 Aug 2011 16:11:32 +0200 +Subject: [PATCH 1/8] fix broken SEARCH TEXT (#912)' + +--- + src/dbmail-mailbox.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/dbmail-mailbox.c b/src/dbmail-mailbox.c +index 3491105..09be275 100644 +--- a/src/dbmail-mailbox.c ++++ b/src/dbmail-mailbox.c +@@ -1183,7 +1183,7 @@ static GTree * mailbox_search(DbmailMailbox *self, search_key_t *s) + + case IST_DATA_TEXT: + +- g_string_printf(q,"SELECT DISTINCT m.message_idnr" ++ g_string_printf(q,"SELECT DISTINCT m.message_idnr " + "FROM %smimeparts k " + "LEFT JOIN %spartlists l ON k.id=l.part_id " + "LEFT JOIN %sphysmessage p ON l.physmessage_id=p.id " +-- +1.7.7.1 + +From cd5cc297ab1c05103c45f6ee903298eca5357a19 Mon Sep 17 00:00:00 2001 +From: Paul J Stevens +Date: Sat, 20 Aug 2011 14:00:35 +0200 +Subject: [PATCH 2/8] fix dbmail.h generation (#916) + +--- + acinclude.m4 | 2 +- + configure | 2 +- + src/dbmail.h.in | 4 +--- + 3 files changed, 3 insertions(+), 5 deletions(-) + +diff --git a/acinclude.m4 b/acinclude.m4 +index 2d2960d..fbf702a 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -300,7 +300,7 @@ AC_DEFUN([DM_CHECK_ZDB], [dnl + ]) + + AC_DEFUN([DM_SET_SQLITECREATE], [dnl +- SQLITECREATE=`sed -e 's/\"/\\\"/g' -e 's/^/\"/' -e 's/$/\\\n\" \\\\/' sql/sqlite/create_tables.sqlite` ++ SQLITECREATE=`sed -e 's/\"/\\\"/g' -e 's/^/\"/' -e 's/$/\\\n\"/' -e '$!s/$/ \\\\/' sql/sqlite/create_tables.sqlite` + ]) + + AC_DEFUN([DM_CHECK_MATH], [dnl +diff --git a/configure b/configure +index 6be85f6..e9d6e84 100755 +--- a/configure ++++ b/configure +@@ -6697,7 +6697,7 @@ if test "x$ac_cv_lib_crypt_crypt" = x""yes; then : + fi + + +- SQLITECREATE=`sed -e 's/\"/\\\"/g' -e 's/^/\"/' -e 's/$/\\\n\" \\\\/' sql/sqlite/create_tables.sqlite` ++ SQLITECREATE=`sed -e 's/\"/\\\"/g' -e 's/^/\"/' -e 's/$/\\\n\"/' -e '$!s/$/ \\\\/' sql/sqlite/create_tables.sqlite` + + + +diff --git a/src/dbmail.h.in b/src/dbmail.h.in +index 956246a..15acc31 100644 +--- a/src/dbmail.h.in ++++ b/src/dbmail.h.in +@@ -183,9 +183,7 @@ + "" + + /* include sql/sqlite/create_tables.sqlite for autocreation */ +-#define DM_SQLITECREATE \ +-@SQLITECREATE@ +-"" ++#define DM_SQLITECREATE @SQLITECREATE@ + + /** default directory and extension for pidfiles */ + #define DEFAULT_PID_DIR "@DM_STATEDIR@" +-- +1.7.7.1 + +From 0e640aa861ceebebff59877440d084fa2dcd9efd Mon Sep 17 00:00:00 2001 +From: Paul J Stevens +Date: Thu, 22 Sep 2011 16:39:53 +0200 +Subject: [PATCH 3/8] fix IDLE regression (#927) + +--- + src/imapcommands.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/src/imapcommands.c b/src/imapcommands.c +index 7bfe3c1..8159214 100644 +--- a/src/imapcommands.c ++++ b/src/imapcommands.c +@@ -1113,6 +1113,7 @@ int _ic_idle(ImapSession *self) + int idle_timeout = IDLE_TIMEOUT; + field_t val; + ++ ci_cork(self->ci); + GETCONFIGVALUE("idle_timeout", "IMAP", val); + if ( strlen(val) && (idle_timeout = atoi(val)) <= 0 ) { + TRACE(TRACE_ERR, "[%p] illegal value for idle_timeout [%s]", self, val); +@@ -1125,6 +1126,7 @@ int _ic_idle(ImapSession *self) + dbmail_imap_session_buff_printf(self, "+ idling\r\n"); + dbmail_imap_session_mailbox_status(self,TRUE); + dbmail_imap_session_buff_flush(self); ++ ci_uncork(self->ci); + + return 0; + } +-- +1.7.7.1 + +From a82434e61e10f7e3e6b5feefb12c341ad96229ea Mon Sep 17 00:00:00 2001 +From: Paul J Stevens +Date: Fri, 21 Oct 2011 15:57:31 +0200 +Subject: [PATCH 4/8] handle hangups better during read (#932) + +--- + src/imap4.c | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/src/imap4.c b/src/imap4.c +index 5fbf849..1d6869a 100644 +--- a/src/imap4.c ++++ b/src/imap4.c +@@ -143,20 +143,23 @@ void imap_cb_read(void *arg) + { + ImapSession *session = (ImapSession *) arg; + +- TRACE(TRACE_DEBUG,"reading..."); +- + ci_read_cb(session->ci); + + size_t have = session->ci->read_buffer->len; ++ size_t need = session->ci->rbuff_size; ++ ++ int enough = (need>0?(have == 0):(have > 0)); ++ + int state = session->ci->client_state; + ++ TRACE(TRACE_DEBUG,"reading %d: %ld/%ld", enough, have, need); + if (state & CLIENT_ERR) { + ci_cork(session->ci); + dbmail_imap_session_set_state(session,CLIENTSTATE_ERROR); + return; + } + if (state & CLIENT_EOF) { +- if (have) ++ if (enough) + imap_handle_input(session); + else + imap_session_bailout(session); +-- +1.7.7.1 + +From f9f332c7b917c6b0683b0d43a0f614d675181855 Mon Sep 17 00:00:00 2001 +From: Paul J Stevens +Date: Sat, 22 Oct 2011 13:53:12 +0200 +Subject: [PATCH 5/8] gracefully degrade after decoding error (#930) + +--- + src/dbmail-message.c | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/dbmail-message.c b/src/dbmail-message.c +index e62cfb4..cf8fc23 100644 +--- a/src/dbmail-message.c ++++ b/src/dbmail-message.c +@@ -1457,12 +1457,11 @@ static int _header_value_get_id(const char *value, const char *sortfield, const + CATCH(SQLException) + LOG_SQLERROR; + db_rollback_transaction(c); ++ *id = 0; + FINALLY + db_con_close(c); + END_TRY; + +- assert(*id); +- + g_free(hash); + + return TRUE; +@@ -1596,7 +1595,10 @@ static gboolean _header_cache(const char UNUSED *key, const char *header, gpoint + g_free(value); + + /* Insert relation between physmessage, header name and header value */ +- _header_insert(self->physid, headername_id, headervalue_id); ++ if (headervalue_id) ++ _header_insert(self->physid, headername_id, headervalue_id); ++ else ++ TRACE(TRACE_INFO, "error inserting headervalue. skipping."); + + headervalue_id=0; + +-- +1.7.7.1 + +From 11bcc6294807be46ded604b23cad2648fcbf7c5b Mon Sep 17 00:00:00 2001 +From: Paul J Stevens +Date: Sat, 22 Oct 2011 18:08:59 +0200 +Subject: [PATCH 6/8] reset timeout after idle is done (#932) + +--- + src/imap4.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/src/imap4.c b/src/imap4.c +index 1d6869a..69a7a7e 100644 +--- a/src/imap4.c ++++ b/src/imap4.c +@@ -468,6 +468,7 @@ void dbmail_imap_session_reset(ImapSession *session) + session->parser_state = FALSE; + dbmail_imap_session_args_free(session, FALSE); + ++ session->ci->timeout->tv_sec = server_conf->timeout; + ci_uncork(session->ci); + + return; +-- +1.7.7.1 + +From 8dc7ab5ec45a4321af191fecd7da1f50d76d3ce1 Mon Sep 17 00:00:00 2001 +From: Paul J Stevens +Date: Mon, 24 Oct 2011 16:23:59 +0200 +Subject: [PATCH 7/8] call database schema version check on all connections + +--- + src/dm_db.c | 17 ++++++++++++----- + src/main.c | 5 ----- + 2 files changed, 12 insertions(+), 10 deletions(-) + +diff --git a/src/dm_db.c b/src/dm_db.c +index 22cfe95..ec516e8 100644 +--- a/src/dm_db.c ++++ b/src/dm_db.c +@@ -216,7 +216,7 @@ int db_connect(void) + db_connected = 3; + db_con_close(c); + +- return 0; ++ return db_check_version(); + } + + /* But sometimes this gets called after help text or an +@@ -803,19 +803,26 @@ static void check_table_exists(C c, const char *table, const char *errormessage) + int db_check_version(void) + { + C c = db_con_get(); ++ volatile int ok = 0; + TRY + check_table_exists(c, "physmessage", "pre-2.0 database incompatible. You need to run the conversion script"); + check_table_exists(c, "headervalue", "2.0 database incompatible. You need to add the header tables."); +- check_table_exists(c, "envelope", "2.1 database incompatible. You need to add the envelopes table and run dbmail-util -by"); +- check_table_exists(c, "mimeparts", "2.3 database incompatible."); +- check_table_exists(c, "header", "2.3.5 database incompatible - single instance header storage missing."); ++ check_table_exists(c, "envelope", "2.1+ database incompatible. You need to add the envelopes table and run dbmail-util -by"); ++ check_table_exists(c, "mimeparts", "3.x database incompatible."); ++ check_table_exists(c, "header", "3.x database incompatible - single instance header storage missing."); ++ ok = 1; + CATCH(SQLException) + LOG_SQLERROR; + FINALLY + db_con_close(c); + END_TRY; + +- return DM_SUCCESS; ++ if (ok) ++ TRACE(TRACE_DEBUG,"Tables OK"); ++ else ++ TRACE(TRACE_WARNING,"Schema version incompatible. Bailing out"); ++ ++ return ok?DM_SUCCESS:DM_EQUERY; + } + + /* test existence of usermap table */ +diff --git a/src/main.c b/src/main.c +index f9c8328..4065997 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -240,11 +240,6 @@ int main(int argc, char *argv[]) + goto freeall; + } + +- if (db_check_version() != 0) { +- exitcode = EX_TEMPFAIL; +- goto freeall; +- } +- + /* read the whole message */ + memset(buf, 0, sizeof(buf)); + while ( (n = read(fileno(stdin), (void *)buf, READ_SIZE-1)) > 0) { +-- +1.7.7.1 + +From 105cfefa0a1cc7366b66c6759e05e46ae5a6e53c Mon Sep 17 00:00:00 2001 +From: Paul J Stevens +Date: Sat, 29 Oct 2011 15:57:09 +0200 +Subject: [PATCH 8/8] gmime-2.6 compatibility (#935) + +--- + src/dbmail-message.c | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/src/dbmail-message.c b/src/dbmail-message.c +index cf8fc23..8a1a66c 100644 +--- a/src/dbmail-message.c ++++ b/src/dbmail-message.c +@@ -561,7 +561,7 @@ gboolean store_mime_object(GMimeObject *parent, GMimeObject *object, DbmailMessa + // part of the rfc822 headers + skiphead = TRUE; + +- g_mime_header_list_set_raw (GMIME_MESSAGE(object)->mime_part->headers, NULL); ++ g_mime_header_list_set_stream (GMIME_MESSAGE(object)->mime_part->headers, NULL); + mime_part = g_mime_message_get_mime_part((GMimeMessage *)object); + } else + mime_part = object; +@@ -1744,8 +1744,7 @@ DbmailMessage * dbmail_message_construct(DbmailMessage *self, + TRACE(TRACE_DEBUG, "from: [%s] to: [%s] subject: [%s] body: [%s]", from, to, subject, body); + g_mime_message_set_sender(message, from); + g_mime_message_set_subject(message, subject); +- g_mime_object_set_header(GMIME_OBJECT(message), "To", to); +- g_mime_message_add_recipient(message, GMIME_RECIPIENT_TYPE_TO, "", to); ++ g_mime_message_add_recipient(message, GMIME_RECIPIENT_TYPE_TO, NULL, to); + + // construct mime-part + mime_part = g_mime_part_new(); +-- +1.7.7.1 + -- cgit v1.2.3