Update copyright year in (most) files (those that my script finds).
[exim.git] / src / src / child.c
index 1c48a4e4c845792bbb95ce595500d701502406ef..8f2f9d78cbff898c6dbaa50492c1b75a8ca68b44 100644 (file)
@@ -1,10 +1,10 @@
-/* $Cambridge: exim/src/src/child.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
+/* $Cambridge: exim/src/src/child.c,v 1.7 2006/02/07 11:19:00 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) University of Cambridge 1995 - 2004 */
+/* Copyright (c) University of Cambridge 1995 - 2006 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 
@@ -32,13 +32,13 @@ static void
 force_fd(int oldfd, int newfd)
 {
 if (oldfd == newfd) return;
-close(newfd);
-dup2(oldfd, newfd);
-close(oldfd);
+(void)close(newfd);
+(void)dup2(oldfd, newfd);
+(void)close(oldfd);
 }
 
 
-
+#ifndef STAND_ALONE
 /*************************************************
 *   Build argv list and optionally re-exec Exim  *
 *************************************************/
@@ -201,7 +201,7 @@ Exim. Failure is signalled with EX_EXECFAILED, but this shouldn't occur! */
 if (pid == 0)
   {
   force_fd(pfd[pipe_read], 0);
-  close(pfd[pipe_write]);
+  (void)close(pfd[pipe_write]);
   if (debug_fd > 0) force_fd(debug_fd, 2);
   if (bounce_sender_authentication != NULL)
     child_exec_exim(CEE_EXEC_EXIT, FALSE, NULL, FALSE, 8,
@@ -217,7 +217,7 @@ if (pid == 0)
 pipe. */
 
 save_errno = errno;
-close(pfd[pipe_read]);
+(void)close(pfd[pipe_read]);
 
 /* Fork succeeded */
 
@@ -229,11 +229,11 @@ if (pid > 0)
 
 /* Fork failed */
 
-close(pfd[pipe_write]);
+(void)close(pfd[pipe_write]);
 errno = save_errno;
 return (pid_t)(-1);
 }
-
+#endif
 
 
 
@@ -247,7 +247,9 @@ them to the caller. The standard error is cloned to the output. If there are
 any file descriptors "in the way" in the new process, they are closed. A new
 umask is supplied for the process, and an optional new uid and gid are also
 available. These are used by the queryprogram router to set an unprivileged id.
-The function returns the pid of the new process, or -1 if things go wrong.
+SIGUSR1 is always disabled in the new process, as it is not going to be running
+Exim (the function child_open_exim() is provided for that). This function
+returns the pid of the new process, or -1 if things go wrong.
 
 Arguments:
   argv        the argv for exec in the new process
@@ -278,8 +280,8 @@ pid_t pid;
 if (pipe(inpfd) != 0) return (pid_t)(-1);
 if (pipe(outpfd) != 0)
   {
-  close(inpfd[pipe_read]);
-  close(inpfd[pipe_write]);
+  (void)close(inpfd[pipe_read]);
+  (void)close(inpfd[pipe_write]);
   return (pid_t)(-1);
   }
 
@@ -299,25 +301,20 @@ if (pid == 0)
   {
   if (make_leader && setpgid(0,0) < 0) goto CHILD_FAILED;
 
-  close(inpfd[pipe_write]);
+  (void)close(inpfd[pipe_write]);
   force_fd(inpfd[pipe_read], 0);
 
-  close(outpfd[pipe_read]);
+  (void)close(outpfd[pipe_read]);
   force_fd(outpfd[pipe_write], 1);
 
-  close(2);
-  dup2(1, 2);
+  (void)close(2);
+  (void)dup2(1, 2);
 
-  /* Set the required environment. If changing uid, ensure that
-  SIGUSR1 is ignored, as the process won't have the privilege to
-  write to the process log. */
+  /* Set the required environment. */
 
+  signal(SIGUSR1, SIG_IGN);
   if (newgid != NULL && setgid(*newgid) < 0) goto CHILD_FAILED;
-  if (newuid != NULL)
-    {
-    signal(SIGUSR1, SIG_IGN);
-    if (setuid(*newuid) < 0) goto CHILD_FAILED;
-    }
+  if (newuid != NULL && setuid(*newuid) < 0) goto CHILD_FAILED;
   (void)umask(newumask);
 
   /* Set the working directory if required */
@@ -341,8 +338,8 @@ if (pid == 0)
 stdin pipe, and the writing end of the stdout pipe. */
 
 save_errno = errno;
-close(inpfd[pipe_read]);
-close(outpfd[pipe_write]);
+(void)close(inpfd[pipe_read]);
+(void)close(outpfd[pipe_write]);
 
 /* Fork succeeded; return the input/output pipes and the pid */
 
@@ -355,8 +352,8 @@ if (pid > 0)
 
 /* Fork failed; reset fork errno before returning */
 
-close(inpfd[pipe_write]);
-close(outpfd[pipe_read]);
+(void)close(inpfd[pipe_write]);
+(void)close(outpfd[pipe_read]);
 errno = save_errno;
 return (pid_t)(-1);
 }
@@ -369,9 +366,9 @@ return (pid_t)(-1);
 *************************************************/
 
 /* This function is a wrapper for child_open_uid() that doesn't have the uid,
-gid, and working directory changing arguments. It is provided so as to have a
-clean interface for use from local_scan(), but also saves writing NULL
-arguments in other calls.
+gid and working directory changing arguments. The function is provided so as to
+have a clean interface for use from local_scan(), but also saves writing NULL
+arguments several calls that would otherwise use child_open_uid().
 
 Arguments:
   argv        the argv for exec in the new process