annotate toys/other/unshare.c @ 656:6df4ccc0acbe

Regularize command headers, update links to standards documents.
author Rob Landley <rob@landley.net>
date Sat, 25 Aug 2012 18:08:51 -0500
parents 2986aa63a021
children 786841fdb1e0
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 USE_UNSHARE(NEWTOY(unshare, "<1^nium", TOYFLAG_USR|TOYFLAG_BIN))
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
8
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
9 config UNSHARE
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
10 bool "unshare"
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 default y
426
8b0487639db9 Add autodetect for container support.
Rob Landley <rob@landley.net>
parents: 398
diff changeset
12 depends on TOYBOX_CONTAINER
398
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 help
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
14 usage: unshare [-muin] COMMAND...
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
15
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
16 Create new namespace(s) for this process and its children, so some
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
17 attribute is not shared with the parent process. This is part of
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 Linux Containers. Each process can have its own:
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
19
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
20 -m Mount/unmount tree
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
21 -u Host and domain names
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
22 -i SysV IPC (message queues, semaphores, shared memory)
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
23 -n Network address, sockets, routing, iptables
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
24 */
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
25
a4dcbad4f92a Implement unshare.
Rob Landley <rob@landley.net>
parents:
diff changeset
26 #include "toys.h"
537
f70187762108 Work around glibc regression by including Linux header directly.
Rob Landley <rob@landley.net>
parents: 533
diff changeset
27 #include <linux/sched.h>
548
99cb6ad605ee The linux header doesn't prototype unshare, and the glibc header introduced a regression in recent versions inexplicably crediting a linux feature to the FSF, so add the prototype ourselves.
Rob Landley <rob@landley.net>
parents: 537
diff changeset
28 extern int unshare (int __flags);
398
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 }