[pacman-dev] [PATCH 1/4] pacman-key.sh.in: applied patch by Denis A. Altoé Falqueto
ivan.kanak at gmail.com
ivan.kanak at gmail.com
Wed Apr 20 06:03:50 EDT 2011
From: Ivan Kanakarakis <ivan.kanak at gmail.com>
Using -b to ignore whitespace this time
Signed-off-by: Ivan Kanakarakis <ivan.kanak at gmail.com>
---
scripts/pacman-key.sh.in | 110 ++++++++++++++++++++++++++++++----------------
1 files changed, 72 insertions(+), 38 deletions(-)
diff --git a/scripts/pacman-key.sh.in b/scripts/pacman-key.sh.in
index 89e52fc..0f6e3f5 100644
--- a/scripts/pacman-key.sh.in
+++ b/scripts/pacman-key.sh.in
@@ -66,7 +66,7 @@ usage() {
echo "$(gettext " -h, --help This help")"
echo "$(gettext " -l, --list List keys")"
echo "$(gettext " -r, --receive <keyserver> <keyid(s)> Fetch the specified keyids")"
- echo "$(gettext " -t, --trust <keyid(s)> Set the trust level of the given keyids")"
+ echo "$(gettext " -t | --edit-key <keyid> ... - edit trust properties for the given keys")"
echo "$(gettext " -u, --updatedb Update the trustdb of pacman")"
echo "$(gettext " -V, --version Show program version")"
echo "$(gettext " --adv <params> Use pacman's keyring with advanced gpg commands")"
@@ -110,7 +110,7 @@ reload_keyring() {
# Verify signatures of related files, if they exist
if [[ -r "${ADDED_KEYS}" ]]; then
msg "$(gettext "Verifying official keys file signature...")"
- if ! ${GPG_PACMAN} --quiet --batch --verify "${ADDED_KEYS}.sig" 1>/dev/null; then
+ if ! ${GPG_PACMAN} --verify "${ADDED_KEYS}.sig" &>/dev/null; then
error "$(gettext "The signature of file %s is not valid.")" "${ADDED_KEYS}"
exit 1
fi
@@ -118,7 +118,7 @@ reload_keyring() {
if [[ -r "${DEPRECATED_KEYS}" ]]; then
msg "$(gettext "Verifying deprecated keys file signature...")"
- if ! ${GPG_PACMAN} --quiet --batch --verify "${DEPRECATED_KEYS}.sig" 1>/dev/null; then
+ if ! ${GPG_PACMAN} --verify "${DEPRECATED_KEYS}.sig" &>/dev/null; then
error "$(gettext "The signature of file %s is not valid.")" "${DEPRECATED_KEYS}"
exit 1
fi
@@ -126,7 +126,7 @@ reload_keyring() {
if [[ -r "${REMOVED_KEYS}" ]]; then
msg "$(gettext "Verifying deleted keys file signature...")"
- if ! ${GPG_PACMAN} --quiet --batch --verify "${REMOVED_KEYS}.sig"; then
+ if ! ${GPG_PACMAN} --verify "${REMOVED_KEYS}.sig" &>/dev/null; then
error "$(gettext "The signature of file %s is not valid.")" "${REMOVED_KEYS}"
exit 1
fi
@@ -222,15 +222,40 @@ if [[ $1 != "--version" && $1 != "-V" && $1 != "--help" && $1 != "-h" && $1 != "
fi
fi
-# Parse global options
+# Iterate over the parameters to get --config and --gpgdir
+# The other parameters will be filtered to another array,
+# so --config and --gpgdir don't interfere with other options.
CONFIG="@sysconfdir@/pacman.conf"
-PACMAN_KEYRING_DIR="@sysconfdir@/pacman.d/gnupg"
-while [[ $1 =~ ^--(config|gpgdir)$ ]]; do
- case "$1" in
- --config) shift; CONFIG="$1" ;;
- --gpgdir) shift; PACMAN_KEYRING_DIR="$1" ;;
+declare -a PARAMS
+GPGDIR=""
+isconfig=0
+isgpgdir=0
+for arg in "$@"; do
+ if (( isconfig )); then
+ isconfig=0
+ CONFIG="$arg"
+ if [[ ! -f "$CONFIG" ]]; then
+ error "$(gettext "The configuration file is not a valid file.")"
+ usage
+ exit 1
+ fi
+ continue
+ fi
+ if (( isgpgdir )); then
+ isgpgdir=0
+ GPGDIR="$arg"
+ if [[ ! -d "$GPGDIR" ]]; then
+ error "$(gettext "The home directory for GnuPG is not valid.")"
+ usage
+ exit 1
+ fi
+ continue
+ fi
+ case "$arg" in
+ --config) isconfig=1;;
+ --gpgdir) isgpgdir=1;;
+*) PARAMS[${#PARAMS[@]}]="$arg"
esac
- shift
done
if [[ ! -r "${CONFIG}" ]]; then
@@ -239,11 +264,13 @@ if [[ ! -r "${CONFIG}" ]]; then
fi
# Read GPGDIR from $CONFIG.
-# The pattern is: any spaces or tabs, GPGDir, any spaces or tabs, equal sign
-# and the rest of the line. The string is splitted after the first occurrence of =
-if [[ GPGDIR=$(find_config "GPGDir") == 0 ]]; then
- PACMAN_KEYRING_DIR="${GPGDIR}"
-fi
+# The precedence for GPGDIR is:
+# 1st: command line
+# 2nd: pacman.conf
+# 3rd: default value
+[[ -z "$GPGDIR" ]] && GPGDIR=$(find_config "GPGDir")
+[[ -z "$GPGDIR" ]] && GPGDIR="@sysconfdir@/pacman.d/gnupg"
+PACMAN_KEYRING_DIR="${GPGDIR}"
GPG_PACMAN="gpg --homedir ${PACMAN_KEYRING_DIR} --no-permission-warning"
# Try to create $PACMAN_KEYRING_DIR if non-existent
@@ -252,24 +279,24 @@ GPG_PACMAN="gpg --homedir ${PACMAN_KEYRING_DIR} --no-permission-warning"
[[ -e ${PACMAN_KEYRING_DIR} ]] || mkdir -p -m 755 "${PACMAN_KEYRING_DIR}"
# Parse and execute command
-command="$1"
+command="${PARAMS[0]}"
if [[ -z "${command}" ]]; then
usage
exit 1
fi
-shift
+unset PARAMS[0]
case "${command}" in
-a|--add)
# If there is no extra parameter, gpg will read stdin
- ${GPG_PACMAN} --quiet --batch --import "$@"
+ ${GPG_PACMAN} --quiet --batch --import "${PARAMS[@]}"
;;
-d|--del)
- if (( $# == 0 )); then
+ if (( ${#PARAMS[@]} == 0 )); then
error "$(gettext "You need to specify at least one key identifier")"
+ usage
exit 1
fi
- ${GPG_PACMAN} --quiet --batch --delete-key --yes "$@"
;;
-u|--updatedb)
${GPG_PACMAN} --batch --check-trustdb
@@ -278,37 +305,37 @@ case "${command}" in
reload_keyring
;;
-l|--list)
- ${GPG_PACMAN} --batch --list-sigs "$@"
+ ${GPG_PACMAN} --list-sigs "${PARAMS[@]}"
;;
-f|--finger)
- ${GPG_PACMAN} --batch --fingerprint "$@"
+ ${GPG_PACMAN} --fingerprint "${PARAMS[@]}"
;;
-e|--export)
- ${GPG_PACMAN} --armor --export "$@"
+ ${GPG_PACMAN} --armor --export "${PARAMS[@]}"
;;
-r|--receive)
- if (( $# < 2 )); then
+ if (( ${#PARAMS[@]} < 2 )); then
error "$(gettext "You need to specify the keyserver and at least one key identifier")"
exit 1
fi
- keyserver="$1"
- shift
- ${GPG_PACMAN} --keyserver "${keyserver}" --recv-keys "$@"
+ keyserver="${PARAMS[0]}"
+ unset PARAMS[0]
+ ${GPG_PACMAN} --keyserver "${keyserver}" --recv-keys "${PARAMS[@]}"
;;
- -t|--trust)
- if (( $# == 0 )); then
+ -t|--edit-key)
+ if (( ${#PARAMS[@]} == 0 )); then
error "$(gettext "You need to specify at least one key identifier")"
exit 1
fi
- while (( $# > 0 )); do
+ while (( ${#PARAMS[@]} > 0 )); do
# Verify if the key exists in pacman's keyring
- if ${GPG_PACMAN} --list-keys "$1" > /dev/null 2>&1; then
- ${GPG_PACMAN} --edit-key "$1"
+ if ${GPG_PACMAN} --list-keys "${PARAMS[0]}" &>/dev/null; then
+ ${GPG_PACMAN} --edit-key "${PARAMS[0]}"
else
- error "$(gettext "The key identified by %s doesn't exist")" "$1"
+ error "$(gettext "The key identified by %s doesn't exist")" "${PARAMS[0]}"
exit 1
fi
- shift
+ unset PARAMS[0]
done
;;
--adv)
@@ -317,9 +344,16 @@ case "${command}" in
exit $ret
;;
-h|--help)
- usage; exit 0 ;;
+ usage;
+ exit 0
+ ;;
-V|--version)
- version; exit 0 ;;
- *)
+ version;
+ exit 0
+ ;;
+ # Parameters already handled
+ --config) shift ;;
+ --gpgdir) shift ;;
+*)
usage; exit 1 ;;
esac
--
1.7.4.4
More information about the pacman-dev
mailing list