none.c 774 B

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