base-files: merge /etc/passwd et al at sysupgrade config restore
authorDaniel Golle <daniel@makrotopia.org>
Thu, 22 Oct 2020 12:13:39 +0000 (13:13 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Thu, 22 Oct 2020 13:25:55 +0000 (14:25 +0100)
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
package/base-files/Makefile
package/base-files/files/lib/preinit/80_mount_root

index 27bf7ae3f96d2858f34be36a4555fe99cdce558c..84b2f2d5ec292fe34631f2005d4b3e2a0322d215 100644 (file)
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=232
+PKG_RELEASE:=233
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
index 265a3f18df49043824a6d70609e6c95dc017496a..56d3fa379743efe6b494a7b15a7a45f3b93caa99 100644 (file)
@@ -2,6 +2,19 @@
 # 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 "$*"
+       done < "$file1"
+       IFS="$oIFS"
+}
+
 do_mount_root() {
        mount_root
        boot_run_hook preinit_mount_root
@@ -9,6 +22,9 @@ do_mount_root() {
                echo "- config restore -"
                cd /
                tar xzf /sysupgrade.tgz
+               missing_lines /rom/etc/passwd /etc/passwd >> /etc/passwd
+               missing_lines /rom/etc/group /etc/group >> /etc/group
+               missing_lines /rom/etc/shadow /etc/shadow >> /etc/shadow
                # Prevent configuration corruption on a power loss
                sync
        }