12#ifndef OPENVPN_COMMON_REDIR_H
13#define OPENVPN_COMMON_REDIR_H
97 in.
reset(::open(
"/dev/null", O_RDONLY, 0));
100 const int eno = errno;
105 out.
reset(::open(
"/dev/null", O_RDWR, 0));
108 const int eno = errno;
129 const std::string &out_fn,
132 const bool combine_out_err_arg =
true)
148 in.
reset(::open(fn.c_str(), O_RDONLY, 0));
151 const int eno = errno;
166 const int eno = errno;
177 const bool combine_out_err_arg)
180 out = std::move(stdout_temp.
fd);
189 out = std::move(stdout_temp.
fd);
190 err = std::move(stderr_temp.
fd);
218 const unsigned int flags_arg)
256 remote.
in.
reset(::open(
"/dev/null", O_RDONLY, 0));
259 const int eno = errno;
268 openvpn_io::io_context io_context(1);
270 std::unique_ptr<Pipe::SD_OUT> send_in;
271 std::unique_ptr<Pipe::SD_IN> recv_out;
272 std::unique_ptr<Pipe::SD_IN> recv_err;
284 inout.
out = recv_out->content();
286 inout.
err = recv_err->content();
293 if (::fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
295 const int eno = errno;
void transact(InOut &inout)
RedirectPipe(RedirectStdFD &remote, const unsigned int flags_arg)
static int cloexec(const int fd)
void open_output(const std::string &fn, const int flags, const mode_t mode)
static constexpr int FLAGS_OVERWRITE
static constexpr mode_t MODE_USER_GROUP
static constexpr mode_t MODE_ALL
RedirectStd(const std::string &in_fn, const std::string &out_fn, const int out_flags=FLAGS_OVERWRITE, const mode_t out_mode=MODE_ALL, const bool combine_out_err_arg=true)
static constexpr int FLAGS_MUST_NOT_EXIST
void open_input(const std::string &fn)
static constexpr mode_t MODE_USER
static constexpr int FLAGS_APPEND
RedirectTemp(const std::string &stdin_fn, TempFile &stdout_temp, TempFile &stderr_temp)
RedirectTemp(const std::string &stdin_fn, TempFile &stdout_temp, const bool combine_out_err_arg)
void reset(const int fd_arg)
#define OPENVPN_THROW(exc, stuff)
void make_pipe(int fd[2])
std::string strerror_str(const int errnum)
virtual void redirect()=0
virtual ~RedirectBase()=default
OPENVPN_EXCEPTION(redirect_std_err)
void redirect() noexcept override