-#!/bin/sh
# Copyright (C) 2006 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
-do_mount_root() {
- boot_run_hook preinit_mount_root
+missing_lines() {
+ local file1 file2 line
+ file1="$1"
+ file2="$2"
+ oIFS="$IFS"
+ IFS=":"
+ while read line; do
+ set -- $line
+ grep -q "^$1:" "$file2" || echo "$*"
+ done < "$file1"
+ IFS="$oIFS"
}
-boot_hook_add preinit_main do_mount_root
+do_mount_root() {
+ mount_root
+ boot_run_hook preinit_mount_root
+ [ -f /sysupgrade.tgz ] && {
+ echo "- config restore -"
+ cp /etc/passwd /etc/group /etc/shadow /tmp
+ cd /
+ tar xzf /sysupgrade.tgz
+ missing_lines /tmp/passwd /etc/passwd >> /etc/passwd
+ missing_lines /tmp/group /etc/group >> /etc/group
+ missing_lines /tmp/shadow /etc/shadow >> /etc/shadow
+ rm /tmp/passwd /tmp/group /tmp/shadow
+ # Prevent configuration corruption on a power loss
+ sync
+ }
+}
+[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main do_mount_root