chroot.c 778 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. /* vi: set sw=4 ts=4: */
  2. /*
  3. * Mini chroot implementation for busybox
  4. *
  5. * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
  6. *
  7. * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  8. */
  9. /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */
  10. #include "libbb.h"
  11. int chroot_main(int argc, char **argv);
  12. int chroot_main(int argc, char **argv)
  13. {
  14. if (argc < 2) {
  15. bb_show_usage();
  16. }
  17. ++argv;
  18. if (chroot(*argv)) {
  19. bb_perror_msg_and_die("cannot change root directory to %s", *argv);
  20. }
  21. xchdir("/");
  22. ++argv;
  23. if (argc == 2) {
  24. argv -= 2;
  25. argv[0] = getenv("SHELL");
  26. if (!argv[0]) {
  27. argv[0] = (char *) DEFAULT_SHELL;
  28. }
  29. argv[1] = (char *) "-i";
  30. }
  31. BB_EXECVP(*argv, argv);
  32. bb_perror_msg_and_die("cannot execute %s", *argv);
  33. }