base-files: add support for staged sysupgrades from failsafe mode
[openwrt/openwrt.git] / package / base-files / files / lib / preinit / 99_10_failsafe_login
index 05d6b7787b69c7a6cdf611505a04d43443be1cf2..728c63b2e8aebf970cd7dff0d15518ccda83029c 100644 (file)
@@ -1,18 +1,21 @@
 #!/bin/sh
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006-2015 OpenWrt.org
 # Copyright (C) 2010 Vertical Communications
 
 failsafe_netlogin () {
-    telnetd -l /bin/login.sh <> /dev/null 2>&1    
+       dropbearkey -t rsa -s 1024 -f /tmp/dropbear_failsafe_host_key
+       dropbear -r /tmp/dropbear_failsafe_host_key <> /dev/null 2>&1
 }
 
 failsafe_shell() {
-    lock /tmp/.failsafe
-    ash --login
-    echo "Please reboot system when done with failsafe network logins"
+       local console="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | head -1 | sed -e 's/^console=//' -e 's/,.*//')"
+       [ -n "$console" ] || console=console
+       [ -c "/dev/$console" ] || return 0
+       while true; do
+               ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console"
+               sleep 1
+       done &
 }
 
-
 boot_hook_add failsafe failsafe_netlogin
 boot_hook_add failsafe failsafe_shell
-