diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/auth/none.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/auth/none.c')
-rwxr-xr-x | sys/src/cmd/auth/none.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/sys/src/cmd/auth/none.c b/sys/src/cmd/auth/none.c new file mode 100755 index 000000000..df2a2e5d2 --- /dev/null +++ b/sys/src/cmd/auth/none.c @@ -0,0 +1,55 @@ +#include <u.h> +#include <libc.h> +#include <auth.h> + +char *namespace; + +void +usage(void) +{ + fprint(2, "usage: auth/none [-n namespace] [cmd ...]\n"); + exits("usage"); +} + +void +main(int argc, char *argv[]) +{ + char cmd[256]; + int fd; + + ARGBEGIN{ + case 'n': + namespace = EARGF(usage()); + break; + default: + usage(); + }ARGEND + + if (rfork(RFENVG|RFNAMEG) < 0) + sysfatal("can't make new pgrp"); + + fd = open("#c/user", OWRITE); + if (fd < 0) + sysfatal("can't open #c/user"); + if (write(fd, "none", strlen("none")) < 0) + sysfatal("can't become none"); + close(fd); + + if (newns("none", namespace) < 0) + sysfatal("can't build namespace"); + + if (argc > 0) { + strecpy(cmd, cmd+sizeof cmd, argv[0]); + exec(cmd, &argv[0]); + if (strncmp(cmd, "/", 1) != 0 + && strncmp(cmd, "./", 2) != 0 + && strncmp(cmd, "../", 3) != 0) { + snprint(cmd, sizeof cmd, "/bin/%s", argv[0]); + exec(cmd, &argv[0]); + } + } else { + strcpy(cmd, "/bin/rc"); + execl(cmd, cmd, nil); + } + sysfatal(cmd); +} |