Bug #190268 - Avoid unwanted sandbox violations in src_test().
authorZac Medico <zmedico@gentoo.org>
Sat, 8 Sep 2007 06:51:59 +0000 (06:51 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 8 Sep 2007 06:51:59 +0000 (06:51 -0000)
  - Allow SANDBOX_* variables to pass through.
  - Don't try to create an sandbox instance inside a test case in order to
    interaction with SANDBOX_* variables in src_test().

svn path=/main/trunk/; revision=7759

pym/portage/__init__.py
pym/portage/tests/ebuild/test_spawn.py

index 62648ee870db64f7b9672e2919622abf5c58bd99..e11b8f41979efe9d2abcc375e37414a1f5c68c14 100644 (file)
@@ -1201,8 +1201,7 @@ class config(object):
 
                        # Blacklist vars that could interfere with portage internals.
                        for blacklisted in "CATEGORY", "PKGUSE", "PORTAGE_CONFIGROOT", \
-                               "ROOT", "SANDBOX_DENY", "SANDBOX_PREDICT", "SANDBOX_READ", \
-                               "SANDBOX_WRITE":
+                               "ROOT":
                                for cfg in self.lookuplist:
                                        cfg.pop(blacklisted, None)
                        del blacklisted, cfg
index 66e8f9ea7d8ff14e8c756e0fc1352e474a598566..f582723bcbd5bf1fa4835b485c01bce3db6502dd 100644 (file)
@@ -16,8 +16,16 @@ class SpawnTestCase(TestCase):
                        os.close(fd)
                        null_fd = os.open('/dev/null', os.O_RDWR)
                        test_string = 2 * "blah blah blah\n"
+                       # Test cases are unique because they run inside src_test() which
+                       # may or may not already be running within a sandbox. Interaction
+                       # with SANDBOX_* variables may trigger unwanted sandbox violations
+                       # that are only reproducible with certain combinations of sandbox,
+                       # usersandbox, and userpriv FEATURES. Attempts to filter SANDBOX_*
+                       # variables can interfere with a currently running sandbox
+                       # instance. Therefore, use free=1 here to avoid potential
+                       # interactions (see bug #190268).
                        spawn("echo -n '%s'" % test_string, settings, logfile=logfile,
-                               fd_pipes={0:sys.stdin.fileno(), 1:null_fd, 2:null_fd})
+                               free=1, fd_pipes={0:sys.stdin.fileno(), 1:null_fd, 2:null_fd})
                        os.close(null_fd)
                        f = open(logfile, 'r')
                        log_content = f.read()