message => 'Unknown failure',
};
+ # check that there actually is key data
+ if ($data->{pkc}->{data} eq '') {
+ $ret->{message} = sprintf("Key data empty.");
+ return $status,$ret;
+ }
+
# check context string
if ($data->{context} =~ /^(https|ssh|smtp|ike|postgresql|imaps|imap|submission|e-mail)$/) {
$data->{context} = $1;
my $key;
my $gpgquery;
if (lc($data->{pkc}->{type}) eq 'openpgp4fpr') {
- if ($data->{pkc}->{data} =~ /^(0x)?([[:xdigit:]]+)$/) {
- $data->{pkc}->{data} = $2;
+ if ($data->{pkc}->{data} =~ /^(0x)?([[:xdigit:]]{40})$/) {
+ $data->{pkc}->{data} = uc($2);
$fpr = $data->{pkc}->{data};
msvalog('verbose', "OpenPGP v4 fingerprint: %s\n",$fpr);
} else {
}
# treat primary keys just like subkeys:
foreach my $subkey ($gpgkey, @{$gpgkey->subkeys}) {
- my $primarymatch;
- if (defined $key) {
- $primarymatch = keycomp($key, $subkey);
- } else {
- $primarymatch = 1;
- }
- if ($primarymatch) {
+ if ((defined($key) && keycomp($key, $subkey)) ||
+ (defined($fpr) && ($subkey->fingerprint->as_hex_string eq $fpr))) {
my $iscapable = 0;
msvalog('verbose', "key 0x%s matches...\n",$subkey->hex_id);
if ($data->{context} eq 'e-mail') {