summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Reisner <d@falconindy.com>2011-06-21 19:58:32 +0200
committerDave Reisner <dreisner@archlinux.org>2011-06-27 19:39:02 +0200
commit399184d68f23e124e386a340abf5bcec968b322b (patch)
tree3bab6e52e280b5cbe8a67036d965cfb76e06ef1d
parent122b4c218785a89dcf6e1a335f6083aa166d4cdb (diff)
downloadpacman-399184d68f23e124e386a340abf5bcec968b322b.tar.gz
pacman-399184d68f23e124e386a340abf5bcec968b322b.tar.xz
repo-add: enforce file extensions
Allow one of 4 archive extensions: .tar{,.gz,.xz,.bz2} for each of the 2 valid repo extensions: .db and .files. Check for this via 'verify_repo_extension' directly after option parsing to assert that this extension is present, and again after files have been added to get the proper archive option for bsdtar. Signed-off-by: Dave Reisner <d@falconindy.com>
-rw-r--r--scripts/repo-add.sh.in29
1 files changed, 20 insertions, 9 deletions
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 6d09f0a3..7f5674e2 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -221,6 +221,22 @@ verify_signature() {
fi
}
+verify_repo_extension() {
+ local repofile=$1
+
+ case "$repofile" in
+ *.@(db|files).tar.gz) TAR_OPT="z" ;;
+ *.@(db|files).tar.bz2) TAR_OPT="j" ;;
+ *.@(db|files).tar.xz) TAR_OPT="J" ;;
+ *.@(db|files).tar) TAR_OPT="" ;;
+ *) error "$(gettext "'%s' does not have a valid archive extension.")" \
+ "$repofile"
+ exit 1 ;;
+ esac
+
+ printf '%s' "$TAR_OPT"
+}
+
# write an entry to the pacman database
# arg1 - path to package
db_write_entry() {
@@ -571,8 +587,11 @@ while (( $# )); do
shift
done
+
REPO_DB_FILE=${args[0]}
LOCKFILE=$REPO_DB_FILE.lck
+
+verify_repo_extension "$REPO_DB_FILE" >/dev/null
check_repo_db
for arg in "${args[@]:1}"; do
@@ -586,15 +605,7 @@ done
if (( success )); then
msg "$(gettext "Creating updated database file '%s'")" "$REPO_DB_FILE"
- case "$REPO_DB_FILE" in
- *.tar.gz) TAR_OPT="z" ;;
- *.tar.bz2) TAR_OPT="j" ;;
- *.tar.xz) TAR_OPT="J" ;;
- *.tar) TAR_OPT="" ;;
- *) warning "$(gettext "'%s' does not have a valid archive extension.")" \
- "$REPO_DB_FILE" ;;
- esac
-
+ TAR_OPT=$(verify_repo_extension "$REPO_DB_FILE")
filename=${REPO_DB_FILE##*/}
pushd "$tmpdir" >/dev/null