Blame newns.c

Packit d86cd3
#define _GNU_SOURCE
Packit d86cd3
#include <errno.h>
Packit d86cd3
#include <stdlib.h>
Packit d86cd3
#include <unistd.h>
Packit d86cd3
#include <stdio.h>
Packit d86cd3
#include <sched.h>
Packit d86cd3
Packit d86cd3
int main(int argc, char **argv)
Packit d86cd3
{
Packit d86cd3
	if (argc < 2) {
Packit d86cd3
		fprintf(stderr, "Usage: newns PROGRAM [ARGUMENTS ...]\n");
Packit d86cd3
		exit(1);
Packit d86cd3
	}
Packit d86cd3
Packit d86cd3
	/* This is best-effort; if the kernel is too old (Linux << 2.6.16),
Packit d86cd3
	 * or indeed if the kernel isn't Linux so we don't have
Packit d86cd3
	 * unshare(CLONE_NEWNS), don't worry about it.
Packit d86cd3
	 */
Packit d86cd3
#ifdef __linux__
Packit d86cd3
	if (unshare(CLONE_NEWNS) < 0 && errno != ENOSYS)
Packit d86cd3
		perror("unshare failed");
Packit d86cd3
		/* ... but continue anyway */
Packit d86cd3
#endif /* __linux__ */
Packit d86cd3
	setenv("OS_PROBER_NEWNS", "1", 1);
Packit d86cd3
	execvp(argv[1], argv + 1);
Packit d86cd3
Packit d86cd3
	perror("execvp failed");
Packit d86cd3
	_exit(127);
Packit d86cd3
}