diff options
author | Joshua Lock <josh@linux.intel.com> | 2011-08-12 17:58:11 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-08-15 09:49:37 +0100 |
commit | 61d83c6d6b23ea0fa3f99dfb53bf47c727c5a1c6 (patch) | |
tree | cbddb0ea6bd9505fc99eb8500b27980d65b9bd59 /bitbake | |
parent | a6c48298b17e6a5844b3638b422fe226e3b67b89 (diff) | |
download | ast2050-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-x | bitbake/bin/bitbake-layers | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/cooker.py | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/data.py | 15 | ||||
-rw-r--r-- | bitbake/lib/bb/utils.py | 23 |
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(): |