ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/base-files/files/etc/uci-defaults/10_migrate-shadow b/package/base-files/files/etc/uci-defaults/10_migrate-shadow
new file mode 100644
index 0000000..481444f
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/10_migrate-shadow
@@ -0,0 +1,10 @@
+ppwd="$(sed -ne '/^root:/s/^root:\([^:]*\):.*$/\1/p' /etc/passwd)"
+spwd="$(sed -ne '/^root:/s/^root:\([^:]*\):.*$/\1/p' /etc/shadow)"
+
+if [ -n "${ppwd#[\!x]}" ] && [ -z "${spwd#[\!x]}" ]; then
+ logger -t migrate-shadow "Moving root password hash into shadow database"
+ sed -i -e "s:^root\:[^\:]*\::root\:x\::" /etc/passwd
+ sed -i -e "s:^root\:[^\:]*\::root\:$ppwd\::" /etc/shadow
+fi
+
+exit 0
diff --git a/package/base-files/files/etc/uci-defaults/11_network-migrate-bridges b/package/base-files/files/etc/uci-defaults/11_network-migrate-bridges
new file mode 100644
index 0000000..a9dece4
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/11_network-migrate-bridges
@@ -0,0 +1,49 @@
+. /lib/functions.sh
+
+migrate_ports() {
+ local config="$1"
+ local type ports ifname
+
+ config_get type "$config" type
+ [ "$type" != "bridge" ] && return
+
+ config_get ports "$config" ports
+ [ -n "$ports" ] && return
+
+ config_get ifname "$config" ifname
+ [ -z "$ifname" ] && return
+
+ for port in $ifname; do
+ uci add_list network.$config.ports="$port"
+ done
+ uci delete network.$config.ifname
+}
+
+migrate_bridge() {
+ local config="$1"
+ local type ifname
+
+ config_get type "$config" type
+ [ "$type" != "bridge" ] && return
+
+ config_get ifname "$config" ifname
+
+ uci -q batch <<-EOF
+ add network device
+ set network.@device[-1].name='br-$config'
+ set network.@device[-1].type='bridge'
+ EOF
+ for port in $ifname; do
+ uci add_list network.@device[-1].ports="$port"
+ done
+
+ uci -q batch <<-EOF
+ delete network.$config.type
+ delete network.$config.ifname
+ set network.$config.device='br-$config'
+ EOF
+}
+
+config_load network
+config_foreach migrate_ports device
+config_foreach migrate_bridge interface
diff --git a/package/base-files/files/etc/uci-defaults/12_network-generate-ula b/package/base-files/files/etc/uci-defaults/12_network-generate-ula
new file mode 100644
index 0000000..060d0ef
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/12_network-generate-ula
@@ -0,0 +1,9 @@
+[ "$(uci -q get network.globals.ula_prefix)" != "auto" ] && exit 0
+
+uci -q batch <<-EOF >/dev/null
+ set network.globals.ula_prefix="$(hexdump -vn 5 -e '"fd" 1/1 "%02x:" 2/2 "%x:"' /dev/urandom):/48"
+ commit network
+EOF
+
+exit 0
+
diff --git a/package/base-files/files/etc/uci-defaults/13_fix-group-user b/package/base-files/files/etc/uci-defaults/13_fix-group-user
new file mode 100644
index 0000000..c5cc74e
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/13_fix-group-user
@@ -0,0 +1,12 @@
+. /lib/functions.sh
+
+# Skip if we don't have /usr/lib/opkg/info (APK installation)
+[ -d /usr/lib/opkg/info ] || exit 0
+
+for file in $(grep -sl Require-User /usr/lib/opkg/info/*.control); do
+ file="${file##*/}"
+ file="${file%.control}"
+ add_group_and_user "${file}"
+done
+
+exit 0
diff --git a/package/base-files/files/etc/uci-defaults/50-root-passwd b/package/base-files/files/etc/uci-defaults/50-root-passwd
new file mode 100644
index 0000000..f0bb519
--- /dev/null
+++ b/package/base-files/files/etc/uci-defaults/50-root-passwd
@@ -0,0 +1,18 @@
+. /usr/share/libubox/jshn.sh
+
+json_init
+json_load "$(cat /etc/board.json)"
+
+if json_is_a credentials object; then
+ json_select credentials
+ json_get_vars root_password_hash root_password_hash
+ if [ -n "$root_password_hash" ]; then
+ sed -i "s|^root:[^:]*|root:$root_password_hash|g" /etc/shadow
+ fi
+
+ json_get_vars root_password_plain root_password_plain
+ if [ -n "$root_password_plain" ]; then
+ (echo "$root_password_plain"; sleep 1; echo "$root_password_plain") | passwd root
+ fi
+ json_select ..
+fi