1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include "common.hh"
#include <unistd.h>

LIBEXEC_HELPER(2)

int helperMain(const char * name, std::span<char *> args) noexcept
{
    DIE_UNLESS_SYS("chdir", chdir("/"));
    DIE_UNLESS_SYS("setsid", setsid());

    static_assert(STDIN_FILENO == 0);
    DIE_UNLESS_SYS("close(stdin)", close(STDIN_FILENO));
    DIE_UNLESS_SYS("stdin = open(/dev/null)", open("/dev/null", O_RDWR));

    execv(args[0], args.subspan(1).data());
    die("exec failed");
}