annotate toys/unshare.c @ 533:31215cc6c9f2

Consolidate headers.
author Rob Landley <rob@landley.net>
date Wed, 07 Mar 2012 19:04:50 -0600
parents 8b0487639db9
children f70187762108
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
398
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 /* vi: set sw=4 ts=4:
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
2 *
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 * unshare.c - run command in new context
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
4 *
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 * Copyright 2011 Rob Landley <rob@landley.net>
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
6 *
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
7 * Not in SUSv4.
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
8
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
9 USE_UNSHARE(NEWTOY(unshare, "<1^nium", TOYFLAG_USR|TOYFLAG_BIN))
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
10
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 config UNSHARE
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
12 bool "unshare"
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 default y
426
8b0487639db9 Add autodetect for container support.
Rob Landley <rob@landley.net>
parents: 398
diff changeset
14 depends on TOYBOX_CONTAINER
398
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
15 help
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
16 usage: unshare [-muin] COMMAND...
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
17
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 Create new namespace(s) for this process and its children, so some
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
19 attribute is not shared with the parent process. This is part of
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
20 Linux Containers. Each process can have its own:
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
21
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
22 -m Mount/unmount tree
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
23 -u Host and domain names
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
24 -i SysV IPC (message queues, semaphores, shared memory)
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
25 -n Network address, sockets, routing, iptables
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
26 */
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
27
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
28 #include "toys.h"
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
29
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
30 void unshare_main(void)
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
31 {
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
32 unsigned flags[]={CLONE_NEWNS, CLONE_NEWUTS, CLONE_NEWIPC, CLONE_NEWNET,0};
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
33 unsigned f=0;
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
34 int i;
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
35
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
36 for (i=0; flags[i]; i++)
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
37 if (toys.optflags & (1<<i))
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
38 f |= flags[i];
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
39
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 if(unshare(f)) perror_exit("failed");
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
41
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
42 xexec(toys.optargs);
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
43 }