xref: /plan9/sys/src/cmd/auth/none.c (revision decede3daff5663ad9461ecbdee99636df315e35)
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