PORTAGE_XATTR_EXCLUDE="security.*", bug #461868
[portage.git] / pym / portage / package / ebuild / _config / special_env_vars.py
1 # Copyright 2010-2013 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3
4 from __future__ import unicode_literals
5
6 __all__ = (
7         'case_insensitive_vars', 'default_globals', 'env_blacklist', \
8         'environ_filter', 'environ_whitelist', 'environ_whitelist_re',
9 )
10
11 import re
12
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"
31 ))
32
33 environ_whitelist = []
34
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",
46         "EBUILD_FORCE_TEST",
47         "EBUILD_PHASE", "EBUILD_PHASE_FUNC", "ECLASSDIR", "ECLASS_DEPTH", "ED",
48         "EMERGE_FROM", "EPREFIX", "EROOT",
49         "FEATURES", "FILESDIR", "HOME", "MERGE_TYPE", "NOCOLOR", "PATH",
50         "PKGDIR",
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",
56         "PORTAGE_BIN_PATH",
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",
81 ]
82
83 # user config variables
84 environ_whitelist += [
85         "DOC_SYMLINKS_DIR", "INSTALL_MASK", "PKG_INSTALL_MASK"
86 ]
87
88 environ_whitelist += [
89         "A", "AA", "CATEGORY", "P", "PF", "PN", "PR", "PV", "PVR"
90 ]
91
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',
98 ]
99
100 # tempdir settings
101 environ_whitelist += [
102         "TMPDIR", "TEMP", "TMP",
103 ]
104
105 # localization settings
106 environ_whitelist += [
107         "LANG", "LC_COLLATE", "LC_CTYPE", "LC_MESSAGES",
108         "LC_MONETARY", "LC_NUMERIC", "LC_TIME", "LC_PAPER",
109         "LC_ALL",
110 ]
111
112 # other variables inherited from the calling environment
113 environ_whitelist += [
114         "CVS_RSH", "ECHANGELOG_USER",
115         "GPG_AGENT_INFO",
116         "SSH_AGENT_PID", "SSH_AUTH_SOCK",
117         "STY", "WINDOW", "XAUTHORITY",
118 ]
119
120 environ_whitelist = frozenset(environ_whitelist)
121
122 environ_whitelist_re = re.compile(r'^(CCACHE_|DISTCC_).*')
123
124 # Filter selected variables in the config.environ() method so that
125 # they don't needlessly propagate down into the ebuild environment.
126 environ_filter = []
127
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.
131 environ_filter += [
132         'DEPEND', 'RDEPEND', 'PDEPEND', 'SRC_URI',
133 ]
134
135 # misc variables inherited from the calling environment
136 environ_filter += [
137         "INFOPATH", "MANPATH", "USER",
138 ]
139
140 # variables that break bash
141 environ_filter += [
142         "HISTFILE", "POSIXLY_CORRECT",
143 ]
144
145 # portage config variables and variables set directly by portage
146 environ_filter += [
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",
151         "EMERGE_LOG_DIR",
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",
158         "PORTAGE_BINHOST",
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",
165         "PORTAGE_GPG_DIR",
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",
180         "__PORTAGE_HELPER"
181 ]
182
183 environ_filter = frozenset(environ_filter)
184
185 # Variables that are not allowed to have per-repo or per-package
186 # settings.
187 global_only_vars = frozenset([
188         "CONFIG_PROTECT",
189 ])
190
191 default_globals = {
192         'ACCEPT_LICENSE':           '* -@EULA',
193         'ACCEPT_PROPERTIES':        '*',
194         'PORTAGE_BZIP2_COMMAND':    'bzip2',
195 }
196
197 validate_commands = ('PORTAGE_BZIP2_COMMAND', 'PORTAGE_BUNZIP2_COMMAND',)
198
199 # To enhance usability, make some vars case insensitive
200 # by forcing them to lower case.
201 case_insensitive_vars = ('AUTOCLEAN', 'NOCOLOR',)