[pacman-dev] [PATCH 2/2] repo-add: enforce maximum .sig file size

Dave Reisner d at falconindy.com
Mon Dec 5 11:33:27 EST 2011


On Mon, Dec 05, 2011 at 10:09:45AM -0600, Dan McGee wrote:
> 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 at archlinux.org>
> ---
>  scripts/repo-add.sh.in |   19 ++++++++++++-------
>  1 files changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
> index 5e1d770..1cde913 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

This is a lexical comparison -- most sigs are going to fail this check.
You meant to use an arithmetic context:

  (( pgpsigsize > 16384 ))

This looks ifne otherwise.

> +			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"
>  
> -- 
> 1.7.8
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://mailman.archlinux.org/pipermail/pacman-dev/attachments/20111205/d4b87b80/attachment.asc>


More information about the pacman-dev mailing list