summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorZdenek Prikryl <zprikryl@redhat.com>2009-08-20 17:43:59 +0200
committerZdenek Prikryl <zprikryl@redhat.com>2009-08-20 17:43:59 +0200
commitca44b47053cc6ea39f6ea56dab98b5cbf504dad4 (patch)
tree38533fb1ebe37cafaa086601bfe301d9b004f45c /lib
parente6b1174bd70e5f4442b6decfd5e72555a6c2661a (diff)
downloadabrt-ca44b47053cc6ea39f6ea56dab98b5cbf504dad4.tar.gz
abrt-ca44b47053cc6ea39f6ea56dab98b5cbf504dad4.tar.xz
abrt-ca44b47053cc6ea39f6ea56dab98b5cbf504dad4.zip
fixed signature check
Diffstat (limited to 'lib')
-rw-r--r--lib/MiddleWare/RPM.cpp36
1 files changed, 26 insertions, 10 deletions
diff --git a/lib/MiddleWare/RPM.cpp b/lib/MiddleWare/RPM.cpp
index 7a773184..6659457f 100644
--- a/lib/MiddleWare/RPM.cpp
+++ b/lib/MiddleWare/RPM.cpp
@@ -40,21 +40,37 @@ bool CRPM::CheckFingerprint(const std::string& pPackage)
rpmts ts = rpmtsCreate();
rpmdbMatchIterator iter = rpmtsInitIterator(ts, RPMTAG_NAME, pPackage.c_str(), 0);
Header header;
+
if ((header = rpmdbNextIterator(iter)) != NULL)
{
- if (headerIsEntry(header, RPMTAG_SIGGPG))
+ rpmTag rpmTags[] = { RPMTAG_DSAHEADER, RPMTAG_RSAHEADER, RPMTAG_SHA1HEADER };
+ int ii;
+ for (ii = 0; ii < 3; ii++)
{
- char* headerFingerprint;
- rpmtd td = rpmtdNew();
- headerGet(header, RPMTAG_SIGGPG, td, HEADERGET_DEFAULT);
- headerFingerprint = pgpHexStr((const uint8_t*)td->data + 9, sizeof(pgpKeyID_t));
- rpmtdFree(td);
- if (headerFingerprint != NULL)
+ if (headerIsEntry(header, rpmTags[ii]))
{
- if (m_setFingerprints.find(headerFingerprint) != m_setFingerprints.end())
+ rpmtd td = rpmtdNew();
+ headerGet(header, rpmTags[ii] , td, HEADERGET_DEFAULT);
+ char* pgpsig = rpmtdFormat(td, RPMTD_FORMAT_PGPSIG , NULL);
+ if (pgpsig)
{
- free(headerFingerprint);
- ret = true;
+ std::string PGPSignatureText = pgpsig;
+ free(pgpsig);
+
+ if (PGPSignatureText.find(" Key ID ") != std::string::npos)
+ {
+ std::string headerFingerprint = PGPSignatureText.substr(PGPSignatureText.find(" Key ID ") + sizeof (" Key ID ") - 1);
+
+ rpmtdFree(td);
+ if (headerFingerprint != "")
+ {
+ if (m_setFingerprints.find(headerFingerprint) != m_setFingerprints.end())
+ {
+ ret = true;
+ break;
+ }
+ }
+ }
}
}
}