diff --git a/src/answer.sh b/src/answer.sh index 87127fb9..27eb2fe2 100644 --- a/src/answer.sh +++ b/src/answer.sh @@ -440,6 +440,11 @@ updateXML() { sed -i -E "s|[^<]*|$HEIGHT|g" "$asset" || return 1 sed -i -E "s|[^<]*|$WIDTH|g" "$asset" || return 1 + if [ -n "$HOST" ]; then + host=$(escapeXMLSed "$HOST") || return 1 + sed -i -E "s|[^<]*|$host|g" "$asset" || return 1 + fi + culture=$(getLanguage "$language" "culture") || return 1 if [ -n "$culture" ] && [[ "${culture,,}" != "en-us" ]]; then @@ -465,11 +470,6 @@ updateXML() { sed -i "s|0409:00000409|$value|g" "$asset" || return 1 fi - if [ -n "$HOST" ]; then - host=$(escapeXMLSed "$HOST") || return 1 - sed -i -E "s|[^<]*|$host|g" "$asset" || return 1 - fi - domain="$DOMAIN" workgroup="$WORKGROUP" @@ -544,19 +544,16 @@ updateXML() { sed -i "s|Docker|$user_xml|g" "$asset" || return 1 fi - fi - - if [ -n "$domain" ]; then - pass="admin" - else [ -n "$PASSWORD" ] && pass="$PASSWORD" || pass="admin" + + pw=$(printf '%s' "${pass}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) || return 1 + admin=$(printf '%s' "${pass}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) || return 1 + + sed -i -z -E "s#([[:space:]]*|>[^<]*)#\1>$pw#g" "$asset" || return 1 + sed -i -z -E "s#([[:space:]]*|>[^<]*)#\1>$admin#g" "$asset" || return 1 + fi - pw=$(printf '%s' "${pass}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) || return 1 - admin=$(printf '%s' "${pass}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) || return 1 - - sed -i -z -E "s#([[:space:]]*|>[^<]*)#\1>$pw#g" "$asset" || return 1 - sed -i -z -E "s#([[:space:]]*|>[^<]*)#\1>$admin#g" "$asset" || return 1 sed -i -E "s|[^<]*</PlainText>|<PlainText>false</PlainText>|g" "$asset" || return 1 if [ -n "$domain" ]; then @@ -569,6 +566,14 @@ updateXML() { return 1 fi + if ! sed -i -E \ + -e '/^[[:space:]]*<LocalAccounts([[:space:]>])/,/^[[:space:]]*<\/LocalAccounts>[[:space:]]*$/d' \ + -e '/^[[:space:]]*<AdministratorPassword([[:space:]>])/,/^[[:space:]]*<\/AdministratorPassword>[[:space:]]*$/d' \ + "$asset"; then + error "Failed to remove local account configuration from answer file!" + return 1 + fi + elif [ -n "$workgroup" ]; then if ! updateWorkgroup "$asset" "$workgroup"; then @@ -697,6 +702,8 @@ detectLegacy() { local dir="$1" local find + [[ "${PLATFORM,,}" != "x64" ]] && return 1 + find=$(find "$dir" -maxdepth 1 -type d -iname WIN95 -print -quit) [ -n "$find" ] && DETECTED="win95" && return 0