Add a _SANDBOX_COMPAT_LEVEL constant which will be used to enable
authorZac Medico <zmedico@gentoo.org>
Thu, 2 Sep 2010 19:24:02 +0000 (12:24 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 2 Sep 2010 19:24:02 +0000 (12:24 -0700)
a workaround for bug #288863 in the stable branch.

bin/ebuild.sh
bin/isolated-functions.sh
pym/portage/const.py
pym/portage/package/ebuild/_config/special_env_vars.py
pym/portage/package/ebuild/config.py

index 73ea8c807ebf753c338ea5936c7929161e89ddff..714084f0bb5a5c16b81b73e51d2a1b1645e652e6 100755 (executable)
@@ -5,6 +5,15 @@
 PORTAGE_BIN_PATH="${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"
 PORTAGE_PYM_PATH="${PORTAGE_PYM_PATH:-/usr/lib/portage/pym}"
 
+if [[ $PORTAGE_SANDBOX_COMPAT_LEVEL -lt 22 ]] ; then
+       # Ensure that /dev/std* streams have appropriate sandbox permission for
+       # bug #288863. This can be removed after sandbox is fixed and portage
+       # depends on the fixed version (sandbox-2.2 has the fix but it is
+       # currently unstable).
+       export SANDBOX_WRITE="${SANDBOX_WRITE:+${SANDBOX_WRITE}:}/dev/stdout:/dev/stderr"
+       export SANDBOX_READ="${SANDBOX_READ:+${SANDBOX_READ}:}/dev/stdin"
+fi
+
 # Don't use sandbox's BASH_ENV for new shells because it does
 # 'source /etc/profile' which can interfere with the build
 # environment by modifying our PATH.
index 46685f8911de954f7ff1c6dc5481ec23aec7ff9a..12feea0eda4c3d4d0366c3adfd66e9a492d68833 100644 (file)
@@ -603,7 +603,8 @@ save_ebuild_env() {
                        PORTAGE_INST_UID PORTAGE_IPC_DAEMON \
                        PORTAGE_LOG_FILE PORTAGE_MASTER_PID \
                        PORTAGE_NONFATAL PORTAGE_QUIET PORTAGE_PYTHON \
-                       PORTAGE_REPO_NAME PORTAGE_RESTRICT PORTAGE_SIGPIPE_STATUS \
+                       PORTAGE_REPO_NAME PORTAGE_RESTRICT \
+                       PORTAGE_SANDBOX_COMPAT_LEVEL PORTAGE_SIGPIPE_STATUS \
                        PORTAGE_UPDATE_ENV \
                        PORTAGE_USERNAME PORTAGE_VERBOSE PORTAGE_WORKDIR_MODE PORTDIR \
                        PORTDIR_OVERLAY ${!PORTAGE_SANDBOX_*} PREROOTPATH \
index 5ef7eece1f17bad5869918705fc5779e9fb86855..3a77006f74d8256f778fd03842270b4ea834ffca 100644 (file)
@@ -121,6 +121,7 @@ _ENABLE_DYN_LINK_MAP    = True
 _ENABLE_PRESERVE_LIBS   = True
 _ENABLE_REPO_NAME_WARN  = True
 _ENABLE_SET_CONFIG      = True
+_SANDBOX_COMPAT_LEVEL   = "22"
 
 
 # The definitions above will differ between branches, so it's useful to have
index 4ad4a0e9ac48a8d642df34b4d639e95e22561668..86226157ee15ed54f2df7858eeede7c81cc69a92 100644 (file)
@@ -14,7 +14,7 @@ env_blacklist = frozenset((
        "HOMEPAGE", "INHERITED", "IUSE",
        "KEYWORDS", "LICENSE", "PDEPEND", "PF", "PKGUSE",
        "PORTAGE_BUILT_USE", "PORTAGE_CONFIGROOT", "PORTAGE_IUSE",
-       "PORTAGE_NONFATAL", "PORTAGE_REPO_NAME",
+       "PORTAGE_NONFATAL", "PORTAGE_REPO_NAME", "PORTAGE_SANDBOX_COMPAT_LEVEL",
        "PORTAGE_USE", "PROPERTIES", "PROVIDE", "RDEPEND", "RESTRICT",
        "ROOT", "SLOT", "SRC_URI"
 ))
@@ -52,7 +52,8 @@ environ_whitelist += [
        "PORTAGE_IPC_DAEMON", "PORTAGE_IUSE",
        "PORTAGE_LOG_FILE", "PORTAGE_MASTER_PID",
        "PORTAGE_PYM_PATH", "PORTAGE_PYTHON", "PORTAGE_QUIET",
-       "PORTAGE_REPO_NAME", "PORTAGE_RESTRICT", "PORTAGE_SIGPIPE_STATUS",
+       "PORTAGE_REPO_NAME", "PORTAGE_RESTRICT",
+       "PORTAGE_SANDBOX_COMPAT_LEVEL", "PORTAGE_SIGPIPE_STATUS",
        "PORTAGE_TMPDIR", "PORTAGE_UPDATE_ENV", "PORTAGE_USERNAME",
        "PORTAGE_VERBOSE", "PORTAGE_WORKDIR_MODE",
        "PORTDIR", "PORTDIR_OVERLAY", "PREROOTPATH", "PROFILE_PATHS",
index 443a735eb8101167ce31dc499ca38352a5adea3c..6ccb1da5f3410737568fc3d4c79772c90afcaa8f 100644 (file)
@@ -29,6 +29,7 @@ from portage.const import CACHE_PATH, \
        MODULES_FILE_PATH, PORTAGE_BIN_PATH, PORTAGE_PYM_PATH, \
        PRIVATE_PATH, PROFILE_PATH, USER_CONFIG_PATH, \
        USER_VIRTUALS_FILE
+from portage.const import _SANDBOX_COMPAT_LEVEL
 from portage.dbapi import dbapi
 from portage.dbapi.porttree import portdbapi
 from portage.dbapi.vartree import vartree
@@ -528,6 +529,9 @@ class config(object):
                        self["EROOT"] = eroot
                        self.backup_changes("EROOT")
 
+                       self["PORTAGE_SANDBOX_COMPAT_LEVEL"] = _SANDBOX_COMPAT_LEVEL
+                       self.backup_changes("PORTAGE_SANDBOX_COMPAT_LEVEL")
+
                        self.pkeywordsdict = portage.dep.ExtendedAtomDict(dict)
                        self._ppropertiesdict = portage.dep.ExtendedAtomDict(dict)
                        self._penvdict = portage.dep.ExtendedAtomDict(dict)