Package: release.debian.org Severity: normal Tags: jessie User: release.debian....@packages.debian.org Usertags: pu
Hello, I would like to update exim4 in jessie with the following changes: 1 The upload for DSA-3517-1 introduced a new expansion item ($initial_cwd). - Exim now changes to / at start and therefore cwd did not show the original working directory anymore. However in the upload $initial_cwd did not work because of a missing patch. 2 Fix a upstream issue which might cause duplicate mails. 3 Fix a crash on exim -be '${if crypteq{xxx}{\$aaa}{yes}{no}}' 4 Improve NEWS file, adding more helpful info on add_environment. cu Andreas -- `What a good friend you are to him, Dr. Maturin. His other friends are so grateful to you.' `I sew his ears on from time to time, sure'
diff -Nru exim4-4.84.2/debian/changelog exim4-4.84.2/debian/changelog --- exim4-4.84.2/debian/changelog 2016-03-13 18:45:53.000000000 +0100 +++ exim4-4.84.2/debian/changelog 2016-06-12 13:56:36.000000000 +0200 @@ -1,3 +1,25 @@ +exim4 (4.84.2-2) jessie; urgency=medium + + * 90_Cutthrough-Fix-bug-with-dot-only-line.patch: JH/38 Fix cutthrough bug + with body lines having a single dot. The dot was incorrectly not doubled + on cutthrough transmission, hence seen as a body-termination at the + receiving system - resulting in truncated mails. Commonly the sender saw + a TCP-level error, and retransmitted the nessage via the normal + store-and-forward channel. This could result in duplicates received - but + deduplicating mailstores were liable to retain only the initial truncated + version. + * 91_Expansions-Fix-crash-in-crypteq-On-OpenBSD-a-bad-sec.patch: Fix crash + on "exim -be '${if crypteq{xxx}{\$aaa}{yes}{no}}'". Closes: #812585 + * Improve on NEWS file. Closes: #81834 + * Add 89_01_p_Delay-chdir-until-we-opened-the-main-config.patch. Backport + 3de973a29de6852d61ba9bf1845835d08ca5a5ab (Delay chdir(/) until we opened + the main config) to actually make $initial_cwd expansion work. Also unfuzz + 89_02_Store-the-initial-working-directory.diff. + (Thanks, Серж ИвановЪ for bugreport and pointer to missing patch) Closes: + #818897, #826646 + + -- Andreas Metzler <ametz...@debian.org> Sun, 12 Jun 2016 13:56:30 +0200 + exim4 (4.84.2-1) jessie-security; urgency=high * New upstream security release. diff -Nru exim4-4.84.2/debian/exim4-config.NEWS exim4-4.84.2/debian/exim4-config.NEWS --- exim4-4.84.2/debian/exim4-config.NEWS 2016-03-13 18:46:04.000000000 +0100 +++ exim4-4.84.2/debian/exim4-config.NEWS 2016-06-12 13:26:52.000000000 +0200 @@ -1,14 +1,26 @@ -exim4 (4.84.2-1) jessie-security; urgency=high +exim4 (4.84.2-2) jessie; urgency=medium As part of the fix for CVE-2016-1531 updated Exim versions clean the complete execution environment by default, affecting Exim and - subprocesses such as transports calling other programs, and thus may break + subprocesses such as routers calling other programs, and thus may break existing installations. New configuration options (keep_environment, - add_environment) were introduced to adjust this behavior. The - debian configuration adds the macros MAIN_KEEP_ENVIRONMENT and - MAIN_ADD_ENVIRONMENT to easily set these options. + add_environment) were introduced to adjust this behavior. Because of the + possible breakage Exim will show a runtime warning if keep_environment is + not set. - -- Andreas Metzler <ametz...@debian.org> Sat, 12 Mar 2016 08:17:40 +0100 + The Debian exim4 configuration does not rely on specific environment + variables and therefore sets 'keep_environment =' (i.e confirm empty + environment). + + Users of custom Exim configurations will need to check whether their setup + continues to work with the abovementioned upstream change and modify the + Exim environment as needed otherwise. If the setup works fine with empty + environment it is still necessary to set the main configuration option + "keep_environment =" to quiet the runtime warning. + + See <https://exim.org/static/doc/CVE-2016-1531.txt> for details. + + -- Andreas Metzler <ametz...@debian.org> Mon, 28 Mar 2016 17:58:09 +0200 exim4 (4.68-1) unstable; urgency=low diff -Nru exim4-4.84.2/debian/patches/89_01_p_Delay-chdir-until-we-opened-the-main-config.patch exim4-4.84.2/debian/patches/89_01_p_Delay-chdir-until-we-opened-the-main-config.patch --- exim4-4.84.2/debian/patches/89_01_p_Delay-chdir-until-we-opened-the-main-config.patch 1970-01-01 01:00:00.000000000 +0100 +++ exim4-4.84.2/debian/patches/89_01_p_Delay-chdir-until-we-opened-the-main-config.patch 2016-06-12 13:42:19.000000000 +0200 @@ -0,0 +1,76 @@ +Backport of 3de973a29de6852d61ba9bf1845835d08ca5a5ab + +From: "Heiko Schlittermann (HS12-RIPE)" <h...@schlittermann.de> +Date: Wed, 2 Mar 2016 22:07:45 +0100 +Subject: [PATCH] Delay chdir(/) until we opened the main config + +--- a/doc/spec.txt ++++ b/doc/spec.txt +@@ -3361,8 +3361,6 @@ brief message about itself and exits. + first file that exists is used. Failure to open an existing file stops Exim + from proceeding any further along the list, and an error is generated. + +- The file names need to be absolute names. +- + When this option is used by a caller other than root, and the list is + different from the compiled-in list, Exim gives up its root privilege + immediately, and runs with the real and effective uid and gid set to those +--- a/src/exim.c ++++ b/src/exim.c +@@ -3683,17 +3683,16 @@ init_lookup_list(); + + /* Read the main runtime configuration data; this gives up if there + is a failure. It leaves the configuration file open so that the subsequent +-configuration data for delivery can be read if needed. */ ++configuration data for delivery can be read if needed. + +-/* To be safe: change the working directory to /. */ +-if (Uchdir("/") < 0) +- { +- perror("exim: chdir `/': "); +- exit(EXIT_FAILURE); +- } ++NOTE: immediatly after opening the configuration file we change the working ++directory to "/"! Later we change to $spool_directory. We do it there, because ++during readconf_main() some expansion takes place already. */ + + readconf_main(); + ++/* Now in directory "/" */ ++ + if (cleanup_environment() == FALSE) + log_write(0, LOG_PANIC_DIE, "Can't cleanup environment"); + +--- a/src/readconf.c ++++ b/src/readconf.c +@@ -2969,14 +2969,6 @@ while((filename = string_nextinlist(&lis + != NULL) + { + +- /* To avoid confusion: Exim changes to / at the very beginning and +- * and to $spool_directory later. */ +- if (filename[0] != '/') +- { +- fprintf(stderr, "-C %s: only absolute names are allowed\n", filename); +- exit(EXIT_FAILURE); +- } +- + /* Cut out all the fancy processing unless specifically wanted */ + + #if defined(CONFIGURE_FILE_USE_NODE) || defined(CONFIGURE_FILE_USE_EUID) +@@ -3030,6 +3022,15 @@ while((filename = string_nextinlist(&lis + if (config_file != NULL || errno != ENOENT) break; + } + ++/* Now, once we found and opened our configuration file, we change the directory ++to a safe place. Later we change to $spool_directory. */ ++ ++if (Uchdir("/") < 0) ++ { ++ perror("exim: chdir `/': "); ++ exit(EXIT_FAILURE); ++ } ++ + /* On success, save the name for verification; config_filename is used when + logging configuration errors (it changes for .included files) whereas + config_main_filename is the name shown by -bP. Failure to open a configuration diff -Nru exim4-4.84.2/debian/patches/89_02_Store-the-initial-working-directory.diff exim4-4.84.2/debian/patches/89_02_Store-the-initial-working-directory.diff --- exim4-4.84.2/debian/patches/89_02_Store-the-initial-working-directory.diff 2016-03-13 18:45:53.000000000 +0100 +++ exim4-4.84.2/debian/patches/89_02_Store-the-initial-working-directory.diff 2016-06-12 13:36:46.000000000 +0200 @@ -2,8 +2,8 @@ Bug 1805 https://bugs.exim.org/show_bug.cgi?id=1805 Origin: upstream ---- exim4-4.84.2.orig/src/globals.c -+++ exim4-4.84.2/src/globals.c +--- a/src/globals.c ++++ b/src/globals.c @@ -759,6 +759,7 @@ BOOL ignore_fromline_local = FALSE; uschar *ignore_fromline_hosts = NULL; BOOL inetd_wait_mode = FALSE; @@ -12,11 +12,11 @@ uschar *interface_address = NULL; int interface_port = -1; BOOL is_inetd = FALSE; ---- exim4-4.84.2.orig/src/exim.c -+++ exim4-4.84.2/src/exim.c -@@ -3692,6 +3692,13 @@ if (Uchdir("/") < 0) - exit(EXIT_FAILURE); - } +--- a/src/exim.c ++++ b/src/exim.c +@@ -3689,6 +3689,13 @@ NOTE: immediatly after opening the confi + directory to "/"! Later we change to $spool_directory. We do it there, because + during readconf_main() some expansion takes place already. */ +/* Store the initial cwd before we change directories */ +if ((initial_cwd = getcwd(NULL, 0)) == NULL) @@ -27,8 +27,8 @@ + readconf_main(); - if (cleanup_environment() == FALSE) -@@ -3968,9 +3975,10 @@ if (((debug_selector & D_any) != 0 || (l + /* Now in directory "/" */ +@@ -3967,9 +3974,10 @@ if (((debug_selector & D_any) != 0 || (l { int i; uschar *p = big_buffer; @@ -41,8 +41,8 @@ while (*p) p++; (void)string_format(p, big_buffer_size - (p - big_buffer), " %d args:", argc); while (*p) p++; ---- exim4-4.84.2.orig/src/globals.h -+++ exim4-4.84.2/src/globals.h +--- a/src/globals.h ++++ b/src/globals.h @@ -486,6 +486,7 @@ extern BOOL ignore_fromline_local; / extern uschar *ignore_fromline_hosts; /* Hosts permitted to send "From " */ extern BOOL inetd_wait_mode; /* Whether running in inetd wait mode */ @@ -51,8 +51,8 @@ extern BOOL is_inetd; /* True for inetd calls */ extern uschar *iterate_item; /* Item from iterate list */ ---- exim4-4.84.2.orig/src/expand.c -+++ exim4-4.84.2/src/expand.c +--- a/src/expand.c ++++ b/src/expand.c @@ -501,6 +501,7 @@ static var_entry var_table[] = { { "host_data", vtype_stringptr, &host_data }, { "host_lookup_deferred",vtype_int, &host_lookup_deferred }, @@ -61,9 +61,9 @@ { "inode", vtype_ino, &deliver_inode }, { "interface_address", vtype_stringptr, &interface_address }, { "interface_port", vtype_int, &interface_port }, ---- exim4-4.84.2.orig/doc/spec.txt -+++ exim4-4.84.2/doc/spec.txt -@@ -10428,6 +10428,13 @@ $host_lookup_failed +--- a/doc/spec.txt ++++ b/doc/spec.txt +@@ -10426,6 +10426,13 @@ $host_lookup_failed See $host_lookup_deferred. diff -Nru exim4-4.84.2/debian/patches/90_Cutthrough-Fix-bug-with-dot-only-line.patch exim4-4.84.2/debian/patches/90_Cutthrough-Fix-bug-with-dot-only-line.patch --- exim4-4.84.2/debian/patches/90_Cutthrough-Fix-bug-with-dot-only-line.patch 1970-01-01 01:00:00.000000000 +0100 +++ exim4-4.84.2/debian/patches/90_Cutthrough-Fix-bug-with-dot-only-line.patch 2016-06-12 13:26:52.000000000 +0200 @@ -0,0 +1,32 @@ +From 2d51a06458d4fb771dca34966cf2d19c6820ce61 Mon Sep 17 00:00:00 2001 +From: Jeremy Harris <jgh146...@wizmail.org> +Date: Thu, 21 Jan 2016 15:37:08 +0000 +Subject: [PATCH] Cutthrough: Fix bug with dot-only line + JH/38 Fix cutthrough bug with body lines having a single dot. The dot was + incorrectly not doubled on cutthrough transmission, hence seen as a + body-termination at the receiving system - resulting in truncated mails. + Commonly the sender saw a TCP-level error, and retransmitted the nessage + via the normal store-and-forward channel. This could result in duplicates + received - but deduplicating mailstores were liable to retain only the + initial truncated version. + (cherry picked from commit 1bc460a64a0de0766d21f4f8660c6597bc410cbc) + +--- exim4-4.84.2.orig/src/receive.c ++++ exim4-4.84.2/src/receive.c +@@ -838,7 +838,15 @@ while ((ch = (receive_getc)()) != EOF) + ch_state = 4; + continue; + } +- ch_state = 1; /* The dot itself is removed */ ++ /* The dot was removed at state 3. For a doubled dot, here, reinstate ++ it to cutthrough. The current ch, dot or not, is passed both to cutthrough ++ and to file below. */ ++ if (ch == '.') ++ { ++ uschar c= ch; ++ (void) cutthrough_puts(&c, 1); ++ } ++ ch_state = 1; + break; + + case 4: /* After [CR] LF . CR */ diff -Nru exim4-4.84.2/debian/patches/91_Expansions-Fix-crash-in-crypteq-On-OpenBSD-a-bad-sec.patch exim4-4.84.2/debian/patches/91_Expansions-Fix-crash-in-crypteq-On-OpenBSD-a-bad-sec.patch --- exim4-4.84.2/debian/patches/91_Expansions-Fix-crash-in-crypteq-On-OpenBSD-a-bad-sec.patch 1970-01-01 01:00:00.000000000 +0100 +++ exim4-4.84.2/debian/patches/91_Expansions-Fix-crash-in-crypteq-On-OpenBSD-a-bad-sec.patch 2016-06-12 13:26:52.000000000 +0200 @@ -0,0 +1,45 @@ +From 9dc2b215e83a63efa242f6acd3ab7af8b608e5a1 Mon Sep 17 00:00:00 2001 +From: Jeremy Harris <jgh146...@wizmail.org> +Date: Mon, 11 Jan 2016 15:50:22 +0000 +Subject: [PATCH] Expansions: Fix crash in crypteq: On OpenBSD a bad second-arg + results in an error-return from crypt(). Errorcheck that return. + +--- + src/expand.c | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +diff --git a/src/expand.c b/src/expand.c +index f144a75..2966c22 100644 +--- a/src/expand.c ++++ b/src/expand.c +@@ -2791,7 +2791,7 @@ switch(cond_type) + #define XSTR(s) STR(s) + DEBUG(D_auth) debug_printf("crypteq: using %s()\n" + " subject=%s\n crypted=%s\n", +- (which == 0)? XSTR(DEFAULT_CRYPT) : (which == 1)? "crypt" : "crypt16", ++ which == 0 ? XSTR(DEFAULT_CRYPT) : which == 1 ? "crypt" : "crypt16", + coded, sub[1]); + #undef STR + #undef XSTR +@@ -2800,8 +2800,16 @@ switch(cond_type) + salt), force failure. Otherwise we get false positives: with an empty + string the yield of crypt() is an empty string! */ + +- tempcond = (Ustrlen(sub[1]) < 2)? FALSE : +- (Ustrcmp(coded, sub[1]) == 0); ++ if (coded) ++ tempcond = Ustrlen(sub[1]) < 2 ? FALSE : Ustrcmp(coded, sub[1]) == 0; ++ else if (errno == EINVAL) ++ tempcond = FALSE; ++ else ++ { ++ expand_string_message = string_sprintf("crypt error: %s\n", ++ US strerror(errno)); ++ return NULL; ++ } + } + break; + #endif /* SUPPORT_CRYPTEQ */ +-- +2.8.0.rc3 + diff -Nru exim4-4.84.2/debian/patches/series exim4-4.84.2/debian/patches/series --- exim4-4.84.2/debian/patches/series 2016-03-13 18:45:53.000000000 +0100 +++ exim4-4.84.2/debian/patches/series 2016-06-12 13:36:50.000000000 +0200 @@ -17,4 +17,7 @@ 86_Avoid-crash-with-badly-terminated-non-recognised-mim.patch 87_Fix-transport-results-pipe-for-multiple-recipients-c.patch 89_01_only_warn_on_nonempty_environment.diff +89_01_p_Delay-chdir-until-we-opened-the-main-config.patch 89_02_Store-the-initial-working-directory.diff +90_Cutthrough-Fix-bug-with-dot-only-line.patch +91_Expansions-Fix-crash-in-crypteq-On-OpenBSD-a-bad-sec.patch