Handle binary zip password files in installer
This commit is contained in:
@@ -189,6 +189,26 @@ download_from_url() {
|
||||
echo "Downloaded vault password file to: $DEST"
|
||||
}
|
||||
|
||||
read_zip_password_file() {
|
||||
# Bash strings cannot contain NUL bytes. Detect likely binary/invalid password
|
||||
# files before command substitution so agents do not hit:
|
||||
# warning: command substitution: ignored null byte in input
|
||||
original_size="$(wc -c < "$VAULT_PASS_ZIP_PASSWORD_FILE" | tr -d '[:space:]')"
|
||||
without_nul_size="$(LC_ALL=C tr -d '\000' < "$VAULT_PASS_ZIP_PASSWORD_FILE" | wc -c | tr -d '[:space:]')"
|
||||
if [ "$original_size" != "$without_nul_size" ]; then
|
||||
echo "VAULT_PASS_ZIP_PASSWORD_FILE appears to contain NUL bytes; provide a text password file instead." >&2
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# Accept the first line and strip a trailing CR for files copied from Windows.
|
||||
IFS= read -r zip_pass < "$VAULT_PASS_ZIP_PASSWORD_FILE" || true
|
||||
zip_pass="${zip_pass%$'\r'}"
|
||||
if [ -z "$zip_pass" ]; then
|
||||
echo "VAULT_PASS_ZIP_PASSWORD_FILE is empty: $VAULT_PASS_ZIP_PASSWORD_FILE" >&2
|
||||
exit 4
|
||||
fi
|
||||
}
|
||||
|
||||
extract_from_archive() {
|
||||
require_cmd unzip
|
||||
ensure_dest_dir
|
||||
@@ -210,7 +230,7 @@ ERR
|
||||
echo "Missing VAULT_PASS_ZIP_PASSWORD_FILE: $VAULT_PASS_ZIP_PASSWORD_FILE" >&2
|
||||
exit 4
|
||||
fi
|
||||
zip_pass="$(cat "$VAULT_PASS_ZIP_PASSWORD_FILE")"
|
||||
read_zip_password_file
|
||||
unzip -P "$zip_pass" -q "$ARCHIVE" -d "$tmpdir"
|
||||
elif [ -n "${VAULT_PASS_ZIP_PASSWORD:-}" ]; then
|
||||
unzip -P "$VAULT_PASS_ZIP_PASSWORD" -q "$ARCHIVE" -d "$tmpdir"
|
||||
|
||||
Reference in New Issue
Block a user