Fix problems with the spool file that arise when the local username
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Wed, 16 Feb 2005 16:28:36 +0000 (16:28 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Wed, 16 Feb 2005 16:28:36 +0000 (16:28 +0000)
contains a space. Also, ensure that the Received: line item is
appropriately quoted in this circumstance.

doc/doc-txt/ChangeLog
src/src/globals.c
src/src/spool_in.c

index b88fbea69cb770eb9c8fc225cc97b23236cf28d0..9941ed9ec6be13655d59297e57ea435eb3a52879 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.79 2005/02/16 15:24:21 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.80 2005/02/16 16:28:36 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -375,6 +375,15 @@ Exim version 4.50
     else would have woken the daemon, and it would have reaped the completed
     process earlier.
 
+80. If a message was submitted locally by a user whose login name contained one
+    or more spaces (ugh!), the spool file that Exim wrote was not re-readable.
+    It caused a spool format error. I have fixed the spool reading code. A
+    related problem was that the "from" clause in the Received: line became
+    illegal because of the space(s). It is now covered by ${quote_local_part.
+
+81. Included the latest eximstats from Steve (adds average sizes to HTML Top
+    tables).
+
 
 ----------------------------------------------------
 See the note above about the 4.44 and 4.50 releases.
index 129923063b00ea0038c03afac18ccd637c5bd320..9594c9003cd76a9afff550bfb106cbd2b6549d7f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/globals.c,v 1.15 2005/01/25 14:16:33 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.c,v 1.16 2005/02/16 16:28:36 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -788,7 +788,7 @@ date  will be automatically added on the end. */
 uschar *received_header_text   = US
      "Received: "
      "${if def:sender_rcvhost {from $sender_rcvhost\n\t}"
-     "{${if def:sender_ident {from $sender_ident }}"
+     "{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}"
      "${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}"
      "by $primary_hostname "
      "${if def:received_protocol {with $received_protocol}} "
index 0e4297114df97548ca202387c1a3b4dac506f29b..77609a682c4cde434ffc7031dcfcd225f9822a84 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/spool_in.c,v 1.6 2005/01/25 14:16:33 ph10 Exp $ */
+/* $Cambridge: exim/src/src/spool_in.c,v 1.7 2005/02/16 16:28:36 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -230,7 +230,7 @@ int n;
 int rcount = 0;
 long int uid, gid;
 BOOL inheader = FALSE;
-uschar originator[64];
+uschar *p;
 
 /* Reset all the global variables to their default values. However, there is
 one exception. DO NOT change the default value of dont_deliver, because it may
@@ -325,9 +325,21 @@ messages for delivery delays that have been sent. */
 
 if (Ufgets(big_buffer, big_buffer_size, f) == NULL) goto SPOOL_READ_ERROR;
 
-if (sscanf(CS big_buffer, "%s %ld %ld", originator, &uid, &gid) != 3)
-  goto SPOOL_FORMAT_ERROR;
-originator_login = string_copy(originator);
+p = big_buffer + Ustrlen(big_buffer);
+while (p > big_buffer && isspace(p[-1])) p--;
+*p = 0;
+if (!isdigit(p[-1])) goto SPOOL_FORMAT_ERROR;
+while (p > big_buffer && isdigit(p[-1])) p--;
+gid = Uatoi(p);
+if (p <= big_buffer || *(--p) != ' ') goto SPOOL_FORMAT_ERROR;
+*p = 0;
+if (!isdigit(p[-1])) goto SPOOL_FORMAT_ERROR;
+while (p > big_buffer && isdigit(p[-1])) p--;
+uid = Uatoi(p);
+if (p <= big_buffer || *(--p) != ' ') goto SPOOL_FORMAT_ERROR;
+*p = 0;
+originator_login = string_copy(big_buffer);
 originator_uid = (uid_t)uid;
 originator_gid = (gid_t)gid;