summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbitbake-dev/bin/bitbake11
-rw-r--r--bitbake-dev/lib/bb/data.py21
-rw-r--r--bitbake-dev/lib/bb/data_smart.py3
-rw-r--r--bitbake-dev/lib/bb/utils.py54
-rwxr-xr-xbitbake/bin/bitbake10
-rw-r--r--bitbake/lib/bb/data.py21
-rw-r--r--bitbake/lib/bb/data_smart.py3
-rw-r--r--bitbake/lib/bb/utils.py54
8 files changed, 141 insertions, 36 deletions
diff --git a/bitbake-dev/bin/bitbake b/bitbake-dev/bin/bitbake
index c994edb84b..247b54fcd3 100755
--- a/bitbake-dev/bin/bitbake
+++ b/bitbake-dev/bin/bitbake
@@ -140,6 +140,17 @@ Default BBFILES are the .bb files in the current directory.""" )
cooker = bb.cooker.BBCooker(configuration)
+
+ # Optionally clean up the environment
+ 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 = bb.utils.preserved_envvars_list()
+ if 'BB_ENV_EXTRAWHITE' in os.environ:
+ good_vars.extend(os.environ['BB_ENV_EXTRAWHITE'].split())
+ bb.utils.filter_environment(good_vars)
+
cooker.parseConfiguration()
host = cooker.server.host
port = cooker.server.port
diff --git a/bitbake-dev/lib/bb/data.py b/bitbake-dev/lib/bb/data.py
index 54b2615afb..82eef44989 100644
--- a/bitbake-dev/lib/bb/data.py
+++ b/bitbake-dev/lib/bb/data.py
@@ -324,21 +324,15 @@ def expandData(alterdata, readdata = None):
if val != expanded:
setVar(key, expanded, alterdata)
-import os
-
def inheritFromOS(d):
"""Inherit variables from the environment."""
-# fakeroot needs to be able to set these
- non_inherit_vars = [ "LD_LIBRARY_PATH", "LD_PRELOAD" ]
for s in os.environ.keys():
- if not s in non_inherit_vars:
- try:
- setVar(s, os.environ[s], d)
- setVarFlag(s, 'matchesenv', '1', d)
- except TypeError:
- pass
-
-import sys
+ try:
+ setVar(s, os.environ[s], d)
+ except TypeError:
+ pass
+ os.unsetenv(s)
+ del os.environ[s]
def emit_var(var, o=sys.__stdout__, d = init(), all=False):
"""Emit a variable to be sourced by a shell."""
@@ -379,9 +373,6 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False):
o.write('unset %s\n' % varExpanded)
return 1
- if getVarFlag(var, 'matchesenv', d):
- return 0
-
val.rstrip()
if not val:
return 0
diff --git a/bitbake-dev/lib/bb/data_smart.py b/bitbake-dev/lib/bb/data_smart.py
index b3a51b0edf..0d39d20a45 100644
--- a/bitbake-dev/lib/bb/data_smart.py
+++ b/bitbake-dev/lib/bb/data_smart.py
@@ -149,9 +149,6 @@ class DataSmart:
if not var in self.dict:
self._makeShadowCopy(var)
- if self.getVarFlag(var, 'matchesenv'):
- self.delVarFlag(var, 'matchesenv')
- self.setVarFlag(var, 'export', 1)
# more cookies for the cookie monster
if '_' in var:
diff --git a/bitbake-dev/lib/bb/utils.py b/bitbake-dev/lib/bb/utils.py
index 0a0c9ada34..9c9eb5d328 100644
--- a/bitbake-dev/lib/bb/utils.py
+++ b/bitbake-dev/lib/bb/utils.py
@@ -296,6 +296,60 @@ def sha256_file(filename):
s.update(line)
return s.hexdigest()
+def preserved_envvars_list():
+ return [
+ 'BBPATH',
+ 'BB_PRESERVE_ENV',
+ 'BB_ENV_WHITELIST',
+ 'BB_ENV_EXTRAWHITE',
+ 'COLORTERM',
+ 'DBUS_SESSION_BUS_ADDRESS',
+ 'DESKTOP_SESSION',
+ 'DESKTOP_STARTUP_ID',
+ 'DISPLAY',
+ 'GNOME_KEYRING_PID',
+ 'GNOME_KEYRING_SOCKET',
+ 'GPG_AGENT_INFO',
+ 'GTK_RC_FILES',
+ 'HOME',
+ 'LANG',
+ 'LOGNAME',
+ 'PATH',
+ 'PWD',
+ 'SESSION_MANAGER',
+ 'SHELL',
+ 'SSH_AUTH_SOCK',
+ 'TERM',
+ 'USER',
+ 'USERNAME',
+ '_',
+ 'XAUTHORITY',
+ 'XDG_DATA_DIRS',
+ 'XDG_SESSION_COOKIE',
+ ]
+
+def filter_environment(good_vars):
+ """
+ Create a pristine environment for bitbake. This will remove variables that
+ are not known and may influence the build in a negative way.
+ """
+
+ import bb
+
+ removed_vars = []
+ for key in os.environ.keys():
+ if key in good_vars:
+ continue
+
+ removed_vars.append(key)
+ os.unsetenv(key)
+ del os.environ[key]
+
+ if len(removed_vars):
+ bb.debug(1, "Removed the following variables from the environment:", ",".join(removed_vars))
+
+ return removed_vars
+
def prunedir(topdir):
# Delete everything reachable from the directory named in 'topdir'.
# CAUTION: This is dangerous!
diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake
index e262d0b9b4..dc35152d57 100755
--- a/bitbake/bin/bitbake
+++ b/bitbake/bin/bitbake
@@ -113,6 +113,16 @@ Default BBFILES are the .bb files in the current directory.""" )
cooker = bb.cooker.BBCooker(configuration)
+ # Optionally clean up the environment
+ 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 = bb.utils.preserved_envvars_list()
+ if 'BB_ENV_EXTRAWHITE' in os.environ:
+ good_vars.extend(os.environ['BB_ENV_EXTRAWHITE'].split())
+ bb.utils.filter_environment(good_vars)
+
cooker.parseConfiguration()
if configuration.profile:
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index 54b2615afb..82eef44989 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -324,21 +324,15 @@ def expandData(alterdata, readdata = None):
if val != expanded:
setVar(key, expanded, alterdata)
-import os
-
def inheritFromOS(d):
"""Inherit variables from the environment."""
-# fakeroot needs to be able to set these
- non_inherit_vars = [ "LD_LIBRARY_PATH", "LD_PRELOAD" ]
for s in os.environ.keys():
- if not s in non_inherit_vars:
- try:
- setVar(s, os.environ[s], d)
- setVarFlag(s, 'matchesenv', '1', d)
- except TypeError:
- pass
-
-import sys
+ try:
+ setVar(s, os.environ[s], d)
+ except TypeError:
+ pass
+ os.unsetenv(s)
+ del os.environ[s]
def emit_var(var, o=sys.__stdout__, d = init(), all=False):
"""Emit a variable to be sourced by a shell."""
@@ -379,9 +373,6 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False):
o.write('unset %s\n' % varExpanded)
return 1
- if getVarFlag(var, 'matchesenv', d):
- return 0
-
val.rstrip()
if not val:
return 0
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py
index b3a51b0edf..0d39d20a45 100644
--- a/bitbake/lib/bb/data_smart.py
+++ b/bitbake/lib/bb/data_smart.py
@@ -149,9 +149,6 @@ class DataSmart:
if not var in self.dict:
self._makeShadowCopy(var)
- if self.getVarFlag(var, 'matchesenv'):
- self.delVarFlag(var, 'matchesenv')
- self.setVarFlag(var, 'export', 1)
# more cookies for the cookie monster
if '_' in var:
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py
index 9c8d8e8435..3c1fd31b03 100644
--- a/bitbake/lib/bb/utils.py
+++ b/bitbake/lib/bb/utils.py
@@ -296,6 +296,60 @@ def sha256_file(filename):
s.update(line)
return s.hexdigest()
+def preserved_envvars_list():
+ return [
+ 'BBPATH',
+ 'BB_PRESERVE_ENV',
+ 'BB_ENV_WHITELIST',
+ 'BB_ENV_EXTRAWHITE',
+ 'COLORTERM',
+ 'DBUS_SESSION_BUS_ADDRESS',
+ 'DESKTOP_SESSION',
+ 'DESKTOP_STARTUP_ID',
+ 'DISPLAY',
+ 'GNOME_KEYRING_PID',
+ 'GNOME_KEYRING_SOCKET',
+ 'GPG_AGENT_INFO',
+ 'GTK_RC_FILES',
+ 'HOME',
+ 'LANG',
+ 'LOGNAME',
+ 'PATH',
+ 'PWD',
+ 'SESSION_MANAGER',
+ 'SHELL',
+ 'SSH_AUTH_SOCK',
+ 'TERM',
+ 'USER',
+ 'USERNAME',
+ '_',
+ 'XAUTHORITY',
+ 'XDG_DATA_DIRS',
+ 'XDG_SESSION_COOKIE',
+ ]
+
+def filter_environment(good_vars):
+ """
+ Create a pristine environment for bitbake. This will remove variables that
+ are not known and may influence the build in a negative way.
+ """
+
+ import bb
+
+ removed_vars = []
+ for key in os.environ.keys():
+ if key in good_vars:
+ continue
+
+ removed_vars.append(key)
+ os.unsetenv(key)
+ del os.environ[key]
+
+ if len(removed_vars):
+ bb.debug(1, "Removed the following variables from the environment:", ",".join(removed_vars))
+
+ return removed_vars
+
def prunedir(topdir):
# Delete everything reachable from the directory named in 'topdir'.
# CAUTION: This is dangerous!