--- portage_exec.py.orig 2005-10-30 02:05:50.000000000 +0900 +++ portage_exec.py 2005-10-30 02:18:24.000000000 +0900 @@ -11,11 +11,8 @@ try: import resource - max_fd_limit=resource.getrlimit(RLIMIT_NOFILE) -except SystemExit, e: - raise -except: - # hokay, no resource module. + max_fd_limit=resource.getrlimit(resource.RLIMIT_NOFILE)[1] +except ImportError: max_fd_limit=256 spawned_pids = [] @@ -83,7 +80,7 @@ mypid=[] if logfile: pr,pw=os.pipe() - mypid.extend(spawn(('tee','-i','-a',logfile),returnpid=True,fd_pipes={0:pr,1:fd_pipes[1],2:fd_pipes[2]},fd_unused=[pw])) + mypid.extend(spawn(('tee','-i','-a',logfile),returnpid=True,fd_pipes={0:pr,1:fd_pipes[1],2:fd_pipes[2]})) os.close(pr) fd_pipes[1]=pw fd_pipes[2]=pw @@ -95,22 +92,15 @@ mypid.append(os.fork()) if mypid[-1] == 0: my_pipes = {} - close_pipes = {} for x in fd_pipes: my_pipes[x] = os.dup(fd_pipes[x]) - close_pipes[fd_pipes[x]] = True - for x in close_pipes: - os.close(x) for x in my_pipes: os.dup2(my_pipes[x], x) - os.close(my_pipes[x]) - for x in range(0,max_fd_limit): - if x not in trg_fd: - try: + for x in range(max_fd_limit): + if x not in my_pipes: + try: os.close(x) - except SystemExit, e: - raise - except: + except OSError: pass # note this order must be preserved- can't change gid/groups if you change uid first. if gid: