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

dovecot at dovecot.org dovecot at dovecot.org
Thu Nov 5 19:29:42 EET 2009


details:   http://hg.dovecot.org/dovecot-1.1/rev/2827e881296a
changeset: 8362:2827e881296a
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 ed88a340c680 -r 2827e881296a 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
@@ -618,6 +618,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;
@@ -645,7 +647,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);
@@ -685,13 +686,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