From 292a277974fe1223bfa956243ac1a2bde1e20c42 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 22 Oct 2010 03:09:55 -0700 Subject: EbuildFetcher: close uneeded fds in subprocess --- pym/portage/process.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'pym/portage/process.py') diff --git a/pym/portage/process.py b/pym/portage/process.py index 37b482a0e..e4d1d9523 100644 --- a/pym/portage/process.py +++ b/pym/portage/process.py @@ -352,7 +352,25 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, groups, uid, umask, # Quiet killing of subprocesses by SIGPIPE (see bug #309001). signal.signal(signal.SIGPIPE, signal.SIG_DFL) - # Set up the command's pipes. + _setup_pipes(fd_pipes) + + # Set requested process permissions. + if gid: + os.setgid(gid) + if groups: + os.setgroups(groups) + if uid: + os.setuid(uid) + if umask: + os.umask(umask) + if pre_exec: + pre_exec() + + # And switch to the new process. + os.execve(binary, myargs, env) + +def _setup_pipes(fd_pipes): + """Setup pipes for a forked process.""" my_fds = {} # To protect from cases where direct assignment could # clobber needed fds ({1:2, 2:1}) we first dupe the fds @@ -371,21 +389,6 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, groups, uid, umask, except OSError: pass - # Set requested process permissions. - if gid: - os.setgid(gid) - if groups: - os.setgroups(groups) - if uid: - os.setuid(uid) - if umask: - os.umask(umask) - if pre_exec: - pre_exec() - - # And switch to the new process. - os.execve(binary, myargs, env) - def find_binary(binary): """ Given a binary name, find the binary in PATH -- cgit v1.2.3-1-g7c22