65 lines
2.2 KiB
Diff
65 lines
2.2 KiB
Diff
From dc9e8169790eba18130fb96c13f56ecba6c9b346 Mon Sep 17 00:00:00 2001
|
|
From: Panu Matilainen <pmatilai@redhat.com>
|
|
Date: Tue, 6 Sep 2022 09:28:10 +0300
|
|
Subject: [PATCH] Make pgpPubkeyFingerprint() do something meaningful again
|
|
|
|
Commit 4bbeec134aab33e24f960be28a7b2198359c1f67 "fixed" an old
|
|
terminology confusion about keyid vs fingerprint, but in the process
|
|
broke pgpPubkeyFingerprint() for any external callers, as it now only
|
|
feeds on decoded packets whereas before it did the decoding by itself.
|
|
Add the decoding step back to the public function to make it usable outside
|
|
rpmpgp_internal.c again, retrieving a fingerprint seems like an useful
|
|
(public) API to have.
|
|
|
|
This is kind of a regression fix in that prior to commit
|
|
4bbeec134aab33e24f960be28a7b2198359c1f67 pgpPubkeyFingerprint() returned
|
|
meaningful data to the outside caller and afterwards it didn't, however
|
|
that commit broke the API anyhow so it's kinda complicated.
|
|
Maybe we should just call it a bugfix and be done with it.
|
|
|
|
Related to #1549
|
|
---
|
|
rpmio/rpmpgp.c | 15 +++++++++++++--
|
|
1 file changed, 13 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/rpmio/rpmpgp.c b/rpmio/rpmpgp.c
|
|
index d4dd4b89d..8d0d76869 100644
|
|
--- a/rpmio/rpmpgp.c
|
|
+++ b/rpmio/rpmpgp.c
|
|
@@ -650,7 +650,7 @@ static int pgpPrtUserID(pgpTag tag, const uint8_t *h, size_t hlen,
|
|
return 0;
|
|
}
|
|
|
|
-int pgpPubkeyFingerprint(const uint8_t *h, size_t hlen,
|
|
+static int getPubkeyFingerprint(const uint8_t *h, size_t hlen,
|
|
uint8_t **fp, size_t *fplen)
|
|
{
|
|
int rc = -1; /* assume failure */
|
|
@@ -717,11 +717,22 @@ int pgpPubkeyFingerprint(const uint8_t *h, size_t hlen,
|
|
return rc;
|
|
}
|
|
|
|
+int pgpPubkeyFingerprint(const uint8_t * pkt, size_t pktlen,
|
|
+ uint8_t **fp, size_t *fplen)
|
|
+{
|
|
+ struct pgpPkt p;
|
|
+
|
|
+ if (decodePkt(pkt, pktlen, &p))
|
|
+ return -1;
|
|
+
|
|
+ return getPubkeyFingerprint(p.body, p.blen, fp, fplen);
|
|
+}
|
|
+
|
|
static int getKeyID(const uint8_t *h, size_t hlen, pgpKeyID_t keyid)
|
|
{
|
|
uint8_t *fp = NULL;
|
|
size_t fplen = 0;
|
|
- int rc = pgpPubkeyFingerprint(h, hlen, &fp, &fplen);
|
|
+ int rc = getPubkeyFingerprint(h, hlen, &fp, &fplen);
|
|
if (fp && fplen > 8) {
|
|
memcpy(keyid, (fp + (fplen-8)), 8);
|
|
free(fp);
|
|
--
|
|
2.33.0
|
|
|