1 # Copyright 2010-2013 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
4 from __future__ import unicode_literals
7 'case_insensitive_vars', 'default_globals', 'env_blacklist', \
8 'environ_filter', 'environ_whitelist', 'environ_whitelist_re',
13 # Blacklisted variables are internal variables that are never allowed
14 # to enter the config instance from the external environment or
15 # configuration files.
16 env_blacklist = frozenset((
17 "A", "AA", "CATEGORY", "DEPEND", "DESCRIPTION", "EAPI",
18 "EBUILD_FORCE_TEST", "EBUILD_PHASE",
19 "EBUILD_PHASE_FUNC", "EBUILD_SKIP_MANIFEST",
20 "ED", "EMERGE_FROM", "EPREFIX", "EROOT",
21 "GREP_OPTIONS", "HDEPEND", "HOMEPAGE",
22 "INHERITED", "IUSE", "IUSE_EFFECTIVE",
23 "KEYWORDS", "LICENSE", "MERGE_TYPE",
24 "PDEPEND", "PF", "PKGUSE", "PORTAGE_BACKGROUND",
25 "PORTAGE_BACKGROUND_UNMERGE", "PORTAGE_BUILDDIR_LOCKED",
26 "PORTAGE_BUILT_USE", "PORTAGE_CONFIGROOT",
27 "PORTAGE_INTERNAL_CALLER", "PORTAGE_IUSE",
28 "PORTAGE_NONFATAL", "PORTAGE_PIPE_FD", "PORTAGE_REPO_NAME",
29 "PORTAGE_USE", "PROPERTIES", "PROVIDE", "RDEPEND", "REPOSITORY",
30 "RESTRICT", "ROOT", "SLOT", "SRC_URI"
33 environ_whitelist = []
35 # Whitelisted variables are always allowed to enter the ebuild
36 # environment. Generally, this only includes special portage
37 # variables. Ebuilds can unset variables that are not whitelisted
38 # and rely on them remaining unset for future phases, without them
39 # leaking back in from various locations (bug #189417). It's very
40 # important to set our special BASH_ENV variable in the ebuild
41 # environment in order to prevent sandbox from sourcing /etc/profile
42 # in it's bashrc (causing major leakage).
43 environ_whitelist += [
44 "ACCEPT_LICENSE", "BASH_ENV", "BUILD_PREFIX", "COLUMNS", "D",
45 "DISTDIR", "DOC_SYMLINKS_DIR", "EAPI", "EBUILD",
47 "EBUILD_PHASE", "EBUILD_PHASE_FUNC", "ECLASSDIR", "ECLASS_DEPTH", "ED",
48 "EMERGE_FROM", "EPREFIX", "EROOT",
49 "FEATURES", "FILESDIR", "HOME", "MERGE_TYPE", "NOCOLOR", "PATH",
51 "PKGUSE", "PKG_LOGDIR", "PKG_TMPDIR",
52 "PORTAGE_ACTUAL_DISTDIR", "PORTAGE_ARCHLIST",
53 "PORTAGE_BASHRC", "PM_EBUILD_HOOK_DIR",
54 "PORTAGE_BINPKG_FILE", "PORTAGE_BINPKG_TAR_OPTS",
55 "PORTAGE_BINPKG_TMPFILE",
57 "PORTAGE_BUILDDIR", "PORTAGE_BUILD_GROUP", "PORTAGE_BUILD_USER",
58 "PORTAGE_BUNZIP2_COMMAND", "PORTAGE_BZIP2_COMMAND",
59 "PORTAGE_COLORMAP", "PORTAGE_COMPRESS",
60 "PORTAGE_COMPRESS_EXCLUDE_SUFFIXES",
61 "PORTAGE_CONFIGROOT", "PORTAGE_DEBUG", "PORTAGE_DEPCACHEDIR",
62 "PORTAGE_DOHTML_UNWARNED_SKIPPED_EXTENSIONS",
63 "PORTAGE_DOHTML_UNWARNED_SKIPPED_FILES",
64 "PORTAGE_DOHTML_WARN_ON_SKIPPED_FILES",
65 "PORTAGE_EBUILD_EXIT_FILE", "PORTAGE_FEATURES",
66 "PORTAGE_GID", "PORTAGE_GRPNAME",
67 "PORTAGE_INTERNAL_CALLER",
68 "PORTAGE_INST_GID", "PORTAGE_INST_UID",
69 "PORTAGE_IPC_DAEMON", "PORTAGE_IUSE",
70 "PORTAGE_LOG_FILE", "PORTAGE_OVERRIDE_EPREFIX", "PORTAGE_PIPE_FD",
71 "PORTAGE_PYM_PATH", "PORTAGE_PYTHON", "PORTAGE_QUIET",
72 "PORTAGE_REPO_NAME", "PORTAGE_RESTRICT",
73 "PORTAGE_SIGPIPE_STATUS",
74 "PORTAGE_TMPDIR", "PORTAGE_UPDATE_ENV", "PORTAGE_USERNAME",
75 "PORTAGE_VERBOSE", "PORTAGE_WORKDIR_MODE",
76 "PORTDIR", "PORTDIR_OVERLAY", "PREROOTPATH", "PROFILE_PATHS",
77 "REPLACING_VERSIONS", "REPLACED_BY_VERSION",
78 "ROOT", "ROOTPATH", "T", "TMP", "TMPDIR",
79 "USE_EXPAND", "USE_ORDER", "WORKDIR",
80 "XARGS", "__PORTAGE_TEST_HARDLINK_LOCKS",
83 # user config variables
84 environ_whitelist += [
85 "DOC_SYMLINKS_DIR", "INSTALL_MASK", "PKG_INSTALL_MASK"
88 environ_whitelist += [
89 "A", "AA", "CATEGORY", "P", "PF", "PN", "PR", "PV", "PVR"
92 # misc variables inherited from the calling environment
93 environ_whitelist += [
94 "COLORTERM", "DISPLAY", "EDITOR", "LESS",
95 "LESSOPEN", "LOGNAME", "LS_COLORS", "PAGER",
96 "TERM", "TERMCAP", "USER",
97 'ftp_proxy', 'http_proxy', 'no_proxy',
101 environ_whitelist += [
102 "TMPDIR", "TEMP", "TMP",
105 # localization settings
106 environ_whitelist += [
107 "LANG", "LC_COLLATE", "LC_CTYPE", "LC_MESSAGES",
108 "LC_MONETARY", "LC_NUMERIC", "LC_TIME", "LC_PAPER",
112 # other variables inherited from the calling environment
113 environ_whitelist += [
114 "CVS_RSH", "ECHANGELOG_USER",
116 "SSH_AGENT_PID", "SSH_AUTH_SOCK",
117 "STY", "WINDOW", "XAUTHORITY",
120 environ_whitelist = frozenset(environ_whitelist)
122 environ_whitelist_re = re.compile(r'^(CCACHE_|DISTCC_).*')
124 # Filter selected variables in the config.environ() method so that
125 # they don't needlessly propagate down into the ebuild environment.
128 # Exclude anything that could be extremely long here (like SRC_URI)
129 # since that could cause execve() calls to fail with E2BIG errors. For
130 # example, see bug #262647.
132 'DEPEND', 'RDEPEND', 'PDEPEND', 'SRC_URI',
135 # misc variables inherited from the calling environment
137 "INFOPATH", "MANPATH", "USER",
140 # variables that break bash
142 "HISTFILE", "POSIXLY_CORRECT",
145 # portage config variables and variables set directly by portage
147 "ACCEPT_CHOSTS", "ACCEPT_KEYWORDS", "ACCEPT_PROPERTIES", "AUTOCLEAN",
148 "CLEAN_DELAY", "COLLISION_IGNORE",
149 "CONFIG_PROTECT", "CONFIG_PROTECT_MASK",
150 "EGENCACHE_DEFAULT_OPTS", "EMERGE_DEFAULT_OPTS",
152 "EMERGE_WARNING_DELAY",
153 "FETCHCOMMAND", "FETCHCOMMAND_FTP",
154 "FETCHCOMMAND_HTTP", "FETCHCOMMAND_HTTPS",
155 "FETCHCOMMAND_RSYNC", "FETCHCOMMAND_SFTP",
156 "GENTOO_MIRRORS", "NOCONFMEM", "O",
157 "PORTAGE_BACKGROUND", "PORTAGE_BACKGROUND_UNMERGE",
159 "PORTAGE_BUILDDIR_LOCKED",
160 "PORTAGE_CHECKSUM_FILTER",
161 "PORTAGE_ELOG_CLASSES",
162 "PORTAGE_ELOG_MAILFROM", "PORTAGE_ELOG_MAILSUBJECT",
163 "PORTAGE_ELOG_MAILURI", "PORTAGE_ELOG_SYSTEM",
164 "PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS", "PORTAGE_FETCH_RESUME_MIN_SIZE",
166 "PORTAGE_GPG_KEY", "PORTAGE_GPG_SIGNING_COMMAND",
167 "PORTAGE_IONICE_COMMAND",
168 "PORTAGE_PACKAGE_EMPTY_ABORT",
169 "PORTAGE_REPO_DUPLICATE_WARN",
170 "PORTAGE_RO_DISTDIRS",
171 "PORTAGE_RSYNC_EXTRA_OPTS", "PORTAGE_RSYNC_OPTS",
172 "PORTAGE_RSYNC_RETRIES", "PORTAGE_SYNC_STALE",
173 "PORTAGE_USE", "PORTAGE_XATTR_EXCLUDE",
174 "PORT_LOGDIR", "PORT_LOGDIR_CLEAN",
175 "QUICKPKG_DEFAULT_OPTS", "REPOMAN_DEFAULT_OPTS",
176 "RESUMECOMMAND", "RESUMECOMMAND_FTP",
177 "RESUMECOMMAND_HTTP", "RESUMECOMMAND_HTTPS",
178 "RESUMECOMMAND_RSYNC", "RESUMECOMMAND_SFTP",
179 "SYNC", "UNINSTALL_IGNORE", "USE_EXPAND_HIDDEN", "USE_ORDER",
183 environ_filter = frozenset(environ_filter)
185 # Variables that are not allowed to have per-repo or per-package
187 global_only_vars = frozenset([
192 'ACCEPT_LICENSE': '* -@EULA',
193 'ACCEPT_PROPERTIES': '*',
194 'PORTAGE_BZIP2_COMMAND': 'bzip2',
197 validate_commands = ('PORTAGE_BZIP2_COMMAND', 'PORTAGE_BUNZIP2_COMMAND',)
199 # To enhance usability, make some vars case insensitive
200 # by forcing them to lower case.
201 case_insensitive_vars = ('AUTOCLEAN', 'NOCOLOR',)