mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-15 18:03:30 +00:00

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: de7ca7dafadf ("base-files: merge /etc/passwd et al at sysupgrade config restore") Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
37 lines
972 B
Plaintext
37 lines
972 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 /etc/bench.log ] && touch /etc/bench.log
|
|
[ -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
|