summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2011-08-12 17:58:11 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-08-15 09:49:37 +0100
commit61d83c6d6b23ea0fa3f99dfb53bf47c727c5a1c6 (patch)
treecbddb0ea6bd9505fc99eb8500b27980d65b9bd59 /bitbake
parenta6c48298b17e6a5844b3638b422fe226e3b67b89 (diff)
downloadast2050-yocto-poky-61d83c6d6b23ea0fa3f99dfb53bf47c727c5a1c6.zip
ast2050-yocto-poky-61d83c6d6b23ea0fa3f99dfb53bf47c727c5a1c6.tar.gz
Ensure only the filtered environment variables are inherited from the OS
The recent change which modified inheritFromOS to use the intial environment, rather than the current environment, introduced a bug such that variables which had been cleaned from the environment where still set in the data store. This patch changes things such that a list of approved environment variables is saved after the environment is cleaned and only the variables in this list are inherited in inheritFromOS. CC: James Limbouris <james.limbouris@gmail.com> CC: Chris Larson <clarson@kergoth.com> (Bitbake rev: cb6c07054e8baf94614713ec257c643b22266d75) Signed-off-by: Joshua Lock <josh@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rwxr-xr-xbitbake/bin/bitbake-layers6
-rw-r--r--bitbake/lib/bb/cooker.py3
-rw-r--r--bitbake/lib/bb/data.py15
-rw-r--r--bitbake/lib/bb/utils.py23
4 files changed, 29 insertions, 18 deletions
diff --git a/bitbake/bin/bitbake-layers b/bitbake/bin/bitbake-layers
index 88fb8ea..119b15c 100755
--- a/bitbake/bin/bitbake-layers
+++ b/bitbake/bin/bitbake-layers
@@ -31,9 +31,10 @@ def main(args):
console.setFormatter(format)
logger.addHandler(console)
+ initialenv = os.environ.copy()
bb.utils.clean_environment()
- cmds = Commands()
+ cmds = Commands(initialenv)
if args:
cmds.onecmd(' '.join(args))
else:
@@ -42,9 +43,8 @@ def main(args):
class Commands(cmd.Cmd):
- def __init__(self):
+ def __init__(self, initialenv):
cmd.Cmd.__init__(self)
- initialenv = os.environ.copy()
self.returncode = 0
self.config = Config(parse_only=True)
self.cooker = bb.cooker.BBCooker(self.config,
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index f7d9923..ff508f6 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -169,7 +169,8 @@ class BBCooker:
if not self.server_registration_cb:
bb.data.setVar("BB_WORKERCONTEXT", "1", self.configuration.data)
- bb.data.inheritFromOS(self.configuration.data, self.savedenv)
+ filtered_keys = bb.utils.approved_variables()
+ bb.data.inheritFromOS(self.configuration.data, self.savedenv, filtered_keys)
try:
self.parseConfigurationFiles(self.configuration.prefile,
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index 65144bf..ac0d880 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -159,16 +159,17 @@ def expandKeys(alterdata, readdata = None):
ekey = todolist[key]
renameVar(key, ekey, alterdata)
-def inheritFromOS(d, savedenv):
+def inheritFromOS(d, savedenv, permitted):
"""Inherit variables from the initial environment."""
exportlist = bb.utils.preserved_envvars_exported()
for s in savedenv.keys():
- try:
- setVar(s, getVar(s, savedenv, True), d)
- if s in exportlist:
- setVarFlag(s, "export", True, d)
- except TypeError:
- pass
+ if s in permitted:
+ try:
+ setVar(s, getVar(s, savedenv, True), d)
+ if s in exportlist:
+ setVarFlag(s, "export", True, d)
+ except TypeError:
+ pass
def emit_var(var, o=sys.__stdout__, d = init(), all=False):
"""Emit a variable to be sourced by a shell."""
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py
index 1cf1a8d..1f55407 100644
--- a/bitbake/lib/bb/utils.py
+++ b/bitbake/lib/bb/utils.py
@@ -565,18 +565,27 @@ def create_interactive_env(d):
for k in preserved_envvars_exported_interactive():
os.setenv(k, bb.data.getVar(k, d, True))
+def approved_variables():
+ """
+ Determine and return the list of whitelisted variables which are approved
+ to remain in the envrionment.
+ """
+ approved = []
+ if 'BB_ENV_WHITELIST' in os.environ:
+ approved = os.environ['BB_ENV_WHITELIST'].split()
+ else:
+ approved = preserved_envvars()
+ if 'BB_ENV_EXTRAWHITE' in os.environ:
+ approved.extend(os.environ['BB_ENV_EXTRAWHITE'].split())
+ return approved
+
def clean_environment():
"""
Clean up any spurious environment variables. This will remove any
- variables the user hasn't chose to preserve.
+ variables the user hasn't chosen to preserve.
"""
if 'BB_PRESERVE_ENV' not in os.environ:
- if 'BB_ENV_WHITELIST' in os.environ:
- good_vars = os.environ['BB_ENV_WHITELIST'].split()
- else:
- good_vars = preserved_envvars()
- if 'BB_ENV_EXTRAWHITE' in os.environ:
- good_vars.extend(os.environ['BB_ENV_EXTRAWHITE'].split())
+ good_vars = approved_variables()
filter_environment(good_vars)
def empty_environment():
OpenPOWER on IntegriCloud