view toys/other/unshare.c @ 944:b4faf2ae39e8

This inlines CRC64, and nothing more. The functions involved were called only once.
author Isaac Dunham <idunham@lavabit.com>
date Sat, 06 Jul 2013 11:26:15 -0500
parents 786841fdb1e0
children 144d5ba7d410
line wrap: on
line source

/* unshare.c - run command in new context
 *
 * Copyright 2011 Rob Landley <rob@landley.net>

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);
}