[pacman-dev] [PATCH 4/5] Parameter to select key to sign

Allan McRae allan at archlinux.org
Thu Nov 25 03:01:11 CET 2010


On 27/07/10 06:26, Denis A. Altoé Falqueto wrote:
> There is a possibility of another key being used, instead of
> the user's default. For exemple, the pacman-keyring package
> will be signed by a master key, because it needs to be trusted
> explicitly by the user before the installation of that package.
> So, the parameter --signwithkey will be used to supply an
> id of a key that will be used to sign a database or package.
>
> Signed-off-by: Denis A. Altoé Falqueto<denisfalqueto at gmail.com>
> ---
>   scripts/makepkg.sh.in  |   38 ++++++++++++++++++++--------
>   scripts/repo-add.sh.in |   63 +++++++++++++++++++++++++++++++++++-------------
>   2 files changed, 73 insertions(+), 28 deletions(-)


I would prefer this patch to be split into makepkg and repo-add parts 
and have the documentation patch similarly split and then the changes 
and documentation merged together.


> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 080e530..f6f9dfe 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -28,7 +28,7 @@
>   # makepkg uses quite a few external programs during its execution. You
>   # need to have at least the following installed for makepkg to function:
>   #   bsdtar (libarchive), bzip2, coreutils, fakeroot, find (findutils),
> -#   gettext, grep, gzip, openssl, sed, tput (ncurses), xz
> +#   gettext, grep, gzip, openssl, sed, tput (ncurses), xz, gpg

Try keeping this alphabetical.

>
>   # gettext initialization
>   export TEXTDOMAIN='pacman'
> @@ -43,6 +43,8 @@ BUILDSCRIPT='@BUILDSCRIPT@'
>   startdir="$PWD"
>   srcdir="$startdir/src"
>   pkgdir="$startdir/pkg"
> +GPG="gpg2"

Why change to gpg2?  In fact, I would prefer a separate patch that 
changes the "gpg" references to $GPG (=gpg by default) but allows the 
value to be overridden by environmental variables.  So if someone wants 
to use gpg2 they would do something like "GPG=gpg2 makepkg".

> +SIG_EXT=".sig"
We consider ".sig" hard-coded in pacman.  We should do the same here.

<snip>  otherwise makepkg changes are fine.

> diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
> index 4ee63d8..ac734aa 100644
> --- a/scripts/repo-add.sh.in
> +++ b/scripts/repo-add.sh.in
> @@ -26,6 +26,8 @@ export TEXTDOMAINDIR='@localedir@'
>
>   myver='@PACKAGE_VERSION@'
>   confdir='@sysconfdir@'
> +GPG="gpg2"
> +SIG_EXT=".sig"

Same comments as applied to makepkg.

>   QUIET=0
>   SIGN=0
> @@ -62,8 +64,8 @@ error() {
>   # print usage instructions
>   usage() {
>   	printf "repo-add, repo-remove (pacman) %s\n\n" "$myver"
> -	printf "$(gettext "Usage: repo-add [-q] [-s] [-v]<path-to-db>  <package|delta>  ...\n")"
> -	printf "$(gettext "Usage: repo-remove [-q]<path-to-db>  <packagename|delta>  ...\n\n")"
> +	printf "$(gettext "Usage: repo-add [-q] [-s [-k|--signwithkey key]] [-v]<path-to-db>  <package|delta>  ...\n")"
> +	printf "$(gettext "Usage: repo-remove [-q] [-s [-k|--signwithkey key]]<path-to-db>  <packagename|delta>  ...\n\n")"

Just list the short option here as is done with all other options.

<snip>

> @@ -492,10 +505,24 @@ trap 'trap_exit "$(gettext "An unknown error has occured. Exiting...")"' ERR
>
>   success=0
>   # parse arguments
> -for arg in "$@"; do
> +while [[ $#>  0 ]] ; do
> +	arg="$1"
>   	case "$arg" in
>   		-q|--quiet) QUIET=1;;
> -		-s|--sign) SIGN=1;;
> +		-s|--sign)
> +			SIGN=1
> +			# The signature will be made, even if there are no operations
> +			success=1
> +			;;
> +		-k|--signwithkey)
> +			shift
> +			SIGNKEY="$1"
> +			# Check if key really exists

We have not done any checks for the gpg binary at this stage...

> +			if ! ${GPG} --list-key ${SIGNKEY} 1>  /dev/null 2>&1; then
> +				error "$(gettext "Cannot find key $SIGNKEY.")"
> +				exit 1
> +			fi
> +			;;
>   		-v|--verify) VERIFY=1;;
>   		*)
>   			if [[ -z $REPO_DB_FILE ]]; then
> @@ -510,6 +537,7 @@ for arg in "$@"; do
>   			fi
>   			;;
>   	esac
> +	shift
>   done
>
>   # if at least one operation was a success, re-zip database
> @@ -529,18 +557,19 @@ if (( success )); then
>   	cd "$tmpdir"
>   	if [[ -n $(ls) ]]; then
>   		bsdtar -c${TAR_OPT}f "$filename" *
> -		create_signature "$filename"
>   	else
>   		# we have no packages remaining? zip up some emptyness
>   		warning "$(gettext "No packages remain, creating empty database.")"
>   		bsdtar -c${TAR_OPT}f "$filename" -T /dev/null
>   	fi
> +	# The signature must be dealt with in both cases, empty repo or not.
> +	create_signature "$filename"

Good catch






More information about the pacman-dev mailing list