summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-12-05 10:07:40 -0600
committerDan McGee <dan@archlinux.org>2011-12-05 10:48:47 -0600
commit17e0be9e6a5ed1cf5611e23d3c9debd0a3248077 (patch)
tree66ec5a04d9c92f21e92b2771bb777440b6cc021b
parentd85d0ddcfeab6212a588e50529744277f0ca48bb (diff)
repo-add: enforce maximum .sig file size
This prevents user error in adding a file generated via `gpg --sign` rather than `--detach-sign`, for example. The same 16KiB limit is used we use in our pacman download code. The section is moved above the checksum generation to avoid presenting info messages to the user if the signature isn't valid. Addresses a shortcoming pointed out in FS#27453. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--scripts/repo-add.sh.in19
1 files changed, 12 insertions, 7 deletions
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 5e1d7702..4708086c 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -245,7 +245,7 @@ db_write_entry() {
local pkgfile="$1"
local -a _groups _licenses _replaces _depends _conflicts _provides _optdepends
local pkgname pkgver pkgdesc csize size url arch builddate packager \
- md5sum sha256sum pgpsig
+ md5sum sha256sum pgpsig pgpsigsize
# read info from the zipped package
local line var val
@@ -284,6 +284,17 @@ db_write_entry() {
fi
fi
+ # compute base64'd PGP signature
+ if [[ -f "$pkgfile.sig" ]]; then
+ pgpsigsize=$(@SIZECMD@ "$pkgfile.sig")
+ if (( pgpsigsize > 16384 )); then
+ error "$(gettext "Invalid package signature file '%s'.")" "$pkgfile.sig"
+ return 1
+ fi
+ msg2 "$(gettext "Adding package signature...")"
+ pgpsig=$(openssl base64 -in "$pkgfile.sig" | tr -d '\n')
+ fi
+
csize=$(@SIZECMD@ "$pkgfile")
# compute checksums
@@ -293,12 +304,6 @@ db_write_entry() {
sha256sum="$(openssl dgst -sha256 "$pkgfile")"
sha256sum="${sha256sum##* }"
- # compute base64'd PGP signature
- if [[ -f "$pkgfile.sig" ]]; then
- msg2 "$(gettext "Adding package signature...")"
- pgpsig=$(openssl base64 -in "$pkgfile.sig" | tr -d '\n')
- fi
-
# remove an existing entry if it exists, ignore failures
db_remove_entry "$pkgname"