dovecot-1.2: master: When creating login processes, don't close ...

dovecot at dovecot.org dovecot at dovecot.org
Thu Nov 5 19:25:49 EET 2009


details:   http://hg.dovecot.org/dovecot-1.2/rev/19aee456cec3
changeset: 9465:19aee456cec3
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Nov 05 12:25:43 2009 -0500
description:
master: When creating login processes, don't close any fds after dup2()s.

diffstat:

1 file changed, 4 insertions(+), 4 deletions(-)
src/master/login-process.c |    8 ++++----

diffs (36 lines):

diff -r 939edf3ed09b -r 19aee456cec3 src/master/login-process.c
--- a/src/master/login-process.c	Mon Nov 02 17:54:17 2009 -0500
+++ b/src/master/login-process.c	Thu Nov 05 12:25:43 2009 -0500
@@ -648,6 +648,8 @@ static pid_t create_login_process(struct
 		i_error("socketpair() failed: %m");
 		return -1;
 	}
+	fd_close_on_exec(fd[0], TRUE);
+	fd_close_on_exec(fd[1], TRUE);
 
 	max_log_lines_per_sec =
 		group->set->login_process_per_connection ? 10 : 0;
@@ -675,7 +677,6 @@ static pid_t create_login_process(struct
 		log_set_pid(log, pid);
 
 		net_set_nonblock(fd[0], TRUE);
-		fd_close_on_exec(fd[0], TRUE);
 		(void)login_process_new(group, pid, fd[0], FALSE);
 		(void)close(fd[1]);
 		(void)close(log_fd);
@@ -715,13 +716,12 @@ static pid_t create_login_process(struct
 
 	if (dup2_array(&dups) < 0)
 		i_fatal("Failed to dup2() fds");
+	/* NOTE: don't close any fds below here. dup2_array() may have already
+	   assigned other fds to them. */
 
 	/* don't close any of these */
 	for (tmp_fd = 0; tmp_fd < cur_fd; tmp_fd++)
 		fd_close_on_exec(tmp_fd, FALSE);
-
-	(void)close(fd[0]);
-	(void)close(fd[1]);
 
 	login_process_init_env(group, getpid());
 


More information about the dovecot-cvs mailing list