Add enabling function child_open_exim2() with extra arguments.
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Tue, 14 Feb 2006 10:26:26 +0000 (10:26 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Tue, 14 Feb 2006 10:26:26 +0000 (10:26 +0000)
doc/doc-txt/ChangeLog
src/src/child.c
src/src/local_scan.h

index 6febd4d855f3d0f0ad0dadafeb465d2818fc2cd6..522adcb0c0482ae05239c3850eba2ed877bcd468 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.295 2006/02/13 16:23:57 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.296 2006/02/14 10:26:26 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -149,6 +149,11 @@ PH/27 If a host name lookup failed very early in a connection, for example, if
       address found for host xxx.xxx.xxx (during SMTP connection from NULL)"
       could be logged. Now it outputs the IP address instead of "NULL".
 
       address found for host xxx.xxx.xxx (during SMTP connection from NULL)"
       could be logged. Now it outputs the IP address instead of "NULL".
 
+PH/28 An enabling patch from MH: add new function child_open_exim2() which
+      allows the sender and the authenticated sender to be set when
+      submitting a message from within Exim. Since child_open_exim() is
+      documented for local_scan(), the new function should be too.
+
 
 Exim version 4.60
 -----------------
 
 Exim version 4.60
 -----------------
index 4a1a89887ee029a409014c2d304a73a74dba9a49..e67f76666c61226318f422ab70e71c9e633fe2e1 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/child.c,v 1.8 2006/02/07 14:05:17 ph10 Exp $ */
+/* $Cambridge: exim/src/src/child.c,v 1.9 2006/02/14 10:26:27 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -174,6 +174,11 @@ the new process, and returns that to the caller via fdptr. The function returns
 the pid of the new process, or -1 if things go wrong. If debug_fd is
 non-negative, it is passed as stderr.
 
 the pid of the new process, or -1 if things go wrong. If debug_fd is
 non-negative, it is passed as stderr.
 
+This interface is now a just wrapper for the more complicated function
+child_open_exim2(), which has additional arguments. The wrapper must continue
+to exist, even if all calls from within Exim are changed, because it is
+documented for use from local_scan().
+
 Argument: fdptr   pointer to int for the stdin fd
 Returns:          pid of the created process or -1 if anything has gone wrong
 */
 Argument: fdptr   pointer to int for the stdin fd
 Returns:          pid of the created process or -1 if anything has gone wrong
 */
@@ -181,6 +186,24 @@ Returns:          pid of the created process or -1 if anything has gone wrong
 pid_t
 child_open_exim(int *fdptr)
 {
 pid_t
 child_open_exim(int *fdptr)
 {
+return child_open_exim2(fdptr, US"<>", bounce_sender_authentication);
+}
+
+
+/* This is a more complicated function for creating a child Exim process, with
+more arguments.
+
+Arguments:
+  fdptr                   pointer to int for the stdin fd
+  sender                  for a sender address (data for -f)
+  sender_authentication   authenticated sender address or NULL
+
+Returns:          pid of the created process or -1 if anything has gone wrong
+*/
+
+pid_t
+child_open_exim2(int *fdptr, uschar *sender, uschar *sender_authentication)
+{
 int pfd[2];
 int save_errno;
 pid_t pid;
 int pfd[2];
 int save_errno;
 pid_t pid;
@@ -203,13 +226,13 @@ if (pid == 0)
   force_fd(pfd[pipe_read], 0);
   (void)close(pfd[pipe_write]);
   if (debug_fd > 0) force_fd(debug_fd, 2);
   force_fd(pfd[pipe_read], 0);
   (void)close(pfd[pipe_write]);
   if (debug_fd > 0) force_fd(debug_fd, 2);
-  if (bounce_sender_authentication != NULL)
+  if (sender_authentication != NULL)
     child_exec_exim(CEE_EXEC_EXIT, FALSE, NULL, FALSE, 8,
     child_exec_exim(CEE_EXEC_EXIT, FALSE, NULL, FALSE, 8,
-      US"-t", US"-oem", US"-oi", US"-f", US"<>", US"-oMas",
-      bounce_sender_authentication, message_id_option);
+      US"-t", US"-oem", US"-oi", US"-f", sender, US"-oMas",
+      sender_authentication, message_id_option);
   else
     child_exec_exim(CEE_EXEC_EXIT, FALSE, NULL, FALSE, 6,
   else
     child_exec_exim(CEE_EXEC_EXIT, FALSE, NULL, FALSE, 6,
-      US"-t", US"-oem", US"-oi", US"-f", US"<>", message_id_option);
+      US"-t", US"-oem", US"-oi", US"-f", sender, message_id_option);
   /* Control does not return here. */
   }
 
   /* Control does not return here. */
   }
 
index 978647847f062af9d38d2d8587e9d1d734ad9b98..01ec5ffc7b68b9107d1da430c2287e5d47810508 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/local_scan.h,v 1.6 2006/02/07 11:19:00 ph10 Exp $ */
+/* $Cambridge: exim/src/src/local_scan.h,v 1.7 2006/02/14 10:26:27 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -162,6 +162,7 @@ extern BOOL    smtp_input;             /* TRUE if input is via SMTP */
 extern int     child_close(pid_t, int);
 extern pid_t   child_open(uschar **, uschar **, int, int *, int *, BOOL);
 extern pid_t   child_open_exim(int *);
 extern int     child_close(pid_t, int);
 extern pid_t   child_open(uschar **, uschar **, int, int *, int *, BOOL);
 extern pid_t   child_open_exim(int *);
+extern pid_t   child_open_exim2(int *, uschar *, uschar *);
 extern void    debug_printf(char *, ...) PRINTF_FUNCTION;
 extern uschar *expand_string(uschar *);
 extern void    header_add(int, char *, ...);
 extern void    debug_printf(char *, ...) PRINTF_FUNCTION;
 extern uschar *expand_string(uschar *);
 extern void    header_add(int, char *, ...);