[pacman-dev] [PATCH v2] pacman-key: ignores keys already lsigned/deleted

Allan McRae allan at archlinux.org
Tue Nov 5 00:01:05 UTC 2019


Some additional comments

On 5/11/19 9:40 am, Allan McRae wrote:
>> +lsigned_already() {
>> +	# Determines whether a key has already been signed locally by getting the
>> +	# local pacman secret key and comparing it against signatures on the key
>> +	# returns 0 if key is signed, 1 if it is unsigned
>> +	secret_key=$("${GPG_PACMAN[@]}" --with-colons --list-secret-key | head -n1 | awk -F : '{print $5}')

gpg --with-colons --list-secret-key | awk -F : 'NR==1 {print $5}'

>> +    while IFS=: read -r _ valid _ _ signkey _; do

We should read the first value and check it is "sig".

>> +            if [[ "$valid" != "!" ]]; then
> 
> We don't quote the left hand side.
> 
>> +                continue
>> +            fi
>> +            if [[ "$signkey" = "$secret_key" ]]; then
>> +                return 0
>> +            fi
>> +	done < <("${GPG_PACMAN[@]}" --with-colons --check-signatures "$1")
>> +	return 1
>> +
>> +}
>>  
>>  lsign_keys() {
>>  	check_keyids_exist
>> @@ -454,6 +475,7 @@ lsign_keys() {
>>  	local ret=0
>>  	local key_count=0
>>  	for key_id in "$@"; do
>> +		if lsigned_already "$key_id" ; then	continue; fi
> 
> Put this over multiple lines.
> 
>>  		if (( VERBOSE )); then
>>  			msg2 "$(gettext "Locally signing key %s...")" "${key_id}"
>>  		fi
>> @@ -469,7 +491,9 @@ lsign_keys() {
>>  	if (( ret )); then
>>  		exit 1
>>  	fi
>> -	msg2 "$(gettext "Locally signed %s keys.")" "${key_count}"
>> +	if (( key_count )); then
>> +		msg2 "$(gettext "Locally signed %s keys.")" "${key_count}"
>> +	fi
>>  }
>>  
>>  receive_keys() {
>> @@ -511,6 +535,19 @@ refresh_keys() {
>>  	fi
>>  }
>>  
>> +revoked_already() {
>> +
>> +    while IFS=: read -r type _ _ _ _ _ _ _ _ _ _ flags _; do
>> +            if [[ "$type" != "pub" ]]; then
>> +                continue
>> +            fi
>> +            if [[ "$flags" = *"D"* ]]; then
> 
> That quoting on the RHS looked weird to me, but I think is fine...
> 
>> +                return 0
>> +            fi
>> +	done < <("${GPG_PACMAN[@]}" --with-colons --list-key "$1")
>> +	return 1
>> +}
>> +
>>  verify_sig() {
>>  	local ret=0 sig=$1 file=$2
>>  	if [[  -z $file && -f ${sig%.*} ]]; then
>>
> .
> 


More information about the pacman-dev mailing list