summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2019-04-17 08:38:19 +0200
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2019-04-18 12:28:11 +0200
commitcb80814d149dcab2d967bbf1b24e50436bcf374b (patch)
treeab3dcc6e6a159fab4358f10c0c5f3360f0a1ac71
parentcef8a6effdef4cb157c566369b61087b42d9b162 (diff)
downloadexim4-cb80814d149dcab2d967bbf1b24e50436bcf374b.tar.gz
Use message_id for tempfile creation Closes 2390
Make tempfile names unique across Exim instances running in a cluster on a shared $spool_directory. (They need to set localhost_number to have cluster-unique message_exim_ids.)
-rw-r--r--doc/doc-txt/ChangeLog6
-rw-r--r--src/src/spool_out.c3
2 files changed, 7 insertions, 2 deletions
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index 07ab3f038..01ee17960 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -64,6 +64,12 @@ JH/14 Bug 1891: Close the log file if receiving a non-smtp message, without
(a previous attempt to fix addressed lack, for a long time, of initial
input).
+HS/01 Bug 2390: Use message_id for tempfile creation to avoid races in a
+ shared (NFS) environment. The length of the tempfile name is now
+ 4 + 16 ("hdr.$message_exim_id") which might break on file
+ systems which restrict the file name length to lower values.
+ (It was "hdr.$pid".)
+
Exim version 4.92
-----------------
diff --git a/src/src/spool_out.c b/src/src/spool_out.c
index 3970206cb..a4a734a1a 100644
--- a/src/src/spool_out.c
+++ b/src/src/spool_out.c
@@ -134,8 +134,7 @@ struct stat statbuf;
uschar * tname;
uschar * fname;
-tname = spool_fname(US"input", message_subdir,
- string_sprintf("hdr.%d", (int)getpid()), US"");
+tname = spool_fname(US"input", message_subdir, US"hdr.", message_id);
if ((fd = spool_open_temp(tname)) < 0)
return spool_write_error(where, errmsg, US"open", NULL, NULL);