chroot.c 764 B

1234567891011121314151617181920212223242526272829303132333435
  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) MAIN_EXTERNALLY_VISIBLE;
  12. int chroot_main(int argc UNUSED_PARAM, char **argv)
  13. {
  14. ++argv;
  15. if (!*argv)
  16. bb_show_usage();
  17. xchroot(*argv);
  18. xchdir("/");
  19. ++argv;
  20. if (!*argv) { /* no 2nd param (PROG), use shell */
  21. argv -= 2;
  22. argv[0] = getenv("SHELL");
  23. if (!argv[0]) {
  24. argv[0] = (char *) DEFAULT_SHELL;
  25. }
  26. argv[1] = (char *) "-i";
  27. }
  28. BB_EXECVP(*argv, argv);
  29. bb_perror_msg_and_die("can't execute '%s'", *argv);
  30. }