From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45877) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cxzB8-00079N-Ec for guix-patches@gnu.org; Tue, 11 Apr 2017 13:02:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cxzB4-0006us-GV for guix-patches@gnu.org; Tue, 11 Apr 2017 13:02:06 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:44996) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cxzB4-0006ue-Ce for guix-patches@gnu.org; Tue, 11 Apr 2017 13:02:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1cxzB4-0004eG-4x for guix-patches@gnu.org; Tue, 11 Apr 2017 13:02:02 -0400 Subject: bug#26446: [PATCH 1/1] gnu: dovecot: Update to 2.2.29 [fixes CVE-2017-2669]. Resent-Message-ID: Received: from eggs.gnu.org ([2001:4830:134:3::10]:45676) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cxzAY-00072O-Al for guix-patches@gnu.org; Tue, 11 Apr 2017 13:01:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cxzAU-0006kZ-C1 for guix-patches@gnu.org; Tue, 11 Apr 2017 13:01:30 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:49771) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cxzAU-0006kF-1N for guix-patches@gnu.org; Tue, 11 Apr 2017 13:01:26 -0400 Received: from localhost.localdomain (unknown [172.56.29.149]) by mail.messagingengine.com (Postfix) with ESMTPA id 5BA687E04B for ; Tue, 11 Apr 2017 13:01:23 -0400 (EDT) From: Leo Famulari Date: Tue, 11 Apr 2017 13:01:16 -0400 Message-Id: <2919fdbaede514be581f29e0edc6531d3f7333af.1491930076.git.leo@famulari.name> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 26446@debbugs.gnu.org * gnu/packages/mail.scm (dovecot): Update to 2.2.29. [source]: Use 'dovecot-fix-failing-test.patch'. * gnu/packages/patches/dovecot-fix-failing-test.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/mail.scm | 8 +- .../patches/dovecot-fix-failing-test.patch | 118 +++++++++++++++++++++ 3 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 gnu/packages/patches/dovecot-fix-failing-test.patch diff --git a/gnu/local.mk b/gnu/local.mk index f3a4e54af..212228d5c 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -539,6 +539,7 @@ dist_patch_DATA = \ %D%/packages/patches/diffutils-gets-undeclared.patch \ %D%/packages/patches/doc++-include-directives.patch \ %D%/packages/patches/doc++-segfault-fix.patch \ + %D%/packages/patches/dovecot-fix-failing-test.patch \ %D%/packages/patches/doxygen-test.patch \ %D%/packages/patches/elfutils-tests-ptrace.patch \ %D%/packages/patches/elixir-disable-failing-tests.patch \ diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 49fdb32e8..1a6c505ef 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1086,15 +1086,17 @@ facilities for checking incoming mail.") (define-public dovecot (package (name "dovecot") - (version "2.2.28") + (version "2.2.29") (source (origin (method url-fetch) (uri (string-append "https://www.dovecot.org/releases/" (version-major+minor version) "/" name "-" version ".tar.gz")) - (sha256 (base32 - "098zpkmkk93372qnv6drgbfg8hp5mynspzc1735qgar6wdcqya70")))) + (patches (search-patches "dovecot-fix-failing-test.patch")) + (sha256 + (base32 + "19irf7b5mjqq68mrpdd38gxc0zp2nqib942kjp3aif3f2acylffr")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/patches/dovecot-fix-failing-test.patch b/gnu/packages/patches/dovecot-fix-failing-test.patch new file mode 100644 index 000000000..343bab03f --- /dev/null +++ b/gnu/packages/patches/dovecot-fix-failing-test.patch @@ -0,0 +1,118 @@ +This patch fixes a test failure in dovecot 2.2.29, like this [0]: + +------ +Making check in lib-imap-client +make[2]: Entering directory +`/builddir/build/BUILD/dovecot-2.2.29/src/lib-imap-client' +for bin in test-imapc-client; do \ + if ! ./$bin; then exit 1; fi; \ + done +Warning: imapc(127.0.0.1:0): connect(127.0.0.1, 0) failed: Connection +refused - reconnecting (delay 10 ms) +Error: imapc(127.0.0.1:0): connect(127.0.0.1, 0) failed: Connection +refused - disconnecting +test: random seed #1 was 1492054294 +imapc connect failed ................................................. : ok +Warning: imapc(127.0.0.1:42704): connect(127.0.0.1, 42704) timed out +after 0 seconds - reconnecting (delay 0 ms) +Error: imapc(127.0.0.1:42704): connect(127.0.0.1, 42704) timed out after +0 seconds - disconnecting +imapc banner hangs ................................................... : ok +Warning: imapc(127.0.0.1:36762): Authentication timed out after 0 +seconds - reconnecting (delay 0 ms) +Error: imapc(127.0.0.1:36762): Authentication failed: Disconnected from +server +imapc login hangs .................................................... : ok +test-imapc-client.c:358: Assert failed: test_imapc_cmd_last_reply_pop() +== IMAPC_COMMAND_STATE_OK +imapc reconnect ...................................................... : +FAILED +imapc reconnect resend commands ...................................... : ok +imapc reconnect resend commands failed ............................... : ok +imapc reconnect mailbox .............................................. : ok +1 / 7 tests failed +------ + +Patch copied from upstream source repository: + +https://github.com/dovecot/core/commit/3a1c64363a64cdfe9153eb6292d8923f38955d82 + +[0] +https://dovecot.org/pipermail/dovecot/2017-April/107751.html + +From 3a1c64363a64cdfe9153eb6292d8923f38955d82 Mon Sep 17 00:00:00 2001 +From: Timo Sirainen +Date: Mon, 10 Apr 2017 17:07:28 +0300 +Subject: [PATCH] lib-imap-client: Fix reconnection + +There was already code for reconnection. We just shouldn't have gone very +far in imapc_connection_connect() if we were still waiting for reconnection +delay to pass. +--- + src/lib-imap-client/imapc-connection.c | 25 +++++++++---------------- + 1 file changed, 9 insertions(+), 16 deletions(-) + +diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c +index 95067e6..6eaf1ab 100644 +--- a/src/lib-imap-client/imapc-connection.c ++++ b/src/lib-imap-client/imapc-connection.c +@@ -130,6 +130,7 @@ struct imapc_connection { + struct timeout *to_throttle, *to_throttle_shrink; + + unsigned int reconnecting:1; ++ unsigned int reconnect_waiting:1; + unsigned int reconnect_ok:1; + unsigned int idling:1; + unsigned int idle_stopping:1; +@@ -504,6 +505,7 @@ static bool imapc_connection_can_reconnect(struct imapc_connection *conn) + static void imapc_connection_reconnect(struct imapc_connection *conn) + { + conn->reconnect_ok = FALSE; ++ conn->reconnect_waiting = FALSE; + + if (conn->selected_box != NULL) + imapc_client_mailbox_reconnect(conn->selected_box); +@@ -536,6 +538,7 @@ imapc_connection_try_reconnect(struct imapc_connection *conn, + imapc_connection_disconnect_full(conn, TRUE); + conn->to = timeout_add(delay_msecs, imapc_connection_reconnect, conn); + conn->reconnect_count++; ++ conn->reconnect_waiting = TRUE; + } + } + } +@@ -1785,6 +1788,12 @@ void imapc_connection_connect(struct imapc_connection *conn) + + if (conn->fd != -1 || conn->dns_lookup != NULL) + return; ++ if (conn->reconnect_waiting) { ++ /* wait for the reconnection delay to finish before ++ doing anything. */ ++ return; ++ } ++ + conn->reconnecting = FALSE; + /* if we get disconnected before we've finished all the pending + commands, don't reconnect */ +@@ -1792,22 +1801,6 @@ void imapc_connection_connect(struct imapc_connection *conn) + array_count(&conn->cmd_send_queue); + + imapc_connection_input_reset(conn); +- +- int msecs_since_last_connect = +- timeval_diff_msecs(&ioloop_timeval, &conn->last_connect); +- if (!conn->reconnect_ok && +- msecs_since_last_connect < (int)conn->client->set.connect_retry_interval_msecs) { +- if (conn->to != NULL) +- timeout_remove(&conn->to); +- conn->reconnecting = TRUE; +- imapc_connection_set_disconnected(conn); +- /* don't wait longer than necessary */ +- unsigned int delay_msecs = +- conn->client->set.connect_retry_interval_msecs - +- msecs_since_last_connect; +- conn->to = timeout_add(delay_msecs, imapc_connection_reconnect, conn); +- return; +- } + conn->last_connect = ioloop_timeval; + + if (conn->client->set.debug) { -- 2.12.2