diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/pacman-key.sh.in | 31 | 
1 files changed, 16 insertions, 15 deletions
diff --git a/scripts/pacman-key.sh.in b/scripts/pacman-key.sh.in index 9bb8182a..a757b719 100644 --- a/scripts/pacman-key.sh.in +++ b/scripts/pacman-key.sh.in @@ -35,6 +35,7 @@ FINGER=0  IMPORT=0  IMPORT_TRUSTDB=0  INIT=0 +KEYSERVER=''  LISTKEYS=0  LISTSIGS=0  LSIGNKEY=0 @@ -43,6 +44,8 @@ RECEIVE=0  UPDATEDB=0  VERIFY=0 +DEFAULT_KEYSERVER='hkp://keys.gnupg.net' +  m4_include(library/output_format.sh)  m4_include(library/parse_options.sh) @@ -61,7 +64,7 @@ usage() {  	echo "$(gettext "  -f, --finger [keyid(s)]   List fingerprint for specified or all keyids")"  	echo "$(gettext "  -h, --help                Show this help message and exit")"  	echo "$(gettext "  -l, --list-keys [keyid(s)] List the specified or all keys")" -	echo "$(gettext "  -r, --receive <keyserver> <keyid(s)> Fetch the specified keyids")" +	echo "$(gettext "  -r, --recv-keys <keyid(s)> Fetch the specified keyids")"  	echo "$(gettext "  -u, --updatedb            Update the trustdb of pacman")"  	echo "$(gettext "  -v, --verify <signature>  Verify the file specified by the signature")"  	echo "$(gettext "  -V, --version             Show program version")" @@ -73,6 +76,7 @@ usage() {  	echo "$(gettext "  --import <dir(s)>         Imports pubring.gpg and trustdb.gpg from dir(s)")"  	echo "$(gettext "  --import-trustdb <dir(s)> Imports ownertrust values from trustdb.gpg in dir(s)")"  	echo "$(gettext "  --init                    Ensure the keyring is properly initialized")" +	echo "$(gettext "  --keyserver               Specify a keyserver to use if necessary")"  	echo "$(gettext "  --list-sigs [keyid(s)]    List keys and their signatures")"  	echo "$(gettext "  --lsign-key <keyid>       Locally sign the specified keyid")"  	printf "$(gettext "  --populate [keyring(s)] Reload the default keys from the (given) keyrings\n\ @@ -136,7 +140,7 @@ add_gpg_conf_option() {  }  initialize() { -	local conffile +	local conffile keyserv  	# Check for simple existence rather than for a directory as someone  	# may want to use a symlink here  	[[ -e ${PACMAN_KEYRING_DIR} ]] || mkdir -p -m 755 "${PACMAN_KEYRING_DIR}" @@ -155,7 +159,8 @@ initialize() {  	add_gpg_conf_option "$conffile" 'no-greeting'  	add_gpg_conf_option "$conffile" 'no-permission-warning'  	add_gpg_conf_option "$conffile" 'lock-never' -	add_gpg_conf_option "$conffile" 'keyserver' 'hkp://keys.gnupg.net' +	keyserv=${KEYSERVER:-$DEFAULT_KEYSERVER} +	add_gpg_conf_option "$conffile" 'keyserver' "$keyserv"  	# set up a private signing key (if none available)  	if [[ $(secret_keys_available) -lt 1 ]]; then @@ -304,14 +309,6 @@ populate_keyring() {  	fi  } -receive_keys() { -	if [[ -z ${KEYIDS[@]} ]]; then -		error "$(gettext "You need to specify the keyserver and at least one key identifier")" -		exit 1 -	fi -	"${GPG_PACMAN[@]}" --keyserver "$KEYSERVER" --recv-keys "${KEYIDS[@]}" -} -  edit_keys() {  	local errors=0;  	for key in ${KEYIDS[@]}; do @@ -365,8 +362,8 @@ fi  OPT_SHORT="a::d:e:f::hl::r:uv:V"  OPT_LONG="add::,config:,delete:,edit-key:,export::,finger::,gpgdir:" -OPT_LONG+=",help,import:,import-trustdb:,init,list-keys::,list-sigs::" -OPT_LONG+=",lsign-key:,populate::,receive:,updatedb,verify:,version" +OPT_LONG+=",help,import:,import-trustdb:,init,keyserver:,list-keys::,list-sigs::" +OPT_LONG+=",lsign-key:,populate::,recv-keys:,updatedb,verify:,version"  if ! OPT_TEMP="$(parse_options $OPT_SHORT $OPT_LONG "$@")"; then  	echo; usage; exit 1 # E_INVALID_OPTION;  fi @@ -390,11 +387,12 @@ while true; do  		--import)         IMPORT=1; shift; IMPORT_DIRS=($1); UPDATEDB=1 ;;  		--import-trustdb) IMPORT_TRUSTDB=1; shift; IMPORT_DIRS=($1); UPDATEDB=1 ;;  		--init)           INIT=1 ;; +		--keyserver)      shift; KEYSERVER=$1 ;;  		-l|--list-keys)   LISTKEYS=1; [[ -n $2 && ${2:0:1} != "-" ]] && shift && KEYIDS=($1) ;;  		--list-sigs)      LISTSIGS=1; [[ -n $2 && ${2:0:1} != "-" ]] && shift && KEYIDS=($1) ;;  		--lsign-key)      LSIGNKEY=1; shift; KEYIDS=($1); UPDATEDB=1 ;;  		--populate)       POPULATE=1; [[ -n $2 && ${2:0:1} != "-" ]] && shift && KEYRINGIDS=($1); UPDATEDB=1 ;; -		-r|--receive)     RECEIVE=1; shift; TMP=($1); KEYSERVER=${TMP[0]}; KEYIDS=(${TMP[@]:1}); unset TMP; UPDATEDB=1 ;; +		-r|--recv-keys)   RECEIVE=1; shift; KEYIDS=($1); UPDATEDB=1 ;;  		-u|--updatedb)    UPDATEDB=1 ;;  		-v|--verify)      VERIFY=1; shift; SIGNATURE=$1 ;; @@ -429,6 +427,9 @@ fi  PACMAN_KEYRING_DIR=${PACMAN_KEYRING_DIR:-$(get_from "$CONFIG" "GPGDir" || echo "@sysconfdir@/pacman.d/gnupg")}  GPG_PACMAN=(gpg --homedir ${PACMAN_KEYRING_DIR} --no-permission-warning) +if [[ -n ${KEYSERVER} ]]; then +	GPG_PACMAN+=(--keyserver ${KEYSERVER}) +fi  # check only a single operation has been given  # don't include UPDATEDB in here as other opts can induce it @@ -464,7 +465,7 @@ esac  # TODO: we can't do --batch on lsign until we figure out --command-fd  (( LSIGNKEY )) && "${GPG_PACMAN[@]}" --lsign-key "${KEYIDS[@]}"  (( POPULATE )) && populate_keyring -(( RECEIVE )) && receive_keys +(( RECEIVE )) && "${GPG_PACMAN[@]}" --recv-keys "${KEYIDS[@]}"  (( VERIFY )) && "${GPG_PACMAN[@]}" --verify $SIGNATURE  if (( UPDATEDB )); then  | 
