1ed250ae1SDavid du Colombier #include <u.h>
2ed250ae1SDavid du Colombier #include <libc.h>
3ed250ae1SDavid du Colombier #include <auth.h>
4ed250ae1SDavid du Colombier
5*decede3dSDavid du Colombier char *namespace;
6*decede3dSDavid du Colombier
7*decede3dSDavid du Colombier void
usage(void)8*decede3dSDavid du Colombier usage(void)
9*decede3dSDavid du Colombier {
10*decede3dSDavid du Colombier fprint(2, "usage: auth/none [-n namespace] [cmd ...]\n");
11*decede3dSDavid du Colombier exits("usage");
12*decede3dSDavid du Colombier }
13*decede3dSDavid du Colombier
14ed250ae1SDavid du Colombier void
main(int argc,char * argv[])15ed250ae1SDavid du Colombier main(int argc, char *argv[])
16ed250ae1SDavid du Colombier {
17ed250ae1SDavid du Colombier char cmd[256];
18ed250ae1SDavid du Colombier int fd;
19ed250ae1SDavid du Colombier
20*decede3dSDavid du Colombier ARGBEGIN{
21*decede3dSDavid du Colombier case 'n':
22*decede3dSDavid du Colombier namespace = EARGF(usage());
23*decede3dSDavid du Colombier break;
24*decede3dSDavid du Colombier default:
25*decede3dSDavid du Colombier usage();
26*decede3dSDavid du Colombier }ARGEND
27*decede3dSDavid du Colombier
28ed250ae1SDavid du Colombier if (rfork(RFENVG|RFNAMEG) < 0)
29ed250ae1SDavid du Colombier sysfatal("can't make new pgrp");
30ed250ae1SDavid du Colombier
31ed250ae1SDavid du Colombier fd = open("#c/user", OWRITE);
32ed250ae1SDavid du Colombier if (fd < 0)
33ed250ae1SDavid du Colombier sysfatal("can't open #c/user");
34ed250ae1SDavid du Colombier if (write(fd, "none", strlen("none")) < 0)
35ed250ae1SDavid du Colombier sysfatal("can't become none");
36ed250ae1SDavid du Colombier close(fd);
37ed250ae1SDavid du Colombier
38*decede3dSDavid du Colombier if (newns("none", namespace) < 0)
39ed250ae1SDavid du Colombier sysfatal("can't build namespace");
40ed250ae1SDavid du Colombier
41*decede3dSDavid du Colombier if (argc > 0) {
42*decede3dSDavid du Colombier strecpy(cmd, cmd+sizeof cmd, argv[0]);
43*decede3dSDavid du Colombier exec(cmd, &argv[0]);
44ed250ae1SDavid du Colombier if (strncmp(cmd, "/", 1) != 0
45ed250ae1SDavid du Colombier && strncmp(cmd, "./", 2) != 0
46ed250ae1SDavid du Colombier && strncmp(cmd, "../", 3) != 0) {
47*decede3dSDavid du Colombier snprint(cmd, sizeof cmd, "/bin/%s", argv[0]);
48*decede3dSDavid du Colombier exec(cmd, &argv[0]);
49ed250ae1SDavid du Colombier }
50ed250ae1SDavid du Colombier } else {
51ed250ae1SDavid du Colombier strcpy(cmd, "/bin/rc");
52ed250ae1SDavid du Colombier execl(cmd, cmd, nil);
53ed250ae1SDavid du Colombier }
54ed250ae1SDavid du Colombier sysfatal(cmd);
55ed250ae1SDavid du Colombier }
56