summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2014-03-12 10:46:56 -0300
committerNicolás Reynolds <fauno@endefensadelsl.org>2014-03-12 10:46:56 -0300
commit5bbd4077065e9a10bab0c709c9e3edb0b7d0fc05 (patch)
tree5346a58bd85c54d8ada0e1264def1ecab5970f5d
parent0b52c6e030fc60377a4dfc0a4e142bee50b0344e (diff)
Hopefully fix a horrible bug that caused leaked packages
Also added a few checks
-rwxr-xr-xdb-sync24
-rwxr-xr-xlibremessages6
2 files changed, 24 insertions, 6 deletions
diff --git a/db-sync b/db-sync
index c90f89b..4a28aa1 100755
--- a/db-sync
+++ b/db-sync
@@ -62,6 +62,8 @@ init() {
msg "%d packages in blacklist" ${#blacklist[@]}
+ test ${#blacklist[@]} -eq 0 && fatal_error "Empty blacklist"
+
# Sync the repos databases
get_repos
@@ -86,10 +88,10 @@ init() {
# TODO capture all removed packages for printing on debug mode
msg2 "Removing blacklisted packages from %s database..." .db
LC_ALL=C repo-remove "${db_file}" "${blacklist[@]}" \
- |& sed -n 's/-> Removing/ &/p'
+ |& sed -n 's/-> Removing/ &/p'
msg2 "Removing blacklisted packages from %s database..." .files
LC_ALL=C repo-remove "${files_file}" "${blacklist[@]}" \
- |& sed -n 's/-> Removing/ &/p'
+ |& sed -n 's/-> Removing/ &/p'
# Get db contents
db=($(get_repo_content ${db_file}))
@@ -98,7 +100,10 @@ init() {
# Create a whitelist, add * wildcard to end
# TODO due to lack of -arch suffix, the pool sync retrieves every arch even if
# we aren't syncing them
- printf '%s\n' "${db[@]}" | sed "s|$|*|g" > /tmp/${_repo}-${_arch}.whitelist
+ # IMPORTANT: the . in the sed command is needed because an empty
+ # whitelist would consist of a single * allowing any package to
+ # pass through
+ printf '%s\n' "${db[@]}" | sed "s|.$|&*|g" > /tmp/${_repo}-${_arch}.whitelist
msg2 "$(wc -l /tmp/${_repo}-${_arch}.whitelist | cut -d' ' -f1) packages in whitelist"
@@ -130,8 +135,8 @@ init() {
msg "Syncing package pool"
- # Concatenate all whitelists
- cat ${whitelists[@]} | sort -u > /tmp/any.whitelist
+ # Concatenate all whitelists, check for single *s just in case
+ cat ${whitelists[@]} | grep -v "^\*$" | sort -u > /tmp/any.whitelist
msg2 "Retrieving $(wc -l /tmp/any.whitelist | cut -d' ' -f1) packages from pool"
@@ -182,10 +187,17 @@ source "$(dirname "$(readlink -e "$0")")/config"
source "$(dirname "$(readlink -e "$0")")/local_config"
source "$(dirname "$(readlink -e "$0")")/libremessages"
+# Check variables presence
+for var in DBEXT FILESEXT mirror mirrorpath WORKDIR BLACKLIST_FILE
+ FTP_BASE SRCPOOLS PKGPOOLS; do
+
+ test -z "${!var}" && fatal_error "Empty ${var}"
+done
+
# From makepkg
set -E
for signal in TERM HUP QUIT; do
- trap "trap_exit $signal '%s signal caught. Exiting...' $signal" $signal
+ trap "trap_exit $signal '%s signal caught. Exiting...' $signal" $signal
done
trap 'trap_exit INT "Aborted by user! Exiting..."' INT
trap 'trap_exit USR1 "An unknown error has occurred. Exiting..."' ERR
diff --git a/libremessages b/libremessages
index 9fbbc2b..0c6ded1 100755
--- a/libremessages
+++ b/libremessages
@@ -75,3 +75,9 @@ error() {
printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
}
+fatal_error() {
+ local mesg=$1; shift
+ error "$mesg" "$@"
+
+ exit 1
+}