from portage import _encodings
from portage import _unicode_encode
from portage import os
+from portage.const import BASH_BINARY
import fcntl
import errno
import gzip
"path_lookup", "pre_exec")
__slots__ = ("args",) + \
- _spawn_kwarg_names
+ _spawn_kwarg_names + ("_selinux_type",)
_file_names = ("log", "process", "stdout")
_files_dict = slot_dict_class(_file_names, prefix="")
return os.pipe()
def _spawn(self, args, **kwargs):
- return portage.process.spawn(args, **kwargs)
+ spawn_func = portage.process.spawn
+
+ if self._selinux_type is not None:
+ spawn_func = portage.selinux.spawn_wrapper(spawn_func,
+ self._selinux_type)
+ # bash is an allowed entrypoint, while most binaries are not
+ if args[0] != BASH_BINARY:
+ args = [BASH_BINARY, "-c", "exec \"$@\"", args[0]] + args
+
+ return spawn_func(args, **kwargs)
def _output_handler(self, fd, event):