mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 10:08:59 +00:00
5773538c90
Empty trailing fields get lost when the lines are split and merged again at colons, resulting in unparsable entries. Only use the split fields for matching against the other file, but emit the original line unchanged to fix the issue. Fixes:de7ca7dafa
("base-files: merge /etc/passwd et al at sysupgrade config restore") Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> (cherry picked from commit9bbaa6f2c0
)
36 lines
923 B
Plaintext
36 lines
923 B
Plaintext
# Copyright (C) 2006 OpenWrt.org
|
|
# Copyright (C) 2010 Vertical Communications
|
|
|
|
missing_lines() {
|
|
local file1 file2 line
|
|
file1="$1"
|
|
file2="$2"
|
|
oIFS="$IFS"
|
|
IFS=":"
|
|
while read line; do
|
|
set -- $line
|
|
grep -q "^$1:" "$file2" || echo "$line"
|
|
done < "$file1"
|
|
IFS="$oIFS"
|
|
}
|
|
|
|
do_mount_root() {
|
|
mount_root
|
|
boot_run_hook preinit_mount_root
|
|
[ -f /sysupgrade.tgz -o -f /tmp/sysupgrade.tar ] && {
|
|
echo "- config restore -"
|
|
cp /etc/passwd /etc/group /etc/shadow /tmp
|
|
cd /
|
|
[ -f /sysupgrade.tgz ] && tar xzf /sysupgrade.tgz
|
|
[ -f /tmp/sysupgrade.tar ] && tar xf /tmp/sysupgrade.tar
|
|
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
|