static int doImport(rpmts ts, const char *fn, char *buf, ssize_t blen) { char const * const pgpmark = "-----BEGIN PGP "; size_t marklen = strlen(pgpmark); int res = 0; int keyno = 1; char *start = strstr(buf, pgpmark); do { uint8_t *pkt = NULL; uint8_t *pkti = NULL; size_t pktlen = 0; size_t certlen; /* Read pgp packet. */ if (pgpParsePkts(start, &pkt, &pktlen) == PGPARMOR_PUBKEY) { pkti = pkt; /* Iterate over certificates in pkt */ while (pktlen > 0) { if (pgpPubKeyCertLen(pkti, pktlen, &certlen)) { rpmlog(RPMLOG_ERR, _("%s: key %d import failed.\n"), fn, keyno); res++; break; } /* Import pubkey certificate. */ if (rpmtsImportPubkey(ts, pkti, certlen) != RPMRC_OK) { rpmlog(RPMLOG_ERR, _("%s: key %d import failed.\n"), fn, keyno); res++; } pkti += certlen; pktlen -= certlen; } } else { rpmlog(RPMLOG_ERR, _("%s: key %d not an armored public key.\n"), fn, keyno); res++; } /* See if there are more keys in the buffer */ if (start && start + marklen < buf + blen) { start = strstr(start + marklen, pgpmark); } else { start = NULL; } keyno++; free(pkt); } while (start != NULL); return res; }
static PyObject * rpmts_PgpImportPubkey(rpmtsObject * s, PyObject * args, PyObject * kwds) { PyObject * blob; unsigned char * pkt; unsigned int pktlen; int rc; char * kwlist[] = {"pubkey", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwds, "S:PgpImportPubkey", kwlist, &blob)) return NULL; pkt = (unsigned char *)PyBytes_AsString(blob); pktlen = PyBytes_Size(blob); rc = rpmtsImportPubkey(s->ts, pkt, pktlen); return Py_BuildValue("i", rc); }
static int doImport(rpmts ts, const char *fn, char *buf, ssize_t blen) { char const * const pgpmark = "-----BEGIN PGP "; size_t marklen = strlen(pgpmark); int res = 0; int keyno = 1; char *start = strstr(buf, pgpmark); do { uint8_t *pkt = NULL; size_t pktlen = 0; /* Read pgp packet. */ if (pgpParsePkts(start, &pkt, &pktlen) == PGPARMOR_PUBKEY) { /* Import pubkey packet(s). */ if (rpmtsImportPubkey(ts, pkt, pktlen) != RPMRC_OK) { rpmlog(RPMLOG_ERR, _("%s: key %d import failed.\n"), fn, keyno); res++; } } else { rpmlog(RPMLOG_ERR, _("%s: key %d not an armored public key.\n"), fn, keyno); res++; } /* See if there are more keys in the buffer */ if (start && start + marklen < buf + blen) { start = strstr(start + marklen, pgpmark); } else { start = NULL; } keyno++; free(pkt); } while (start != NULL); return res; }