view toys/unshare.c @ 643:7bdebd2af1d6

Add signal handler to clean up tempfile.
author Rob Landley <rob@landley.net>
date Mon, 30 Jul 2012 01:01:33 -0500
parents 99cb6ad605ee
children
line wrap: on
line source

/* vi: set sw=4 ts=4:
 *
 * unshare.c - run command in new context
 *
 * Copyright 2011 Rob Landley <rob@landley.net>
 *
 * Not in SUSv4.

USE_UNSHARE(NEWTOY(unshare, "<1^nium", TOYFLAG_USR|TOYFLAG_BIN))

config UNSHARE
	bool "unshare"
	default y
	depends on TOYBOX_CONTAINER
	help
	  usage: unshare [-muin] COMMAND...

	  Create new namespace(s) for this process and its children, so some
	  attribute is not shared with the parent process.  This is part of
	  Linux Containers.  Each process can have its own:

	  -m	Mount/unmount tree
	  -u	Host and domain names
	  -i	SysV IPC (message queues, semaphores, shared memory)
	  -n	Network address, sockets, routing, iptables
*/

#include "toys.h"
#include <linux/sched.h>
extern int unshare (int __flags);

void unshare_main(void)
{
	unsigned flags[]={CLONE_NEWNS, CLONE_NEWUTS, CLONE_NEWIPC, CLONE_NEWNET,0};
	unsigned f=0;
	int i;

	for (i=0; flags[i]; i++)
		if (toys.optflags & (1<<i))
			f |= flags[i];

	if(unshare(f)) perror_exit("failed");

	xexec(toys.optargs);
}