16#ifndef ANDROID_DEVICE_GOOGLE_CUTTLEFISH_HOST_COMMANDS_PROCESS_SANDBOXER_SANDBOX_MANAGER_H
17#define ANDROID_DEVICE_GOOGLE_CUTTLEFISH_HOST_COMMANDS_PROCESS_SANDBOXER_SANDBOX_MANAGER_H
26#include "absl/random/random.h"
27#include "absl/status/status.h"
28#include "absl/status/statusor.h"
29#include "absl/types/span.h"
30#include "sandboxed_api/sandbox2/policy.h"
31#include "sandboxed_api/util/fileops.h"
41 static absl::StatusOr<std::unique_ptr<SandboxManager>>
Create(
52 std::optional<int> client_fd, absl::Span<const std::string> argv,
53 std::vector<std::pair<sapi::file_util::fileops::FDCloser, int>> fds,
54 absl::Span<const std::string> env);
64 virtual std::optional<int>
ClientFd()
const = 0;
66 virtual absl::StatusOr<uintptr_t>
ExitCode() = 0;
72 using ClientIter = std::list<std::unique_ptr<SocketClient>>::iterator;
73 using SboxIter = std::list<std::unique_ptr<ManagedProcess>>::iterator;
79 std::optional<int> client_fd, absl::Span<const std::string> argv,
80 std::vector<std::pair<sapi::file_util::fileops::FDCloser, int>> fds,
81 absl::Span<const std::string> env,
82 std::unique_ptr<sandbox2::Policy> policy);
84 std::optional<int> client_fd, absl::Span<const std::string> argv,
85 std::vector<std::pair<sapi::file_util::fileops::FDCloser, int>> fds,
86 absl::Span<const std::string> env);
98 std::list<std::unique_ptr<SocketClient>>
clients_;
Definition: credentialed_unix_server.h:26
Definition: sandbox_manager.h:61
virtual int PollFd() const =0
virtual std::optional< int > ClientFd() const =0
virtual absl::StatusOr< uintptr_t > ExitCode()=0
virtual ~ManagedProcess()=default
Definition: sandbox_manager.cpp:90
Definition: sandbox_manager.cpp:128
Definition: sandbox_manager.cpp:177
Definition: sandbox_manager.h:39
absl::Status ClientMessage(ClientIter it, short revents)
Definition: sandbox_manager.cpp:572
std::list< std::unique_ptr< SocketClient > >::iterator ClientIter
Definition: sandbox_manager.h:72
std::list< std::unique_ptr< SocketClient > > clients_
Definition: sandbox_manager.h:98
absl::Status RunSandboxedProcess(std::optional< int > client_fd, absl::Span< const std::string > argv, std::vector< std::pair< sapi::file_util::fileops::FDCloser, int > > fds, absl::Span< const std::string > env, std::unique_ptr< sandbox2::Policy > policy)
Definition: sandbox_manager.cpp:404
std::string runtime_dir_
Definition: sandbox_manager.h:96
std::list< std::unique_ptr< ManagedProcess > > subprocesses_
Definition: sandbox_manager.h:97
~SandboxManager()
Definition: sandbox_manager.cpp:357
SandboxManager(SandboxManager &)=delete
absl::Status RunProcess(std::optional< int > client_fd, absl::Span< const std::string > argv, std::vector< std::pair< sapi::file_util::fileops::FDCloser, int > > fds, absl::Span< const std::string > env)
Definition: sandbox_manager.cpp:369
CredentialedUnixServer server_
Definition: sandbox_manager.h:100
static absl::StatusOr< std::unique_ptr< SandboxManager > > Create(HostInfo host_info)
Definition: sandbox_manager.cpp:332
bool running_
Definition: sandbox_manager.h:95
absl::BitGen bit_gen_
Definition: sandbox_manager.h:101
HostInfo host_info_
Definition: sandbox_manager.h:94
absl::Status ProcessExit(SboxIter it, short revents)
Definition: sandbox_manager.cpp:545
bool Running() const
Definition: sandbox_manager.cpp:486
std::list< std::unique_ptr< ManagedProcess > >::iterator SboxIter
Definition: sandbox_manager.h:73
absl::Status RunProcessNoSandbox(std::optional< int > client_fd, absl::Span< const std::string > argv, std::vector< std::pair< sapi::file_util::fileops::FDCloser, int > > fds, absl::Span< const std::string > env)
Definition: sandbox_manager.cpp:469
SignalFd signals_
Definition: sandbox_manager.h:99
absl::Status Iterate()
Definition: sandbox_manager.cpp:488
absl::Status NewClient(short revents)
Definition: sandbox_manager.cpp:532
absl::Status Signalled(short revents)
Definition: sandbox_manager.cpp:507
Definition: signal_fd.h:26
static void Status(const std::string &message)
Definition: fastboot.cpp:205
Definition: credentialed_unix_server.cpp:30
Definition: policies.h:30