From 712ce0b82e49bd55b55b3e5a5db6bc642390d7a1 Mon Sep 17 00:00:00 2001
From: Lukas Rusak <lorusak@gmail.com>
Date: Mon, 11 Sep 2017 20:19:21 -0700
Subject: [PATCH] busybox: allow changing root password

---
 config/functions                                     |  8 +++++---
 packages/sysutils/busybox/config/busybox-target.conf | 12 ++++++------
 packages/sysutils/busybox/package.mk                 |  1 -
 ...busybox-05-update-shadow-or-passwd-not-both.patch | 12 ++++++++++++
 4 files changed, 23 insertions(+), 10 deletions(-)
 create mode 100644 packages/sysutils/busybox/patches/busybox-05-update-shadow-or-passwd-not-both.patch

diff --git a/config/functions b/config/functions
index 5f06046fc7..a7c846789e 100644
--- a/config/functions
+++ b/config/functions
@@ -369,13 +369,15 @@ add_user() {
     echo "$1:x:$3:$4:$5:$6:$7" >> ${INSTALL}/etc/passwd
   fi
 
-  touch ${INSTALL}/etc/shadow
+  touch ${INSTALL}/usr/config/shadow
+  ln -sf /storage/.config/shadow ${INSTALL}/etc/shadow
+
   PASSWORD="$2"
   if [ "$PASSWORD" = "x" ]; then
     PASSWORD="*"
   fi
-  if [ -z "`grep "$1:" ${INSTALL}/etc/shadow`" ]; then
-    echo "$1:$PASSWORD:::::::" >> ${INSTALL}/etc/shadow
+  if [ -z "`grep "$1:" ${INSTALL}/usr/config/shadow`" ]; then
+    echo "$1:$PASSWORD:::::::" >> ${INSTALL}/usr/config/shadow
   fi
 }
 
diff --git a/packages/sysutils/busybox/config/busybox-target.conf b/packages/sysutils/busybox/config/busybox-target.conf
index 5d873c3831..165cd2bc10 100644
--- a/packages/sysutils/busybox/config/busybox-target.conf
+++ b/packages/sysutils/busybox/config/busybox-target.conf
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Busybox version: 1.27.1
-# Wed Aug  2 13:41:55 2017
+# Mon Sep 11 19:54:52 2017
 #
 CONFIG_HAVE_DOT_CONFIG=y
 
@@ -484,8 +484,8 @@ CONFIG_INIT_TERMINAL_TYPE=""
 # Login/Password Management Utilities
 #
 CONFIG_FEATURE_SHADOWPASSWDS=y
-CONFIG_USE_BB_PWD_GRP=y
-CONFIG_USE_BB_SHADOW=y
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
 CONFIG_USE_BB_CRYPT=y
 CONFIG_USE_BB_CRYPT_SHA=y
 # CONFIG_ADDGROUP is not set
@@ -500,7 +500,7 @@ CONFIG_LAST_ID=0
 CONFIG_FIRST_SYSTEM_ID=0
 CONFIG_LAST_SYSTEM_ID=0
 # CONFIG_CHPASSWD is not set
-CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="des"
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="sha512"
 CONFIG_CRYPTPW=y
 # CONFIG_MKPASSWD is not set
 # CONFIG_DELUSER is not set
@@ -512,8 +512,8 @@ CONFIG_LOGIN=y
 CONFIG_LOGIN_SCRIPTS=y
 # CONFIG_FEATURE_NOLOGIN is not set
 # CONFIG_FEATURE_SECURETTY is not set
-# CONFIG_PASSWD is not set
-# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
+CONFIG_PASSWD=y
+CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
 CONFIG_SU=y
 CONFIG_FEATURE_SU_SYSLOG=y
 CONFIG_FEATURE_SU_CHECKS_SHELLS=y
diff --git a/packages/sysutils/busybox/package.mk b/packages/sysutils/busybox/package.mk
index 7ded7c9ae3..58576883b7 100644
--- a/packages/sysutils/busybox/package.mk
+++ b/packages/sysutils/busybox/package.mk
@@ -156,7 +156,6 @@ makeinstall_target() {
     cp $PKG_DIR/scripts/createlog $INSTALL/usr/bin/
     cp $PKG_DIR/scripts/lsb_release $INSTALL/usr/bin/
     cp $PKG_DIR/scripts/apt-get $INSTALL/usr/bin/
-    cp $PKG_DIR/scripts/passwd $INSTALL/usr/bin/
     cp $PKG_DIR/scripts/sudo $INSTALL/usr/bin/
     cp $PKG_DIR/scripts/pastebinit $INSTALL/usr/bin/
     ln -sf pastebinit $INSTALL/usr/bin/paste
diff --git a/packages/sysutils/busybox/patches/busybox-05-update-shadow-or-passwd-not-both.patch b/packages/sysutils/busybox/patches/busybox-05-update-shadow-or-passwd-not-both.patch
new file mode 100644
index 0000000000..b2698c9808
--- /dev/null
+++ b/packages/sysutils/busybox/patches/busybox-05-update-shadow-or-passwd-not-both.patch
@@ -0,0 +1,12 @@
+diff -Naur a/loginutils/passwd.c b/loginutils/passwd.c
+--- a/loginutils/passwd.c	2017-07-06 08:14:57.000000000 -0700
++++ b/loginutils/passwd.c	2017-09-11 17:06:07.572805135 -0700
+@@ -220,7 +220,7 @@
+ 	if (rc > 0)
+ 		/* password in /etc/shadow was updated */
+ 		newp = (char*) "x";
+-	if (rc >= 0)
++	if (rc == 0)
+ 		/* 0 = /etc/shadow missing (not an error), >0 = passwd changed in /etc/shadow */
+ #endif
+ 	{