Give more explanation in the error message when the command for a transport
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Thu, 14 Oct 2004 14:52:45 +0000 (14:52 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Thu, 14 Oct 2004 14:52:45 +0000 (14:52 +0000)
filter fails to execute.

doc/doc-txt/ChangeLog
src/src/transport.c
src/src/transports/appendfile.c
src/src/transports/lmtp.c
src/src/transports/pipe.c
src/src/transports/smtp.c

index 6e1d523..f57ab6c 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.4 2004/10/14 11:21:02 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.5 2004/10/14 14:52:45 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -16,6 +16,9 @@ Exim version 4.44
     bug fixed in 4.43/37 would have been diagnosed quickly if this had been in
     place.
 
+ 4. Give more explanation in the error message when the command for a transport
+    filter fails to execute.
+
 
 Exim version 4.43
 -----------------
index 855bedd..8b68417 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/transport.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transport.c,v 1.2 2004/10/14 14:52:45 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -1095,29 +1095,34 @@ if (filter_pid > 0 && (rc = child_close(filter_pid, 30)) != 0 && yield)
   }
 
 /* Wait for the writing process to complete. If it ends successfully,
-read the results from its pipe. */
+read the results from its pipe, provided we haven't already had a filter 
+process failure. */
 
 DEBUG(D_transport) debug_printf("waiting for writing process\n");
 if (write_pid > 0)
   {
-  if ((rc = child_close(write_pid, 30)) == 0)
+  rc = child_close(write_pid, 30);
+  if (yield)
     {
-    BOOL ok;
-    read(pfd[pipe_read], (void *)&ok, sizeof(BOOL));
-    if (!ok)
+    if (rc == 0)   
+      {
+      BOOL ok;
+      read(pfd[pipe_read], (void *)&ok, sizeof(BOOL));
+      if (!ok)
+        {
+        read(pfd[pipe_read], (void *)&save_errno, sizeof(int));
+        read(pfd[pipe_read], (void *)&(addr->more_errno), sizeof(int));
+        yield = FALSE;
+        }
+      }
+    else
       {
-      read(pfd[pipe_read], (void *)&save_errno, sizeof(int));
-      read(pfd[pipe_read], (void *)&(addr->more_errno), sizeof(int));
       yield = FALSE;
+      save_errno = ERRNO_FILTER_FAIL;
+      addr->more_errno = rc;
+      DEBUG(D_transport) debug_printf("writing process returned %d\n", rc);
       }
-    }
-  else if (yield)
-    {
-    yield = FALSE;
-    save_errno = ERRNO_FILTER_FAIL;
-    addr->more_errno = rc;
-    DEBUG(D_transport) debug_printf("writing process returned %d\n", rc);
-    }
+    }   
   }
 close(pfd[pipe_read]);
 
index bdda904..8cac73c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/transports/appendfile.c,v 1.2 2004/10/11 09:49:43 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/appendfile.c,v 1.3 2004/10/14 14:52:45 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -2858,8 +2858,12 @@ if (yield != OK)
   from child_close() is in more_errno. */
 
   else if (errno == ERRNO_FILTER_FAIL)
-    addr->message = string_sprintf("filter process failure %d while writing "
-      "to %s", addr->more_errno, dataname);
+    { 
+    yield = PANIC;
+    addr->message = string_sprintf("transport filter process failed (%d) "
+      "while writing to %s%s", addr->more_errno, dataname,
+      (addr->more_errno == EX_EXECFAILED)? ": unable to execute command" : "");
+    }   
 
   /* Handle failure to expand header changes */
 
index 871f724..17b0b82 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/transports/lmtp.c,v 1.1 2004/10/07 13:10:02 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/lmtp.c,v 1.2 2004/10/14 14:52:45 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -141,7 +141,9 @@ end the DATA. */
 
 if (*errno_value == ERRNO_FILTER_FAIL)
   {
-  *message = string_sprintf("transport filter process failed (%d)", more_errno);
+  *message = string_sprintf("transport filter process failed (%d)%s", 
+    more_errno, 
+    (more_errno == EX_EXECFAILED)? ": unable to execute command" : "");
   return FALSE;
   }
 
index f2fe471..d159186 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/transports/pipe.c,v 1.1 2004/10/07 13:10:02 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/pipe.c,v 1.2 2004/10/14 14:52:45 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -800,14 +800,16 @@ if (!written_ok)
     }
   else
     {
-    addr->transport_return = PANIC;
+    addr->transport_return = PANIC; 
     addr->basic_errno = errno;
     if (errno == ERRNO_CHHEADER_FAIL)
       addr->message =
         string_sprintf("Failed to expand headers_add or headers_remove: %s",
           expand_string_message);
     else if (errno == ERRNO_FILTER_FAIL)
-      addr->message = string_sprintf("Filter process failure");
+      addr->message = string_sprintf("Transport filter process failed (%d)%s",
+      addr->more_errno,
+      (addr->more_errno == EX_EXECFAILED)? ": unable to execute command" : "");
     else if (errno == ERRNO_WRITEINCOMPLETE)
       addr->message = string_sprintf("Failed repeatedly to write data");
     else
index 71fca3a..1a7f842 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/transports/smtp.c,v 1.1 2004/10/07 13:10:02 ph10 Exp $ */
+/* $Cambridge: exim/src/src/transports/smtp.c,v 1.2 2004/10/14 14:52:45 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -389,8 +389,9 @@ end the DATA. */
 
 if (*errno_value == ERRNO_FILTER_FAIL)
   {
-  *message = US string_sprintf("transport filter process failed (%d)",
-    more_errno);
+  *message = US string_sprintf("transport filter process failed (%d)%s",
+    more_errno, 
+    (more_errno == EX_EXECFAILED)? ": unable to execute command" : "");
   return FALSE;
   }