99_10_failsafe_login 749 B

1234567891011121314151617181920212223
  1. # Copyright (C) 2006-2015 OpenWrt.org
  2. # Copyright (C) 2010 Vertical Communications
  3. failsafe_shell() {
  4. local consoles="$(cat /sys/class/tty/console/active)"
  5. [ -n "$consoles" ] || consoles=console
  6. for console in $consoles; do
  7. case "$console" in
  8. console|tty[0-9]*)
  9. term=${TERM:-linux}
  10. ;;
  11. *)
  12. term=vt102
  13. ;;
  14. esac
  15. # Running asynchronously via the shell's & would ignore SIGINT,
  16. # breaking ^C. Use start-stop-daemon instead.
  17. [ -c "/dev/$console" ] && start-stop-daemon -Sb -p /dev/null -- env -i ash -c "while true; do setsid -c env -i USER=root LOGNAME=root SHELL=/bin/ash TERM="$term" ash --login <\"/dev/$console\" >\"/dev/$console\" 2>\"/dev/$console\"; sleep 1; done"
  18. done
  19. }
  20. boot_hook_add failsafe failsafe_shell