diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/makepkg.sh.in | 95 |
1 files changed, 54 insertions, 41 deletions
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 49f5e599..2b5171e4 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -1176,53 +1176,66 @@ generate_checksums() { done } -check_checksums() { - (( SKIPCHECKSUMS )) && return 0 - (( ! ${#source[@]} )) && return 0 +verify_integrity_one() { + local source_name=$1 integ=$2 expectedsum=$3 - local correlation=0 - local integ required - for integ in "${known_hash_algos[@]}"; do - local sumname="${integ}sums[@]" - local integrity_sums=("${!sumname}") - if (( ${#integrity_sums[@]} == ${#source[@]} )); then - msg "$(gettext "Validating source files with %s...")" "${integ}sums" - correlation=1 - local idx errors=0 - for (( idx = 0; idx < ${#source[*]}; idx++ )); do - local file="$(get_filename "${source[idx]}")" - printf ' %s ... ' "$file" >&2 - - if [[ ${integrity_sums[idx]} = 'SKIP' ]]; then - printf '%s\n' "$(gettext "Skipped")" >&2 - continue - fi + local file="$(get_filename "$source_name")" + printf ' %s ... ' "$file" >&2 - if ! file="$(get_filepath "$file")"; then - printf '%s\n' "$(gettext "NOT FOUND")" >&2 - errors=1 - continue - fi + if [[ $expectedsum = 'SKIP' ]]; then + printf '%s\n' "$(gettext "Skipped")" >&2 + return + fi - local expectedsum="${integrity_sums[idx],,}" - local realsum="$(openssl dgst -${integ} "$file")" - realsum="${realsum##* }" - if [[ $expectedsum = "$realsum" ]]; then - printf '%s\n' "$(gettext "Passed")" >&2 - else - printf '%s\n' "$(gettext "FAILED")" >&2 - errors=1 - fi - done + if ! file="$(get_filepath "$file")"; then + printf '%s\n' "$(gettext "NOT FOUND")" >&2 + return 1 + fi - if (( errors )); then - error "$(gettext "One or more files did not pass the validity check!")" - exit 1 # TODO: error code - fi - elif (( ${#integrity_sums[@]} )); then - error "$(gettext "Integrity checks (%s) differ in size from the source array.")" "$integ" + local realsum="$(openssl dgst -${integ} "$file")" + realsum="${realsum##* }" + if [[ ${expectedsum,,} = "$realsum" ]]; then + printf '%s\n' "$(gettext "Passed")" >&2 + else + printf '%s\n' "$(gettext "FAILED")" >&2 + return 1 + fi + + return 0 +} + +verify_integrity_sums() { + local integ=$1 integrity_sums + + array_build integrity_sums "${integ}sums" + + if (( ${#integrity_sums[@]} == ${#source[@]} )); then + msg "$(gettext "Validating source files with %s...")" "${integ}sums" + local idx errors=0 + for (( idx = 0; idx < ${#source[*]}; idx++ )); do + verify_integrity_one "${source[idx]}" "$integ" "${integrity_sums[idx]}" || errors=1 + done + + if (( errors )); then + error "$(gettext "One or more files did not pass the validity check!")" exit 1 # TODO: error code fi + elif (( ${#integrity_sums[@]} )); then + error "$(gettext "Integrity checks (%s) differ in size from the source array.")" "$integ" + exit 1 # TODO: error code + else + return 1 + fi +} + +check_checksums() { + (( SKIPCHECKSUMS )) && return 0 + (( ! ${#source[@]} )) && return 0 + + local correlation=0 + local integ + for integ in "${known_hash_algos[@]}"; do + verify_integrity_sums "$integ" && correlation=1 done if (( ! correlation )); then |