diff options
author | Zac Medico <zmedico@gentoo.org> | 2016-09-24 18:45:37 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2016-09-26 10:05:27 -0700 |
commit | 120deae6d7e63a35fc068aa92ff2e4263c98e5b6 (patch) | |
tree | 6dee9945d7bd7ad403f5a8c8580c7f4c26dd39e2 | |
parent | doebuild_environment: disable ccache/distcc/icecc when necessary (bug 594982) (diff) | |
download | portage-120deae6.tar.gz portage-120deae6.tar.bz2 portage-120deae6.zip |
ebuild.sh: start phases in temporary HOME if available (bug 595028)
This will avoid undesirable interactions with the python sitedir,
as reported in bug 574002. Since the temporary HOME is not guaranteed
to exist for some phases, use PORTAGE_PYM_PATH as a fallback. Also,
use PORTAGE_PYM_PATH inside __dyn_clean, since HOME is removed there.
X-Gentoo-Bug: 595028
X-Gentoo-Bug-URL: https://bugs.gentoo.org/595028
Acked-by: Alexander Berntsen <bernalex@gentoo.org>
-rwxr-xr-x | bin/ebuild.sh | 11 | ||||
-rw-r--r-- | bin/phase-functions.sh | 8 |
2 files changed, 13 insertions, 6 deletions
diff --git a/bin/ebuild.sh b/bin/ebuild.sh index 5b3146dc0..a400ef72e 100755 --- a/bin/ebuild.sh +++ b/bin/ebuild.sh @@ -167,9 +167,14 @@ export SANDBOX_ON=0 # Ensure that $PWD is sane whenever possible, to protect against # exploitation of insecure search path for python -c in ebuilds. -# See bug #239560 and bug #469338. -cd "${PORTAGE_PYM_PATH}" || \ - die "PORTAGE_PYM_PATH does not exist: '${PORTAGE_PYM_PATH}'" +# See bug #239560, bug #469338, and bug #595028. +if [[ -d ${HOME} ]]; then + # Use portage's temporary HOME directory if available. + cd "${HOME}" || die +else + cd "${PORTAGE_PYM_PATH}" || \ + die "PORTAGE_PYM_PATH does not exist: '${PORTAGE_PYM_PATH}'" +fi #if no perms are specified, dirs/files will have decent defaults #(not secretive, but not stupid) diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh index d75f43f30..50f0fdb9b 100644 --- a/bin/phase-functions.sh +++ b/bin/phase-functions.sh @@ -261,6 +261,11 @@ __dyn_clean() { chflags -R nosunlnk,nouunlnk "${PORTAGE_BUILDDIR}" 2>/dev/null fi + # Some kernels, such as Solaris, return EINVAL when an attempt + # is made to remove the current working directory. + cd "${PORTAGE_PYM_PATH}" || \ + die "PORTAGE_PYM_PATH does not exist: '${PORTAGE_PYM_PATH}'" + rm -rf "${PORTAGE_BUILDDIR}/image" "${PORTAGE_BUILDDIR}/homedir" rm -f "${PORTAGE_BUILDDIR}/.installed" @@ -288,9 +293,6 @@ __dyn_clean() { # result in it wiping the users distfiles directory (bad). rm -rf "${PORTAGE_BUILDDIR}/distdir" - # Some kernels, such as Solaris, return EINVAL when an attempt - # is made to remove the current working directory. - cd "$PORTAGE_BUILDDIR"/../.. rmdir "$PORTAGE_BUILDDIR" 2>/dev/null true |