From cd854334ec6f9783302815a0b923d97fef5c4328 Mon Sep 17 00:00:00 2001
From: Kyle MacLeod <kyle.macleod@windriver.com>
Date: Wed, 9 Aug 2023 17:00:50 -0400
Subject: [PATCH] update-iso.sh: add --no-force-password option

The --no-force-password option removes the forced password change on
initial login. This is to enable customers who use a customized workflow
where the initial password is set to a secure value via update-iso.sh,
and do not want a forced password change on initial login.

Note: Used incorrectly, this is an insecure option. The
--no-force-password should only be used in secure environments, where
the initial password is kept secret. Further, this update does not
affect the password aging policies in place.

Test Plan:
PASS: Use update-iso.sh to change an existing ISO:
    sudo ./update-iso.sh --addon ./ks-addon.cfg \
      --no-force-password \
      --initial-password 'MyPassword#123' \
      --input ./starlingx-intel-x86-64-cd.iso \
      --output ./update.iso
And boot from the new ISO. Verify that the initial password upon
boot is as expected, and that the provide password is accepted on first
login, without the normal forced password change on initial login.

PASS: Use update-iso.sh without the --no-force-password option, verify
that the user is still forced to change password on initial login.

Closes-Bug: 2030917

Signed-off-by: Kyle MacLeod <kyle.macleod@windriver.com>
Change-Id: I962e66741cf10b24ba965bef99f3cd2ef977cec4
---
 utilities/platform-util/scripts/update-iso.sh | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/utilities/platform-util/scripts/update-iso.sh b/utilities/platform-util/scripts/update-iso.sh
index d4a79729..d18d1e68 100755
--- a/utilities/platform-util/scripts/update-iso.sh
+++ b/utilities/platform-util/scripts/update-iso.sh
@@ -53,6 +53,7 @@ function usage {
         -t|--timeout <menu timeout>
         -m|--mount <guestmount point>
         --initial-password <password>
+        --no-force-password
         -v|--verbose
         -h|--help
 
@@ -62,6 +63,7 @@ function usage {
         -o <path/file>: Specify output ISO file
         -a <path/file>: Specify ks-addon.cfg file
         --initial-password <password>: Specify the initial login password for sysadmin user
+        --no-force-password: Do not force password change on initial login (insecure)
         -p <p=v>:  Specify boot parameter
 
             Example:
@@ -253,6 +255,7 @@ declare INPUT_ISO=
 declare OUTPUT_ISO=
 declare ADDON=
 declare INITIAL_PASSWORD=
+declare NO_FORCE_PASSWORD=
 declare -a PARAMS
 declare DEFAULT_LABEL=
 declare DEFAULT_GRUB_ENTRY=
@@ -263,7 +266,7 @@ declare VERBOSE=false
 
 script=$(basename "$0")
 OPTS=$(getopt -o a:d:hi:m:o:p:t:v \
-                --long addon:,initial-password:,default:,help,input:,mount:,output:,param:,timeout:,verbose \
+                --long addon:,initial-password:,no-force-password,default:,help,input:,mount:,output:,param:,timeout:,verbose \
                 -n "${script}" -- "$@")
 if [ $? != 0 ]; then
     echo "Failed parsing options." >&2
@@ -299,6 +302,10 @@ while true; do
             INITIAL_PASSWORD="${2}"
             shift 2
             ;;
+        --no-force-password)
+            NO_FORCE_PASSWORD=1
+            shift 1
+            ;;
         -a|--addon)
             ADDON="${2}"
             shift 2
@@ -437,6 +444,10 @@ if [ -n "${INITIAL_PASSWORD}" ]; then
     ilog "Patching kickstart.cfg for custom default password"
     sed -i.bak 's@sudo --password 4SuW8cnXFyxsk@sudo --password 4SuW8cnXFyxsk; echo "sysadmin:'"$(openssl passwd -quiet -crypt "$INITIAL_PASSWORD")"'" | chpasswd -e@' "${BUILDDIR}/kickstart/kickstart.cfg"
 fi
+if [ -n "${NO_FORCE_PASSWORD}" ]; then
+    ilog "Patching kickstart.cfg for no forced password change"
+    sed -i.bak 's@chage -d 0 sysadmin@# DISABLED by update-iso.sh: chage -d 0 sysadmin@' "${BUILDDIR}/kickstart/kickstart.cfg"
+fi
 
 unmount_efiboot_img