1 #include <u.h> 2 #include <libc.h> 3 #include <auth.h> 4 5 void 6 main(int argc, char *argv[]) 7 { 8 char cmd[256]; 9 int fd; 10 11 argv0 = argv[0]; 12 if (rfork(RFENVG|RFNAMEG) < 0) 13 sysfatal("can't make new pgrp"); 14 15 fd = open("#c/user", OWRITE); 16 if (fd < 0) 17 sysfatal("can't open #c/user"); 18 if (write(fd, "none", strlen("none")) < 0) 19 sysfatal("can't become none"); 20 close(fd); 21 22 if (newns("none", nil) < 0) 23 sysfatal("can't build namespace"); 24 25 if (argc > 1) { 26 strecpy(cmd, cmd+sizeof cmd, argv[1]); 27 exec(cmd, &argv[1]); 28 if (strncmp(cmd, "/", 1) != 0 29 && strncmp(cmd, "./", 2) != 0 30 && strncmp(cmd, "../", 3) != 0) { 31 snprint(cmd, sizeof cmd, "/bin/%s", argv[1]); 32 exec(cmd, &argv[1]); 33 } 34 } else { 35 strcpy(cmd, "/bin/rc"); 36 execl(cmd, cmd, nil); 37 } 38 sysfatal(cmd); 39 } 40