diff options
| -rwxr-xr-x | bitbake-dev/bin/bitbake | 11 | ||||
| -rw-r--r-- | bitbake-dev/lib/bb/data.py | 21 | ||||
| -rw-r--r-- | bitbake-dev/lib/bb/data_smart.py | 3 | ||||
| -rw-r--r-- | bitbake-dev/lib/bb/utils.py | 54 | ||||
| -rwxr-xr-x | bitbake/bin/bitbake | 10 | ||||
| -rw-r--r-- | bitbake/lib/bb/data.py | 21 | ||||
| -rw-r--r-- | bitbake/lib/bb/data_smart.py | 3 | ||||
| -rw-r--r-- | bitbake/lib/bb/utils.py | 54 | 
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! | 
