Use message_id for tempfile creation Closes 2390
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Wed, 17 Apr 2019 06:38:19 +0000 (08:38 +0200)
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Thu, 18 Apr 2019 10:28:11 +0000 (12:28 +0200)
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.)

doc/doc-txt/ChangeLog
src/src/spool_out.c

index 07ab3f0..01ee179 100644 (file)
@@ -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
 -----------------
index 3970206..a4a734a 100644 (file)
@@ -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);