1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-08-13 17:03:46 -04:00

makepkg: properly correlate checksums for multiple sources

Previously, we used a single boolean value to determine correlation of
sources to checksums. Since the introduction of arch-specific sources,
this is no longer sufficient, as we must ensure that we have checksums
for (potentially) multiple source arrays.

This change inlines the logic of have_sources to build an associative
array of source array names, unsetting them as we discover their
checksums. The error condition then becomes a non-empty correlation
array.

Fixes: https://bugs.archlinux.org/task/43192

Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Dave Reisner 2014-12-23 10:57:29 -05:00 committed by Allan McRae
parent c07593c64c
commit d2d00e4543

View File

@ -1317,47 +1317,41 @@ verify_integrity_sums() {
fi fi
} }
have_sources() { check_checksums() {
local a local integ a
declare -A correlation
(( ${#source[*]} )) && return 0 (( SKIPCHECKSUMS )) && return 0
# Initialize a map which we'll use to verify that every source array has at
# least some kind of checksum array associated with it.
(( ${#source[*]} )) && correlation['source']=1
case $1 in case $1 in
all) all)
for a in "${arch[@]}"; do for a in "${arch[@]}"; do
array_build _ source_"$a" && return 0 array_build _ source_"$a" && correlation["source_$a"]=1
done done
;; ;;
*) *)
array_build _ source_"$CARCH" && return 0 array_build _ source_"$CARCH" && correlation["source_$CARCH"]=1
;; ;;
esac esac
return 1
}
check_checksums() {
(( SKIPCHECKSUMS )) && return 0
have_sources "$1" || return 0
local correlation=0
local integ a
for integ in "${known_hash_algos[@]}"; do for integ in "${known_hash_algos[@]}"; do
verify_integrity_sums "$integ" && correlation=1 verify_integrity_sums "$integ" && unset "correlation[source]"
case $1 in case $1 in
all) all)
for a in "${arch[@]}"; do for a in "${arch[@]}"; do
verify_integrity_sums "$integ" "$a" && correlation=1 verify_integrity_sums "$integ" "$a" && unset "correlation[source_$a]"
done done
;; ;;
*) *)
verify_integrity_sums "$integ" "$CARCH" && correlation=1 verify_integrity_sums "$integ" "$CARCH" && unset "correlation[source_$CARCH]"
;; ;;
esac esac
done done
if (( ! correlation )); then if (( ${#correlation[*]} )); then
error "$(gettext "Integrity checks are missing.")" error "$(gettext "Integrity checks are missing.")"
exit 1 # TODO: error code exit 1 # TODO: error code
fi fi