/* See LICENSE file for copyright and license details. */ #include #include #include #include NUSAGE(125, "mountpoint utility [argument] ..."); int main(int argc, char *argv[]) { const char *mountpoint; libsimple_default_failure_exit = 125; ARGBEGIN { default: usage(); } ARGEND; if (argc < 2) usage(); mountpoint = *argv++; argc--; if (unshare(CLONE_NEWNS)) eprintf("unshare CLONE_NEWNS:"); if (mount("none", "/", NULL, MS_REC | MS_SLAVE, NULL)) eprintf("mount none / NULL MS_REC|MS_SLAVE NULL:"); if (mount("tmpfs", mountpoint, "tmpfs", 0, NULL)) eprintf("mount tmpfs %s tmpfs 0 NULL:", mountpoint); if (setegid(getgid())) eprintf("setegid :"); if (seteuid(getuid())) eprintf("seteuid :"); execvp(argv[0], argv); enprintf(errno == ENOENT ? 127 : 126, "execvp %s:", argv[0]); return 0; }