Add a new PORTAGE_WORKDIR_MODE config variable so that the mode of WORKDIR is no...
authorZac Medico <zmedico@gentoo.org>
Thu, 16 Mar 2006 03:30:26 +0000 (03:30 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 16 Mar 2006 03:30:26 +0000 (03:30 -0000)
svn path=/main/trunk/; revision=2901

bin/ebuild.sh
cnf/make.globals
pym/portage.py

index 71bb780710ee8242352e569e24b959dd866551b3..1402f71a46acb498dd8af287d79db744b6e27987 100755 (executable)
@@ -714,8 +714,10 @@ dyn_unpack() {
                fi
        fi
 
-       install -m0700 -d "${WORKDIR}" || die "Failed to create dir '${WORKDIR}'"
-       [ -d "$WORKDIR" ] && cd "${WORKDIR}"
+       if [ ! -d "${WORKDIR}" ]; then
+               install -m${PORTAGE_WORKDIR_MODE-0700} -d "${WORKDIR}" || die "Failed to create dir '${WORKDIR}'"
+       fi
+       cd "${WORKDIR}" || die "Directory change failed: \`cd '${WORKDIR}'\`"
        echo ">>> Unpacking source..."
        src_unpack
        touch "${PORTAGE_BUILDDIR}/.unpacked" || die "IO Failure -- Failed 'touch .unpacked' in ${PORTAGE_BUILDDIR}"
index 2586ca2fa16f03d34521ad8f35276a49d51c4c60..cdcceb198b4c5c5060734bc81a30e1516b66e936 100644 (file)
@@ -64,6 +64,9 @@ USE_ORDER="env:pkg:conf:defaults"
 PORTAGE_INST_UID="0"
 PORTAGE_INST_GID="0"
 
+# Mode bits for ${WORKDIR} (see ebuild.5).
+PORTAGE_WORKDIR_MODE="0700"
+
 #            *****************************
 #            **  DO NOT EDIT THIS FILE  **
 # ***************************************************
index a5350bcde99829c23cf287d085a38cd27bf85bc2..47308629ff956511930c2789c82efe4b705f8924 100644 (file)
@@ -2624,6 +2624,23 @@ def prepare_build_dirs(myroot, mysettings, cleanup):
        mysettings["WORKDIR"]=mysettings["PORTAGE_BUILDDIR"]+"/work"
        mysettings["D"]=mysettings["PORTAGE_BUILDDIR"]+"/image/"
 
+       workdir_mode = 0700
+       try:
+               workdir_mode = int(eval(mysettings["PORTAGE_WORKDIR_MODE"]))
+               if workdir_mode & 07777 != workdir_mode:
+                       raise ValueError("Invalid file mode: %s" % mysettings["PORTAGE_WORKDIR_MODE"])
+       except KeyError, e:
+               writemsg("!!! PORTAGE_WORKDIR_MODE is unset, using %s." % oct(workdir_mode))
+       except ValueError, e:
+               writemsg("%s\n" % e)
+               writemsg("!!! Unable to parse PORTAGE_WORKDIR_MODE='%s', using %s.\n" % \
+               (mysettings["PORTAGE_WORKDIR_MODE"], oct(workdir_mode)))
+       try:
+               apply_secpass_permissions(mysettings["WORKDIR"],
+               uid=portage_uid, gid=portage_gid, mode=workdir_mode)
+       except portage_exception.FileNotFound:
+               pass # ebuild.sh will create it
+
        if mysettings.has_key("PORT_LOGDIR"):
                if not os.access(mysettings["PORT_LOGDIR"],os.F_OK):
                        try: