summaryrefslogtreecommitdiffstats
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
0 files changed, 0 insertions, 0 deletions
5'>55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
#include "RPMInfo.h"
#include <iostream>

CRPMInfo::CRPMInfo()
{
    char *argv[] = {(char*)""};
    m_poptContext = rpmcliInit(0, argv, NULL);
}

CRPMInfo::~CRPMInfo()
{
    rpmcliFini(m_poptContext);
}

void CRPMInfo::LoadOpenGPGPublicKey(const std::string& pFileName)
{
    uint8_t* pkt = NULL;
    size_t pklen;
    pgpKeyID_t keyID;
    if (pgpReadPkts(pFileName.c_str(), &pkt, &pklen) != PGPARMOR_PUBKEY)
    {
        free(pkt);
        std::cerr << "CRPMInfo::LoadOpenGPGPublicKey(): Can not load public key " + pFileName << std::endl;
        return;
    }
    if (pgpPubkeyFingerprint(pkt, pklen, keyID) == 0)
    {
        char* fedoraFingerprint = pgpHexStr(keyID, sizeof(keyID));
        if (fedoraFingerprint != NULL)
        {
            m_setFingerprints.insert(fedoraFingerprint);
        }
    }
    free(pkt);
}

bool CRPMInfo::CheckFingerprint(const std::string& pPackage)
{
    bool ret = false;
    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))
        {
            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 (m_setFingerprints.find(headerFingerprint) != m_setFingerprints.end())
                {
                    free(headerFingerprint);
                    ret = true;
                }
            }
        }
    }
    rpmdbFreeIterator(iter);
    rpmtsFree(ts);