diff options
author | Dave Reisner <d@falconindy.com> | 2011-06-21 19:58:32 +0200 |
---|---|---|
committer | Dave Reisner <dreisner@archlinux.org> | 2011-06-27 19:39:02 +0200 |
commit | 399184d68f23e124e386a340abf5bcec968b322b (patch) | |
tree | 3bab6e52e280b5cbe8a67036d965cfb76e06ef1d | |
parent | 122b4c218785a89dcf6e1a335f6083aa166d4cdb (diff) | |
download | pacman-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.in | 29 |
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 |