summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-12-05 23:00:55 +0000
committerZac Medico <zmedico@gentoo.org>2009-12-05 23:00:55 +0000
commit879e2a33ff07dac1df442ca790ae80078c6e9631 (patch)
treebc9585999959897ba3098643711eeed976da9304
parentAlways append QA Notices resulting from the build log search to the end of (diff)
downloadportage-idfetch-879e2a33ff07dac1df442ca790ae80078c6e9631.tar.gz
portage-idfetch-879e2a33ff07dac1df442ca790ae80078c6e9631.tar.bz2
portage-idfetch-879e2a33ff07dac1df442ca790ae80078c6e9631.zip
Bug #162404 - Automatically disable logging if sesandbox is enabled and a
pty is not available for some reason (currently they are never available with python3). svn path=/main/trunk/; revision=14928
-rw-r--r--pym/_emerge/EbuildProcess.py7
-rw-r--r--pym/_emerge/SpawnProcess.py8
-rw-r--r--pym/portage/__init__.py19
3 files changed, 30 insertions, 4 deletions
diff --git a/pym/_emerge/EbuildProcess.py b/pym/_emerge/EbuildProcess.py
index 86a63282..a6a0b362 100644
--- a/pym/_emerge/EbuildProcess.py
+++ b/pym/_emerge/EbuildProcess.py
@@ -24,6 +24,13 @@ class EbuildProcess(SpawnProcess):
portage._create_pty_or_pipe(copy_term_size=stdout_pipe)
return (master_fd, slave_fd)
+ def _can_log(self, slave_fd):
+ # With sesandbox, logging works through a pty but not through a
+ # normal pipe. So, disable logging if ptys are broken.
+ # See Bug #162404.
+ return not ('sesandbox' in self.settings.features \
+ and self.settings.selinux_enabled()) or os.isatty(slave_fd)
+
def _spawn(self, args, **kwargs):
root_config = self.pkg.root_config
diff --git a/pym/_emerge/SpawnProcess.py b/pym/_emerge/SpawnProcess.py
index 1486e677..67fb17e2 100644
--- a/pym/_emerge/SpawnProcess.py
+++ b/pym/_emerge/SpawnProcess.py
@@ -49,7 +49,6 @@ class SpawnProcess(SubProcess):
if fd == sys.stderr.fileno():
sys.stderr.flush()
- logfile = self.logfile
self._files = self._files_dict()
files = self._files
@@ -57,6 +56,10 @@ class SpawnProcess(SubProcess):
fcntl.fcntl(master_fd, fcntl.F_SETFL,
fcntl.fcntl(master_fd, fcntl.F_GETFL) | os.O_NONBLOCK)
+ logfile = None
+ if self._can_log(slave_fd):
+ logfile = self.logfile
+
null_input = None
fd_pipes_orig = fd_pipes.copy()
if self.background:
@@ -125,6 +128,9 @@ class SpawnProcess(SubProcess):
self.pid = retval[0]
portage.process.spawned_pids.remove(self.pid)
+ def _can_log(self, slave_fd):
+ return True
+
def _pipe(self, fd_pipes):
"""
@type fd_pipes: dict
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index dde0aead..053e33b2 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -4057,12 +4057,25 @@ def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, fakero
if 1 not in fd_pipes or 2 not in fd_pipes:
raise ValueError(fd_pipes)
+ got_pty, master_fd, slave_fd = \
+ _create_pty_or_pipe(copy_term_size=fd_pipes[1])
+
+ if not got_pty and 'sesandbox' in mysettings.features \
+ and mysettings.selinux_enabled():
+ # With sesandbox, logging works through a pty but not through a
+ # normal pipe. So, disable logging if ptys are broken.
+ # See Bug #162404.
+ logfile = None
+ os.close(master_fd)
+ master_fd = None
+ os.close(slave_fd)
+ slave_fd = None
+
+ if logfile:
+
fd_pipes.setdefault(0, sys.stdin.fileno())
fd_pipes_orig = fd_pipes.copy()
- got_pty, master_fd, slave_fd = \
- _create_pty_or_pipe(copy_term_size=fd_pipes_orig[1])
-
# We must set non-blocking mode before we close the slave_fd
# since otherwise the fcntl call can fail on FreeBSD (the child
# process might have already exited and closed slave_fd so we