Mercurial > dovecot > original-hg > dovecot-1.2
changeset 9465:19aee456cec3 HEAD
master: When creating login processes, don't close any fds after dup2()s.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 05 Nov 2009 12:25:43 -0500 |
parents | 939edf3ed09b |
children | 68af994e7f3c |
files | src/master/login-process.c |
diffstat | 1 files changed, 4 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ 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 @@ 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,14 +716,13 @@ 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()); env_put(t_strdup_printf("LISTEN_FDS=%u", listen_count));